Skip to content

A604-web/POOKIE

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

1,203 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐ŸŽฎ Pookie - Real-time Multiplayer Game Platform

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)

๐Ÿ“ฑ Frontend

  • ํ”„๋ ˆ์ž„์›Œํฌ: React 19 + Vite
  • ์ƒํƒœ ๊ด€๋ฆฌ: Zustand with localStorage persistence
  • ์Šคํƒ€์ผ๋ง: TailwindCSS 4.1.11
  • ์‹ค์‹œ๊ฐ„ ํ†ต์‹ : WebSocket + LiveKit
  • ๋ผ์šฐํŒ…: React Router DOM 7.7.0

๐Ÿš€ Backend

  • ํ”„๋ ˆ์ž„์›Œํฌ: Spring Boot 3.5
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค: MySQL with JPA/Hibernate
  • ์ธ์ฆ: JWT + OAuth2 (Kakao)
  • ์‹ค์‹œ๊ฐ„ ํ†ต์‹ : WebSocket + STOMP
  • ๋น„๋””์˜ค ํ†ต์‹ : LiveKit Server SDK
  • ๋ชจ๋‹ˆํ„ฐ๋ง: Prometheus + Actuator

๐Ÿค– AI Service

  • ํ”„๋ ˆ์ž„์›Œํฌ: FastAPI
  • ํฌ์ฆˆ ์ธ์‹: MediaPipe
  • ์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ: OpenCV with CLAHE
  • ์œ ์‚ฌ๋„ ๊ณ„์‚ฐ: Cosine similarity with keyword weighting

๐ŸŒ ์ธํ”„๋ผ ์•„ํ‚คํ…์ณ

alt text

๐Ÿ—ƒ๏ธ ERD

alt text

๐ŸŽฎ ๊ฒŒ์ž„ ์†Œ๊ฐœ

  • ํ„ด ๊ธฐ๋ฐ˜ ์‹œ์Šคํ…œ: ๋ชจ๋“  ๊ฒŒ์ž„์€ ํƒ€์ด๋จธ ๊ธฐ๋ฐ˜ ์ฐจ๋ก€ ๊ต์ฒด ๊ฒŒ์ž„์ž…๋‹ˆ๋‹ค.

๐Ÿคธโ€โ™€๏ธ Same Pose (ํฌ์ฆˆ ๋งค์นญ)

AI๋ฅผ ํ™œ์šฉํ•œ ํฌ์ฆˆ ์ธ์‹ ๊ธฐ์ˆ ๋กœ ์ œ์‹œ๋œ ํฌ์ฆˆ๋ฅผ ๋”ฐ๋ผํ•˜๋Š” ๊ฒŒ์ž„์ž…๋‹ˆ๋‹ค.

  • ๊ธฐ์ˆ : MediaPipe ํฌ์ฆˆ ๋žœ๋“œ๋งˆํฌ + ์† ๋žœ๋“œ๋งˆํฌ ์ธ์‹
  • ์ ์ˆ˜ ๊ณ„์‚ฐ: ์ฝ”์‚ฌ์ธ ์œ ์‚ฌ๋„ ๊ธฐ๋ฐ˜ ์ •ํ™•๋„ ์ธก์ •

๐Ÿคซ Silent Scream (๋ชธ์ง“ ๊ฒŒ์ž„)

์ œ์‹œ๋œ ๋‹จ์–ด๋ฅผ ๋ชธ์ง“์œผ๋กœ ํ‘œํ˜„ํ•˜์—ฌ ๋‹ค๋ฅธ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๋งž์ถ”๋Š” ๊ฒŒ์ž„์ž…๋‹ˆ๋‹ค.

  • ๋น„๋””์˜ค ํ†ต์‹ : LiveKit์„ ํ†ตํ•œ ์‹ค์‹œ๊ฐ„ ์˜์ƒ ๊ณต์œ 
  • ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ…: ๊ฒŒ์ž„์ค‘์˜ ์ฑ„ํŒ… ์‹œ์Šคํ…œ

๐ŸŽจ Sketch Relay (๊ทธ๋ฆผ ๋ฆด๋ ˆ์ด)

ํŒ€์›๋“ค์ด ๋Œ์•„๊ฐ€๋ฉฐ ๊ทธ๋ฆผ์„ ๊ทธ๋ ค ์™„์„ฑํ•˜๋Š” ํ˜‘๋™ ๊ฒŒ์ž„์ž…๋‹ˆ๋‹ค.

  • ์‹ค์‹œ๊ฐ„ ๋“œ๋กœ์ž‰: 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

