Pookie๋ ํฌ์ฆ ๋งค์นญ, ๋ชธ์ง ๊ฒ์, ๊ทธ๋ฆผ ๋ฆด๋ ์ด ๋ฑ ๋ค์ํ ์ค์๊ฐ ๋ฉํฐํ๋ ์ด์ด ๊ฒ์์ ์ ๊ณตํ๋ ์น ๊ธฐ๋ฐ ๊ฒ์ ํ๋ซํผ์ ๋๋ค.
Pookie๋ ์น๊ตฌ๋ค๊ณผ ํจ๊ป ์ฆ๊ธธ ์ ์๋ ๋ค์ํ ๋ฏธ๋๊ฒ์์ ์ ๊ณตํ๋ ์ค์๊ฐ ๋ฉํฐํ๋ ์ด์ด ๊ฒ์ ํ๋ซํผ์ ๋๋ค. ์น์บ ์ ํ์ฉํ ํฌ์ฆ ๋งค์นญ ๊ฒ์๋ถํฐ ์ฐฝ์์ ์ธ ๊ทธ๋ฆผ ๊ทธ๋ฆฌ๊ธฐ ๊ฒ์๊น์ง, ๋๊ตฌ๋ ์ฝ๊ฒ ์ฆ๊ธธ ์ ์๋ ๊ฒ์๋ค๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.
- ๐คธโโ๏ธ Same Pose: AI ํฌ์ฆ ์ธ์์ ํ์ฉํ ํฌ์ฆ ๋งค์นญ ๊ฒ์
- ๐คซ Silent Scream: ์ ๋ชจ์์ผ๋ก ๋จ์ด๋ฅผ ํํํ๋ ๊ฒ์
- ๐จ Sketch Relay: ์ค์๊ฐ ํ๋ ๊ทธ๋ฆผ ๊ทธ๋ฆฌ๊ธฐ ๊ฒ์
- ๐ฌ ์ค์๊ฐ ์ฑํ : WebSocket ๊ธฐ๋ฐ ์ค์๊ฐ ๋ฉ์์ง
- ๐ซ ์น๊ตฌ ์์คํ : ์น๊ตฌ ์ถ๊ฐ ๋ฐ ๊ฐ์ธ ๋ฉ์์ง ๊ธฐ๋ฅ
- ๐ญ ์บ๋ฆญํฐ ์์คํ : ์บ๋ฆญํฐ๋ฅผ ์งํ ์ํค๋ ์์คํ
- ๐ช ์์ ์์คํ : ๊ฒ์ ๋ด ํํ๋ก ์์ดํ ๊ตฌ๋งค
Pookie Platform
โโโ Frontend (React 19 + Vite)
โโโ Backend (Spring Boot 3.5)
โโโ AI Service (FastAPI + MediaPipe)
- ํ๋ ์์ํฌ: React 19 + Vite
- ์ํ ๊ด๋ฆฌ: Zustand with localStorage persistence
- ์คํ์ผ๋ง: TailwindCSS 4.1.11
- ์ค์๊ฐ ํต์ : WebSocket + LiveKit
- ๋ผ์ฐํ : React Router DOM 7.7.0
- ํ๋ ์์ํฌ: Spring Boot 3.5
- ๋ฐ์ดํฐ๋ฒ ์ด์ค: MySQL with JPA/Hibernate
- ์ธ์ฆ: JWT + OAuth2 (Kakao)
- ์ค์๊ฐ ํต์ : WebSocket + STOMP
- ๋น๋์ค ํต์ : LiveKit Server SDK
- ๋ชจ๋ํฐ๋ง: Prometheus + Actuator
- ํ๋ ์์ํฌ: FastAPI
- ํฌ์ฆ ์ธ์: MediaPipe
- ์ด๋ฏธ์ง ์ฒ๋ฆฌ: OpenCV with CLAHE
- ์ ์ฌ๋ ๊ณ์ฐ: Cosine similarity with keyword weighting
- ํด ๊ธฐ๋ฐ ์์คํ : ๋ชจ๋ ๊ฒ์์ ํ์ด๋จธ ๊ธฐ๋ฐ ์ฐจ๋ก ๊ต์ฒด ๊ฒ์์ ๋๋ค.
AI๋ฅผ ํ์ฉํ ํฌ์ฆ ์ธ์ ๊ธฐ์ ๋ก ์ ์๋ ํฌ์ฆ๋ฅผ ๋ฐ๋ผํ๋ ๊ฒ์์ ๋๋ค.
- ๊ธฐ์ : MediaPipe ํฌ์ฆ ๋๋๋งํฌ + ์ ๋๋๋งํฌ ์ธ์
- ์ ์ ๊ณ์ฐ: ์ฝ์ฌ์ธ ์ ์ฌ๋ ๊ธฐ๋ฐ ์ ํ๋ ์ธก์
์ ์๋ ๋จ์ด๋ฅผ ๋ชธ์ง์ผ๋ก ํํํ์ฌ ๋ค๋ฅธ ํ๋ ์ด์ด๊ฐ ๋ง์ถ๋ ๊ฒ์์ ๋๋ค.
- ๋น๋์ค ํต์ : LiveKit์ ํตํ ์ค์๊ฐ ์์ ๊ณต์
- ์ค์๊ฐ ์ฑํ : ๊ฒ์์ค์ ์ฑํ ์์คํ
ํ์๋ค์ด ๋์๊ฐ๋ฉฐ ๊ทธ๋ฆผ์ ๊ทธ๋ ค ์์ฑํ๋ ํ๋ ๊ฒ์์ ๋๋ค.
- ์ค์๊ฐ ๋๋ก์: WebSocket์ ํตํ ์ค์๊ฐ ๊ทธ๋ฆผ ๋๊ธฐํ
- Node.js 18+
- Java 17+
- Python 3.8+
- MySQL 8.0+
๐ฆ Pookie
โโโ ๐ frontend/ # React ํ๋ก ํธ์๋
โ โโโ ๐ src/
โ โ โโโ ๐ components/ # ์ปดํฌ๋ํธ (Atomic Design)
โ โ โ โโโ ๐ atoms/ # ๊ธฐ๋ณธ UI ์์
โ โ โ โโโ ๐ molecules/ # ์กฐํฉ๋ ์ปดํฌ๋ํธ
โ โ โ โโโ ๐ organisms/ # ๋ณต์กํ ์ปดํฌ๋ํธ
โ โ โโโ ๐ pages/ # ํ์ด์ง ์ปดํฌ๋ํธ
โ โ โโโ ๐ store/ # Zustand ์ํ ๊ด๋ฆฌ
โ โ โโโ ๐ sockets/ # WebSocket ํธ๋ค๋ฌ
โ โ โโโ ๐ utils/ # ์ ํธ๋ฆฌํฐ ํจ์
โ โโโ ๐ package.json
โโโ ๐ backend/ # Spring Boot ๋ฐฑ์๋
โ โโโ ๐ src/main/java/com/ssafy/pookie/
โ โ โโโ ๐ auth/ # ์ธ์ฆ ์์คํ
โ โ โโโ ๐ game/ # ๊ฒ์ ๋ก์ง
โ โ โ โโโ ๐ server/ # ๊ฒ์ ์๋ฒ
โ โ โ โโโ ๐ room/ # ๋ฐฉ ๊ด๋ฆฌ
โ โ โ โโโ ๐ draw/ # ๊ทธ๋ฆผ ๋๊ธฐํ
โ โ โ โโโ ๐ timer/ # ๊ฒ์ ํ์ด๋จธ
โ โ โโโ ๐ character/ # ์บ๋ฆญํฐ ์์คํ
โ โ โโโ ๐ friend/ # ์น๊ตฌ ์์คํ
โ โ โโโ ๐ webrtc/ # ๋น๋์ค ํต์
โ โโโ ๐ build.gradle
โโโ ๐ ai/ # AI ํฌ์ฆ ์ธ์ ์๋น์ค
โ โโโ ๐ main.py # FastAPI ์๋ฒ
โ โโโ ๐ requirements.txt
โโโ ๐ README.md
- ์ผ๋ฐ ํ์๊ฐ์ ๋๋ ์นด์นด์ค OAuth ๋ก๊ทธ์ธ ์ง์
- JWT ํ ํฐ ๊ธฐ๋ฐ ์ธ์ฆ ์์คํ
- ๋น๋ฐ๋ฒํธ๊ฐ ์๋ ๋น๊ณต๊ฐ ๋ฐฉ ์์ฑ ๊ฐ๋ฅ
- ์ต๋ 4๋ช ๊น์ง ์ฐธ์ฌ ๊ฐ๋ฅ
- ์ค์๊ฐ ๋ฐฉ ๋ชฉ๋ก ์ ๋ฐ์ดํธ
- ์น์บ ๊ถํ ํ์ฉ
- ํ๋ฉด์ ํ์๋๋ ํฌ์ฆ ๋ฐ๋ผํ๊ธฐ
- AI๊ฐ ํฌ์ฆ ์ ํ๋๋ฅผ ์ค์๊ฐ ์ฑ์
- ๊ฐ์ฅ ๋์ ์ ์๋ฅผ ๋ฐ์ ํ๋ ์ด์ด ์น๋ฆฌ
- ์ฐจ๋ก๋๋ก ์ ์์ด๋ฅผ ๋ชธ์ง์ผ๋ก ํํ
- ๋ค๋ฅธ ํ๋ ์ด์ด๋ค์ด ์ฑํ ์ผ๋ก ์ ๋ต ์ ๋ ฅ
- ์ ํ ์๊ฐ ๋ด์ ์ ๋ต ๋ง์ถ๊ธฐ
- ํํ์์ ์ ๋ต์ ๋ชจ๋ ์ ์ ํ๋
- ํ๋ณ๋ก ๋๋์ด ๋ฆด๋ ์ด ๊ทธ๋ฆผ ๊ทธ๋ฆฌ๊ธฐ
- ๊ฐ์ ์ ํ ์๊ฐ ๋์ ๊ทธ๋ฆผ ์ด์ด๊ทธ๋ฆฌ๊ธฐ
- ๋ง์ง๋ง์ ์์ฑ๋ ๊ทธ๋ฆผ์ ์ฃผ์ ๋ง์ถ๊ธฐ
- ํ ๋จ์๋ก ์ ์ ๊ณ์ฐ
- Frontend: React ๊ธฐ๋ฐ ์ค์๊ฐ ๊ฒ์ UI/UX ๊ฐ๋ฐ
- Backend: Spring Boot ๊ธฐ๋ฐ ๊ฒ์ ์๋ฒ ๋ฐ ์ค์๊ฐ ํต์ ๊ตฌํ
- AI: MediaPipe ๊ธฐ๋ฐ ํฌ์ฆ ์ธ์ ๋ฐ ์ ์ฌ๋ ๊ณ์ฐ ์์คํ ๊ฐ๋ฐ

