Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

224 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๋ฐฉ๋ฐฉ๋ด ๋กœ๊ณ 

๐Ÿ  ๋ฐฉ๋ฐฉ๋ด (bangbangbwa)

๋ฐฉ์„ ๋ฐฉ์†ก์œผ๋กœ ๋ด โ€” ๊ณต์ธ์ค‘๊ฐœ์‚ฌ์™€ ์‹ค์‹œ๊ฐ„ ํ™”์ƒ์œผ๋กœ ๋งค๋ฌผ์„ ํ™•์ธํ•˜๊ณ ,
์ฒดํฌ๋ฆฌ์ŠคํŠธ์™€ AI ํ•˜์ž ๋ฆฌํฌํŠธ๋กœ ๊ธฐ๋ก์„ ๋‚จ๊ธฐ๋Š” ๋น„๋Œ€๋ฉด ๋ถ€๋™์‚ฐ ํˆฌ์–ด ์„œ๋น„์Šค


๋งค๋ฌผ ํ•œ ๋ฒˆ ๋ณด๋Ÿฌ ์™•๋ณต 4์‹œ๊ฐ„, ์‚ฌ์ง„๊ณผ ๋‹ค๋ฅธ ์‹ค๋ฌผ, ๋ญ˜ ํ™•์ธํ•ด์•ผ ํ• ์ง€ ๋ชจ๋ฅด๋Š” ์ฒซ ๊ณ„์•ฝ. ๋ฐฉ๋ฐฉ๋ด๋Š” ์ง‘ ๋ณด๋Š” ๋ฐฉ์‹์„ "์˜ˆ์•ฝ โ†’ ๋ผ์ด๋ธŒ ํˆฌ์–ด โ†’ ์ฒดํฌ๋ฆฌ์ŠคํŠธ โ†’ AI ๋ฆฌํฌํŠธ" ๋„ค ๋‹จ๊ณ„๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

๐Ÿ“‹ ๋ชฉ์ฐจ

๐Ÿ“Œ ํ”„๋กœ์ ํŠธ ๊ฐœ์š”

๋ฌธ์ œ ์ •์˜

์ž์ทจ๋ฐฉ ๊ตฌํ•˜๊ธฐ์˜ 3๋Œ€ ํŽ˜์ธํฌ์ธํŠธ์—์„œ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

  1. ์™•๋ณต 4์‹œ๊ฐ„ ๋ฐœํ’ˆ โ€” ๋งค๋ฌผ ํ•˜๋‚˜ ๋ณด๋ ค๊ณ  ๋ฐ˜๋‚˜์ ˆ์„ ์”๋‹ˆ๋‹ค
  2. ์‚ฌ์ง„๊ณผ ๋‹ค๋ฅธ ์‹ค๋ฌผ โ€” ๋„์ฐฉํ•ด ๋ณด๋ฉด ์‚ฌ์ง„์ด ์ข‹์•˜์„ ๋ฟ์ž…๋‹ˆ๋‹ค
  3. ์ฒ˜์Œ ํ•ด๋ณด๋Š” ๊ณ„์•ฝ โ€” ๊ณฐํŒก์ดยท์ˆ˜์••ยท์ฑ„๊ด‘, ๋ญ˜ ํ™•์ธํ•ด์•ผ ํ• ์ง€ ๋ชจ๋ฆ…๋‹ˆ๋‹ค

ํ•ด๊ฒฐ ๋ฐฉํ–ฅ

"์ง์ ‘ ๊ฐ€์ง€ ์•Š์•„๋„, ๋†“์น˜๋Š” ๊ฒƒ ์—†์ด, ๊ธฐ๋ก์ด ๋‚จ๊ฒŒ ์ง‘์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค๋ฉด?"