๐ŸŽฎ ๊ฒŒ์ž„ ํ”Œ๋ ˆ์ด ๊ฐ€์ด๋“œ

1. ํšŒ์›๊ฐ€์ž… ๋ฐ ๋กœ๊ทธ์ธ

  • ์ผ๋ฐ˜ ํšŒ์›๊ฐ€์ž… ๋˜๋Š” ์นด์นด์˜ค OAuth ๋กœ๊ทธ์ธ ์ง€์›
  • JWT ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ ์‹œ์Šคํ…œ

2. ๊ฒŒ์ž„ ๋ฐฉ ์ƒ์„ฑ/์ฐธ์—ฌ

  • ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์žˆ๋Š” ๋น„๊ณต๊ฐœ ๋ฐฉ ์ƒ์„ฑ ๊ฐ€๋Šฅ
  • ์ตœ๋Œ€ 4๋ช…๊นŒ์ง€ ์ฐธ์—ฌ ๊ฐ€๋Šฅ
  • ์‹ค์‹œ๊ฐ„ ๋ฐฉ ๋ชฉ๋ก ์—…๋ฐ์ดํŠธ

3. ๊ฒŒ์ž„ ์ข…๋ฅ˜๋ณ„ ํ”Œ๋ ˆ์ด ๋ฐฉ๋ฒ•

Same Pose

  1. ์›น์บ  ๊ถŒํ•œ ํ—ˆ์šฉ
  2. ํ™”๋ฉด์— ํ‘œ์‹œ๋˜๋Š” ํฌ์ฆˆ ๋”ฐ๋ผํ•˜๊ธฐ
  3. AI๊ฐ€ ํฌ์ฆˆ ์ •ํ™•๋„๋ฅผ ์‹ค์‹œ๊ฐ„ ์ฑ„์ 
  4. ๊ฐ€์žฅ ๋†’์€ ์ ์ˆ˜๋ฅผ ๋ฐ›์€ ํ”Œ๋ ˆ์ด์–ด ์Šน๋ฆฌ

Silent Scream

  1. ์ฐจ๋ก€๋Œ€๋กœ ์ œ์‹œ์–ด๋ฅผ ๋ชธ์ง“์œผ๋กœ ํ‘œํ˜„
  2. ๋‹ค๋ฅธ ํ”Œ๋ ˆ์ด์–ด๋“ค์ด ์ฑ„ํŒ…์œผ๋กœ ์ •๋‹ต ์ž…๋ ฅ
  3. ์ œํ•œ ์‹œ๊ฐ„ ๋‚ด์— ์ •๋‹ต ๋งž์ถ”๊ธฐ
  4. ํ‘œํ˜„์ž์™€ ์ •๋‹ต์ž ๋ชจ๋‘ ์ ์ˆ˜ ํš๋“

Sketch Relay

  1. ํŒ€๋ณ„๋กœ ๋‚˜๋ˆ„์–ด ๋ฆด๋ ˆ์ด ๊ทธ๋ฆผ ๊ทธ๋ฆฌ๊ธฐ
  2. ๊ฐ์ž ์ œํ•œ ์‹œ๊ฐ„ ๋™์•ˆ ๊ทธ๋ฆผ ์ด์–ด๊ทธ๋ฆฌ๊ธฐ
  3. ๋งˆ์ง€๋ง‰์— ์™„์„ฑ๋œ ๊ทธ๋ฆผ์˜ ์ฃผ์ œ ๋งž์ถ”๊ธฐ
  4. ํŒ€ ๋‹จ์œ„๋กœ ์ ์ˆ˜ ๊ณ„์‚ฐ

๐Ÿ‘ฅ ํŒ€์›

  • Frontend: React ๊ธฐ๋ฐ˜ ์‹ค์‹œ๊ฐ„ ๊ฒŒ์ž„ UI/UX ๊ฐœ๋ฐœ
  • Backend: Spring Boot ๊ธฐ๋ฐ˜ ๊ฒŒ์ž„ ์„œ๋ฒ„ ๋ฐ ์‹ค์‹œ๊ฐ„ ํ†ต์‹  ๊ตฌํ˜„
  • AI: MediaPipe ๊ธฐ๋ฐ˜ ํฌ์ฆˆ ์ธ์‹ ๋ฐ ์œ ์‚ฌ๋„ ๊ณ„์‚ฐ ์‹œ์Šคํ…œ ๊ฐœ๋ฐœ

About

mini web game platform

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 6