์˜ˆ์•ฝ โ”€โ”€โ–ถ ๋ผ์ด๋ธŒ ํˆฌ์–ด โ”€โ”€โ–ถ ์ฒดํฌ๋ฆฌ์ŠคํŠธ โ”€โ”€โ–ถ AI ํ•˜์ž ๋ฆฌํฌํŠธ
        (WebRTC ํ™”์ƒ)     (์‹ค์‹œ๊ฐ„ ๊ธฐ๋ก)    (๊ณฐํŒก์ด ๋“ฑ ์ž๋™ ํƒ์ง€)
  1. ์˜ˆ์•ฝ: ๋งˆ์Œ์— ๋“œ๋Š” ๋งค๋ฌผ์— ๋ผ์ด๋ธŒ ํˆฌ์–ด๋ฅผ ์˜ˆ์•ฝ
  2. ๋ผ์ด๋ธŒ ํˆฌ์–ด: ๊ณต์ธ์ค‘๊ฐœ์‚ฌ์™€ 1:1 WebRTC ํ™”์ƒ์œผ๋กœ ๋งค๋ฌผ์„ ์‹ค์‹œ๊ฐ„ ํ™•์ธ
  3. ์ฒดํฌ๋ฆฌ์ŠคํŠธ: ํˆฌ์–ด ์ค‘ ํ™•์ธ ํ•ญ๋ชฉ์„ ๊ทธ ์ž๋ฆฌ์—์„œ ๊ธฐ๋ก
  4. AI ๋ฆฌํฌํŠธ: ํˆฌ์–ด ์˜์ƒ ํ”„๋ ˆ์ž„์„ AI๊ฐ€ ๋ถ„์„ํ•ด ๊ณฐํŒก์ด ๋“ฑ ํ•˜์ž๋ฅผ ํƒ์ง€ํ•œ ๋ฆฌํฌํŠธ ์ œ๊ณต

ํ”„๋กœ์ ํŠธ ์ •๋ณด

ํ•ญ๋ชฉ ๋‚ด์šฉ
๊ธฐ๊ฐ„ 2026.07 ~ 2026.08 (์•ฝ 4์ฃผ)
ํŒ€ ๊ตฌ์„ฑ 6์ธ โ€” FE 3 ยท BE 3 ยท AI 2 ยท ์ธํ”„๋ผ 1 (๊ฒธ์ž„ ํฌํ•จ)
์ €์žฅ์†Œ ๊ตฌ์กฐ frontend/ React SPA ยท backend/ Spring Boot ยท infra/ coturn ๋“ฑ ์ธํ”„๋ผ ์„ค์ •

โœจ ์ฃผ์š” ๊ธฐ๋Šฅ

  1. ๋งค๋ฌผ ํƒ์ƒ‰: ๊ฒ€์ƒ‰ ยท ์ง€์—ญ ยท ๊ฐ€๊ฒฉ ยท ์œ ํ˜• ํ•„ํ„ฐ, Kakao ์ง€๋„ ๋ทฐ(๋งˆ์ปค ํด๋Ÿฌ์Šคํ„ฐ๋ง ยท ์ปค์Šคํ…€ ๋งˆ์ปค 9์ข… ยท ์ฃผ๋ณ€ ํŽธ์˜์‹œ์„ค), ์ €์žฅ(์ฐœ)
  2. ๋ผ์ด๋ธŒ ํˆฌ์–ด ์˜ˆ์•ฝ: ๋งค๋ฌผ ์ƒ์„ธ์—์„œ ์›ํ•˜๋Š” ์‹œ๊ฐ„์— ํˆฌ์–ด ์˜ˆ์•ฝ, ์˜ˆ์•ฝ ํ˜„ํ™ฉ ๊ด€๋ฆฌ
  3. WebRTC ๋ผ์ด๋ธŒ ํˆฌ์–ด: ๊ณต์ธ์ค‘๊ฐœ์‚ฌ โ†” ์„ธ์ž…์ž 1:1 ์‹ค์‹œ๊ฐ„ ํ™”์ƒ ์—ฐ๊ฒฐ, TURN ์ค‘๊ณ„๋กœ ์…€๋ฃฐ๋Ÿฌยท์‚ฌ๋‚ด๋ง์—์„œ๋„ ์—ฐ๊ฒฐ ๋ณด์žฅ
  4. ์‹ค์‹œ๊ฐ„ ์ฒดํฌ๋ฆฌ์ŠคํŠธ: ํˆฌ์–ด ์ค‘ ํ™•์ธ ํ•ญ๋ชฉ์„ ๊ธฐ๋ก, ๋ฐฑ์—”๋“œ API ์—ฐ๋™์œผ๋กœ ์„ธ์…˜๋ณ„ ์ €์žฅ
  5. AI ํ•˜์ž ๋ฆฌํฌํŠธ: ๋ผ์ด๋ธŒ ์ค‘ "๊ณฐํŒก์ด ์˜์‹ฌ N๊ฑด ๊ฐ์ง€" ์‹ค์‹œ๊ฐ„ ๋ฐฐ์ง€, ์ข…๋ฃŒ ํ›„ ์บก์ฒ˜ ์ด๋ฏธ์ง€ + ํ•˜์ž ์œ ํ˜• ๋ฐฐ์ง€๊ฐ€ ๋‹ด๊ธด ๋ถ„์„ ๋ฆฌํฌํŠธ
  6. ์†Œ์…œ ๋กœ๊ทธ์ธ ยท ๊ด€๋ฆฌ์ž: ์นด์นด์˜ค ยท ๊ตฌ๊ธ€ OAuth2 ๋กœ๊ทธ์ธ, ์ค‘๊ฐœ์ธ ์ธ์ฆ ์‹ฌ์‚ฌ ๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€

๐Ÿ–ฅ ์„œ๋น„์Šค ํ™”๋ฉด

WebRTC ๋ผ์ด๋ธŒ ํˆฌ์–ด ํ™”๋ฉด

๊ณต์ธ์ค‘๊ฐœ์‚ฌ์™€ 1:1 ํ™”์ƒ์œผ๋กœ ๋งค๋ฌผ์„ ํ™•์ธํ•˜๋Š” ๋ผ์ด๋ธŒ ํˆฌ์–ด

ํ™”๋ฉด ์„ค๋ช…
๋žœ๋”ฉ (/) ํžˆ์–ด๋กœ ์‡ผ์ผ€์ด์Šค(๋งค๋ฌผ ์นด๋“œ โ†’ ์Šคํฌ๋กค ์‹œ ํˆฌ์–ด ์˜์ƒ ์žฌ์ƒ), ํ’€ํŽ˜์ด์ง€ ์Šค๋ƒ… + ์„น์…˜ ๋„ํŠธ ๋‚ด๋น„๊ฒŒ์ด์…˜
๋งค๋ฌผ ๋ชฉ๋ก (/properties) ๊ฒ€์ƒ‰ ยท ํ•„ํ„ฐ, ๋งค๋ฌผ ์นด๋“œ ๊ทธ๋ฆฌ๋“œ, ์ง€๋„ ๋ทฐ(ํด๋Ÿฌ์Šคํ„ฐ๋ง ยท ํŽธ์˜์‹œ์„ค), ์ €์žฅ ํ† ๊ธ€
๋งค๋ฌผ ์ƒ์„ธ (/properties/:id) ์‚ฌ์ง„ ์บ๋Ÿฌ์…€, ๋งค๋ฌผ ์ •๋ณด, ์ฃผ๋ณ€ ํŽธ์˜์‹œ์„ค(์ง€ํ•˜์ฒ  ยท ํŽธ์˜์  ยท ๋นจ๋ž˜๋ฐฉ), ๋ผ์ด๋ธŒ ํˆฌ์–ด ์˜ˆ์•ฝ
๋ผ์ด๋ธŒ ํˆฌ์–ด WebRTC ์‹ค์‹œ๊ฐ„ ํ™”์ƒ, ์ฒดํฌ๋ฆฌ์ŠคํŠธ ๊ธฐ๋ก, AI ํ•˜์ž ์‹ค์‹œ๊ฐ„ ๊ฐ์ง€ ๋ฐฐ์ง€
๋ฆฌํฌํŠธ ์ฒดํฌ๋ฆฌ์ŠคํŠธ + AI ํ•˜์ž ํƒ์ง€ ๊ฒฐ๊ณผ(์บก์ฒ˜ ์ด๋ฏธ์ง€ ยท ํ•˜์ž ์œ ํ˜•)๋ฅผ ๋‹ด์€ ํˆฌ์–ด ๋ฆฌํฌํŠธ

๐Ÿ— ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜

ํด๋ผ์ด์–ธํŠธ (React SPA)
    โ”‚  HTTPS
    โ–ผ
Nginx (TLS ์ข…๋ฃŒ ยท Reverse Proxy, AWS EC2)
    โ”œโ”€โ”€ /        โ†’  React ์ •์  ํŒŒ์ผ (Docker, 127.0.0.1:3000)
    โ””โ”€โ”€ /api/**  โ†’  Spring Boot
                      โ”œโ”€โ”€ PostgreSQL / H2 (JPA)
                      โ”œโ”€โ”€ OAuth2 (์นด์นด์˜ค ยท ๊ตฌ๊ธ€)
                      โ””โ”€โ”€ WebSocket ์‹œ๊ทธ๋„๋ง (OFFER / ANSWER / ICE_CANDIDATE)

์ค‘๊ฐœ์‚ฌ โ—€โ”€โ”€โ”€โ”€ WebRTC P2P (์˜์ƒ ยท ์Œ์„ฑ) โ”€โ”€โ”€โ”€โ–ถ ์„ธ์ž…์ž
    โ”‚             โ””โ”€ P2P ๋ถˆ๊ฐ€ ๊ตฌ๊ฐ„์€ coturn TURN ์ค‘๊ณ„
    โ”‚                (3478/udpยทtcp, relay 49160-49200/udp, host ๋„คํŠธ์›Œํฌ ๋ชจ๋“œ)
    โ”‚
    โ””โ”€โ”€ ํ”„๋ ˆ์ž„ ์บก์ฒ˜ (1fps ยท ๊ธด ๋ณ€ 960px ยท JPEG)
          โ–ผ
        AI ํ•˜์ž ํƒ์ง€ ์„œ๋ฒ„ (RunPod GPU + ngrok, YOLO ๊ณ„์—ด)
          โ””โ”€โ”€ bbox ยท ์‹ ๋ขฐ๋„ ยท ํ•˜์ž ์œ ํ˜•(MOLD ๋“ฑ) ์‘๋‹ต โ†’ ๋ฆฌํฌํŠธ ์ƒ์„ฑ

๐Ÿง  ํ•ต์‹ฌ ๊ธฐ์ˆ 

1. WebRTC ๋ผ์ด๋ธŒ ํˆฌ์–ด โ€” "ํŠน์ • ๋„คํŠธ์›Œํฌ์—์„œ ์—ฐ๊ฒฐ์ด ์•ˆ ๋œ๋‹ค" (TURN ๋„์ž…)

STUN๋งŒ์œผ๋กœ๋Š” ๋Œ€์นญ NAT ยท ๋ฐฉํ™”๋ฒฝ ํ™˜๊ฒฝ(์…€๋ฃฐ๋Ÿฌ, ์‚ฌ๋‚ด๋ง)์—์„œ P2P ๊ฒฝ๋กœ๋ฅผ ๋šซ์„ ์ˆ˜ ์—†์–ด, coturn 4.6์„ ๋„์ปค๋กœ EC2์— ์˜ฌ๋ ค TURN ์ค‘๊ณ„๋ฅผ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค.

  • relay ํฌํŠธ ๋ฒ”์œ„(49160~49200/udp)๋ฅผ ๋„์ปค NAT๋กœ ๋งคํ•‘ํ•˜๋ฉด ์„ฑ๋Šฅ์ด ๋–จ์–ด์ ธ coturn๋งŒ network_mode: host๋กœ ์‹คํ–‰
  • TURN ์„œ๋ฒ„๊ฐ€ VPC ๋‚ด๋ถ€ ๊ณต๊ฒฉ ํ†ต๋กœ๊ฐ€ ๋˜์ง€ ์•Š๋„๋ก ๋‚ด๋ถ€ IP ๋Œ€์—ญ 5์ข…์„ denied-peer-ip๋กœ ์ฐจ๋‹จ, ์„ธ์…˜๋‹น ๋Œ€์—ญํญ 1.5Mbps ์ƒํ•œ
  • EC2 ๊ณต์ธ/์‚ฌ์„ค IP๋ฅผ ์ž๋™ ๊ฐ์ง€ํ•ด external-ip=๋ฅผ ์ฑ„์šฐ๋Š” setup.sh โ€” ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ฐ”๋€Œ์–ด๋„ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • ์‹œ๊ทธ๋„๋ง 2๊ณ„ํ†ต: ์šด์˜์€ Spring WebSocket, ๋กœ์ปฌ ๊ฐœ๋ฐœ์€ Vite ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ ๋งŒ๋“  ๋ฏธ๋‹ˆ ์‹œ๊ทธ๋„๋ง ์„œ๋ฒ„ โ€” ๋ฐฑ์—”๋“œ ์—†์ด๋„ ํ”„๋ก ํŠธ ๊ฐœ๋ฐœ ๊ฐ€๋Šฅ
  • ์ƒ๋Œ€ ์žฌ์ž…์žฅ ์‹œ RTCPeerConnection ์žฌ์ƒ์„ฑ, remoteDescription ์„ค์ • ์ „ ๋„์ฐฉํ•œ ICE ํ›„๋ณด๋Š” ๋ณด๊ด€ ํ›„ flush

2. AI ํ•˜์ž ํƒ์ง€ ํ”„๋ ˆ์ž„ ํŒŒ์ดํ”„๋ผ์ธ โ€” "๋ช‡ ํ”„๋ ˆ์ž„์„, ์–ด๋–ค ํ•ด์ƒ๋„๋กœ ๋ณด๋‚ผ ๊ฒƒ์ธ๊ฐ€"

AI ์„œ๋ฒ„ ๋‹ด๋‹น์ž์™€ ํ˜‘์˜ํ•ด ์ „์†ก ๊ธฐ์ค€์„ ํ™•์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ•ญ๋ชฉ ๊ฐ’ ๊ทผ๊ฑฐ
์ „์†ก ์ฃผ๊ธฐ 1์ดˆ๋‹น 1ํ”„๋ ˆ์ž„ ํ•˜์ž๋Š” ์ •์  ๋Œ€์ƒ โ€” ๊ณ fps ๋ถˆํ•„์š”, ์„œ๋ฒ„ ๋ถ€ํ•˜ ์ตœ์†Œํ™”
ํ•ด์ƒ๋„ ๊ธด ๋ณ€ 960px ๋‹ค์šด์Šค์ผ€์ผ AI ๋ชจ๋ธ ์ž…๋ ฅ ํฌ๊ธฐ์— ๋งž์ถค โ€” ์ด์ƒ์€ ๋‚ญ๋น„, ์ดํ•˜๋Š” ์ •ํ™•๋„ ์†์‹ค
ํฌ๋งท JPEG ํ’ˆ์งˆ 0.85 ์šฉ๋Ÿ‰ ๋Œ€๋น„ ํ™”์งˆ ๊ท ํ˜•
์บก์ฒ˜ ์œ„์น˜ ์ค‘๊ฐœ์‚ฌ(์†ก์ถœ) ์ชฝ์—์„œ๋งŒ ์บก์ฒ˜ WebRTC ์ฝ”๋ฑ ์••์ถ•์„ ๊ฑฐ์น˜๊ธฐ ์ „ ์›๋ณธ ํ™”์งˆ ํ™•๋ณด
  • AI ์ž…๋ ฅ 960px๋ฅผ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ์นด๋ฉ”๋ผ๋Š” getUserMedia๋กœ 1080p๋ฅผ ์š”์ฒญ
  • ์ด์ „ ํ”„๋ ˆ์ž„ ์š”์ฒญ์ด ์•ˆ ๋๋‚ฌ์œผ๋ฉด ๋‹ค์Œ ํ”„๋ ˆ์ž„ ์Šคํ‚ต โ€” ๋А๋ฆฐ ๋„คํŠธ์›Œํฌ์—์„œ ์š”์ฒญ์ด ๋ฐ€๋ ค ์Œ“์ด๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€

3. Kakao ์ง€๋„ โ€” ๊ฒน์น˜๊ณ  ์–ด๊ธ‹๋‚˜๋Š” ๋งˆ์ปค ํ’€๊ธฐ

  • ๋™(ๆดž) ๋‹จ์œ„ ์ง€์˜ค์ฝ”๋”ฉ์œผ๋กœ ํ•€์ด ๋™ ์ค‘์‹ฌ์— ๋ชฐ๋ฆฌ๋˜ ๊ตฌ์กฐ๋ฅผ ์ง€๋„ ํ•€ ์ „์šฉ API์˜ ์‹ค์ขŒํ‘œ ๊ธฐ๋ฐ˜์œผ๋กœ ์ „ํ™˜, ์ขŒํ‘œ ์—†๋Š” ๋งค๋ฌผ๋งŒ ์ง€์˜ค์ฝ”๋”ฉ ํด๋ฐฑ
  • ๊ฐ™์€ ๊ฑด๋ฌผ ๋งค๋ฌผ๋“ค์ด ํ•œ ์ ์— ๊ฒน์น˜๋Š” ๋ฌธ์ œ๋Š” ํ™ฉ๊ธˆ๊ฐ(2.4 rad) ๋‚˜์„  ๋ถ„์‚ฐ์œผ๋กœ ํ•ด์†Œ โ€” ๊ฒฝ๋„ ์ด๋™๋Ÿ‰์€ cos(์œ„๋„) ๋ณด์ •
  • ํŽธ์˜์‹œ์„ค์€ ์นดํ…Œ๊ณ ๋ฆฌ ์ฝ”๋“œ ๊ฒ€์ƒ‰(์ง€ํ•˜์ฒ  SW8 ยท ํŽธ์˜์  CS2), ์ฝ”๋“œ๊ฐ€ ์—†๋Š” ์…€ํ”„๋นจ๋ž˜๋ฐฉ์€ ํ‚ค์›Œ๋“œ ๊ฒ€์ƒ‰์œผ๋กœ ์šฐํšŒ
  • ์ง€์˜ค์ฝ”๋”ฉ ๊ฒฐ๊ณผ๋ฅผ ๋ชจ๋“ˆ ๋ ˆ๋ฒจ ์บ์‹œ์— ์ €์žฅํ•˜๊ณ  ์‹คํŒจ ๊ฑด๋งŒ ์žฌ์‹œ๋„ ํ—ˆ์šฉ โ€” API ์ฟผํ„ฐ ์ ˆ์•ฝ

4. OAuth2 ์†Œ์…œ ๋กœ๊ทธ์ธ โ€” ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ URI๋ฅผ ํ•˜๋“œ์ฝ”๋”ฉํ•˜์ง€ ์•Š๋Š”๋‹ค

ํ™˜๊ฒฝ(๋กœ์ปฌ ํฌํŠธ ยท ๋ฐฐํฌ ๋„๋ฉ”์ธ)๋งˆ๋‹ค ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ URI ๋ถˆ์ผ์น˜๋กœ ์—๋Ÿฌ๊ฐ€ ๋ฐ˜๋ณต๋˜๋˜ ๋ฌธ์ œ๋ฅผ, redirect_uri๋ฅผ window.location.origin ๊ธฐ๋ฐ˜์œผ๋กœ ๋Ÿฐํƒ€์ž„์— ์กฐ๋ฆฝํ•˜๋Š” ๊ตฌ์กฐ๋กœ ๋ฐ”๊ฟ” ์›์ฒœ ์ œ๊ฑฐํ–ˆ์Šต๋‹ˆ๋‹ค. OAuth ๋ณต๊ท€ ์‹œ SPA ๋ผ์šฐํ„ฐ state ์œ ์‹ค์€ sessionStorage ๋ณต์›์œผ๋กœ, React StrictMode์˜ ์ธ๊ฐ€ ์ฝ”๋“œ ์ด์ค‘ ์‚ฌ์šฉ์€ ref ๊ฐ€๋“œ๋กœ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ›  ๊ธฐ์ˆ  ์Šคํƒ



Frontend
  • React 19 ยท TypeScript ยท Vite
  • Tailwind CSS v4 ยท shadcn/ui ยท framer-motion ยท Swiper
  • TanStack Query 5 (์„œ๋ฒ„ ์ƒํƒœ) ยท Zustand (ํด๋ผ์ด์–ธํŠธ ์ƒํƒœ) ยท react-router 7
  • WebRTC (๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋ณธ API) ยท Kakao Maps API
Backend
  • Java 21 ยท Spring Boot (Spring Security ยท OAuth2 ยท JPA)
  • PostgreSQL / H2
  • WebSocket ์‹œ๊ทธ๋„๋ง ์„œ๋ฒ„
AI
  • YOLO ๊ณ„์—ด ํ•˜์ž ํƒ์ง€ ๋ชจ๋ธ (๊ณฐํŒก์ด ยท ๋ฒฝ์ง€ ์†์ƒ)
  • RunPod GPU ํ™˜๊ฒฝ + ngrok ํ„ฐ๋„
Infra
  • AWS EC2 (Ubuntu) ยท Docker ยท docker compose
  • Nginx (TLS ์ข…๋ฃŒ ยท ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ ยท SPA ํด๋ฐฑ)
  • coturn 4.6 (TURN)

๐Ÿ’ป ๊ฐœ๋ฐœ ๊ฐ€์ด๋“œ

๋ธŒ๋žœ์น˜ ์ „๋žต

master (๋ฐฐํฌ ยท ์ œ์ถœ)
  โ””โ”€โ”€ frontend / backend (ํŒŒํŠธ ํ†ตํ•ฉ)
        โ”œโ”€โ”€ feat/*, feature/*   ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ
        โ””โ”€โ”€ fix/*               ๋ฒ„๊ทธ ์ˆ˜์ •

์ปค๋ฐ‹ ์ปจ๋ฒค์…˜

ํƒ€์ž… ์„ค๋ช…
feat ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ถ”๊ฐ€
fix ๋ฒ„๊ทธ ์ˆ˜์ •
refactor ๋™์ž‘ ๋ณ€๊ฒฝ ์—†๋Š” ๊ตฌ์กฐ ๊ฐœ์„ 
docs ๋ฌธ์„œ ์ˆ˜์ •
chore ์„ค์ • ยท ๋นŒ๋“œ ๋“ฑ ๊ธฐํƒ€ ์ž‘์—…

AI ํ˜‘์—… ํ•˜๋„ค์Šค

AI ์ƒ์„ฑ ์ฝ”๋“œ์˜ ํ’ˆ์งˆ์„ ํŒ€ ์ฐจ์›์—์„œ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๊ทœ์น™ ์ฒด๊ณ„๋ฅผ ๋‘์—ˆ์Šต๋‹ˆ๋‹ค.

  • ๊ทœ์น™์˜ ๋‹จ์ผ ์ง„์‹ค ๊ณต๊ธ‰์›์€ frontend/AGENTS.md ํ•˜๋‚˜ โ€” CLAUDE.md๋Š” @AGENTS.md ์ž„ํฌํŠธ ํ•œ ์ค„๋กœ ๋ฌธ์„œ ๋ถˆ์ผ์น˜๋ฅผ ์ฐจ๋‹จ
  • frontend/.agents/rules/ 7์ข…์ด ํŒŒ์ผ ๊ฒฝ๋กœ(glob)๋ณ„๋กœ ์ ์šฉ โ€” ์ƒํƒœ ๊ด€๋ฆฌ ยท API ๊ณ„์ธต ยท TypeScript ยท ์ ‘๊ทผ์„ฑ ยท ๋ณด์•ˆ ๊ทœ์น™
  • "pnpm lint ยท pnpm build๋ฅผ ์‹ค์ œ ์‹คํ–‰ํ•  ๊ฒƒ, ์‹คํ–‰ ๋ชป ํ–ˆ์œผ๋ฉด ์„ฑ๊ณต์ด๋ผ ๋งํ•˜์ง€ ๋ง ๊ฒƒ" ๋“ฑ AI์˜ ๊ฑฐ์ง“ ๋ณด๊ณ ๋ฅผ ๋ง‰๋Š” ์™„๋ฃŒ ์กฐ๊ฑด ๋ช…์‹œ
  • ์™ธ๋ถ€ ์Šคํ‚ฌ์€ skills-lock.json์œผ๋กœ ์ถœ์ฒ˜ ยท ๋ฆฌ๋น„์ „ ๊ณ ์ •

๐Ÿš€ ์‹คํ–‰ ๋ฐฉ๋ฒ•

Frontend

git clone https://github.com/dfizae/bangbangbwa-service.git
cd bangbangbwa-service/frontend

# ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ • (.env.example ์ฐธ๊ณ  โ€” Kakao ํ‚ค, TURN ๊ณ„์ • ๋“ฑ)
cp .env.example .env

pnpm install
pnpm dev      # http://localhost:5173
pnpm build    # ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ

Backend

cd bangbangbwa-service/backend
./gradlew bootRun

TURN ์„œ๋ฒ„ (๋ฐฐํฌ ํ™˜๊ฒฝ)

# EC2 ๊ณต์ธ/์‚ฌ์„ค IP๋ฅผ ๊ฐ์ง€ํ•ด turnserver.conf์˜ external-ip๋ฅผ ์ฑ„์›€
bash infra/coturn/setup.sh

# ํ”„๋ก ํŠธ ์›น + coturn ๊ธฐ๋™
cd frontend && docker compose up -d

์ด ์ €์žฅ์†Œ์˜ TURN ๊ณ„์ • ๋“ฑ ์‹œํฌ๋ฆฟ ๊ฐ’์€ ํ”Œ๋ ˆ์ด์Šคํ™€๋”(YOUR_TURN_CREDENTIAL ๋“ฑ)๋กœ ์น˜ํ™˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. infra/coturn/turnserver.conf์˜ user=์™€ frontend/.env์˜ TURN ๊ณ„์ •์€ ๋ฐ˜๋“œ์‹œ ๊ฐ™์€ ๊ฐ’์œผ๋กœ ์ฑ„์›Œ์•ผ ํ•ฉ๋‹ˆ๋‹ค. AI ํ•˜์ž ํƒ์ง€๋Š” ๋ณ„๋„ AI ์„œ๋ฒ„๊ฐ€ ํ•จ๊ป˜ ๊ตฌ๋™๋˜์–ด์•ผ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ‘ฅ ํŒ€ ์†Œ๊ฐœ

ํŒŒํŠธ ํŒ€์›
FE ๊น€์žฌ์˜(@dfizae), ๋ฐ•xx, ํ™ฉxx
BE ์„œxx, ์œคxx, ์ตœxx
AI ๋ฐ•xx, ์ตœxx
์ธํ”„๋ผ ํ™ฉxx

๋„์›€๋ฐ›์€ ์ž๋ฃŒ๋“ค:

  • shadcn/ui โ€” UI ์ปดํฌ๋„ŒํŠธ
  • WebRTC samples โ€” WebRTC ์—ฐ๊ฒฐ ยท TURN ๋™์ž‘ ํ…Œ์ŠคํŠธ
  • Kakao Developers โ€” ์†Œ์…œ ๋กœ๊ทธ์ธ ยท ์ง€๋„ API

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages