Skip to content

Latest commit

ย 

History

History
382 lines (280 loc) ยท 17.6 KB

README.md

File metadata and controls

382 lines (280 loc) ยท 17.6 KB


Logo

Multiplayer Pong & Chat Web Site

A final Project in 42




Table of Contents
  1. About The Project
  2. Getting Started
  3. Constraint
  4. Member
  5. License

About The Project


๋กœ๊ทธ์ธ ํ™”๋ฉด

pong 42๋Š” Typescript ๊ธฐ๋ฐ˜์˜ React, Nest๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋งŒ๋“  ์ฑ„ํŒ… / ํ•‘ํ ์‚ฌ์ดํŠธ์ด๋‹ค.

ํŽ˜์ด์ง€ ๊ตฌ์„ฑ์œผ๋กœ๋Š” ํšŒ์›๊ฐ€์ž…, ๋ฉ”์ธ ๋กœ๋น„, ์ฑ„ํŒ…๋ฐฉ(์ผ๋ฐ˜, DM), ๊ฒŒ์ž„๋ฐฉ์ด๋ฉฐ ์œ ์ €์˜ ํ˜„์žฌ ์ƒํƒœ, ์ฑ„ํŒ…, ๊ฒŒ์ž„๋“ฑ ํŠน์ • ์š”์†Œ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐ˜์˜ํ–ˆ๋‹ค.


Signup

์ตœ์ดˆ ํšŒ์›๊ฐ€์ž… ๋‹จ๊ณ„

signup
  • ์ตœ์ดˆ ํšŒ์›๊ฐ€์ž…์‹œ 42API๋ฅผ ํ†ตํ•ด 42cadet์ธ์ง€ ํ™•์ธ
  • ํ”„๋กœํ•„ ์ž‘์„ฑ์—์„œ ๋‹‰๋„ค์ž„๋งŒ ํ•„์ˆ˜ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์Œ. ๋”ฐ๋กœ ํ”„๋กœํ•„ ๋“ฑ๋ก์„ ํ•˜์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋ณธ ํ”„๋กœํ•„์ด ๋“ฑ๋ก
  • ํšŒ์› ๋“ฑ๋ก์ด ์™„๋ฃŒ์‹œ ๊ธฐ์กด ์ „์ฒด ์œ ์ €๋ชฉ๋ก์„ ๋ณด๋Š” ๋ชจ๋“  ์œ ์ €๋“ค์˜ ๋ชฉ๋ก์ด ์ƒˆ๋กœ์šด ์œ ์ €๊ฐ€ ์ถ”๊ฐ€๋จ.

(2์ฐจ์ธ์ฆ ํ™œ์„ฑํ™”์‹œ) 2์ฐจ์ธ์ฆ

2FA
  • 42 intra์— ๋“ฑ๋ก๋œ ์ด๋ฉ”์ผ์ด ์•„๋‹ˆ์–ด๋„ 2์ฐจ ์ธ์ฆ ์ •๋ณด๋ฅผ ๋ฐ›์„ ์ด๋ฉ”์ผ์ด๋ฉด ๋ฌด๊ด€
  • ๋งค๋ฒˆ ๋กœ๊ทธ์ธํ•  ๋•Œ๋งˆ๋‹ค ์ธ์ฆ์ฝ”๋“œ๋ฅผ ๊ธฐ์ž…ํ•ด์•ผํ•˜๋ฉฐ ๋กœ๋น„์— ์žˆ๋Š” ๋‚ด ํ”„๋กœํ•„์˜ 2์ฐจ ์ธ์ฆ ๋น„ํ™œ์„ฑํ™”๋ฅผ ๋ˆŒ๋Ÿฌ์„œ ํ•ด์ œํ•  ์ˆ˜ ์žˆ์Œ

Lobby

๊ฒŒ์ž„ / ์ฑ„ํŒ… ๋กœ๋น„

main lobby
  • ๊ธฐ๋ณธ ๋กœ๋น„๋Š” ๊ฒŒ์ž„๋ฐฉ ๋ชฉ๋ก์ด ๋ณด์ด๋Š” ๊ฒŒ์ž„ ๋กœ๋น„๋กœ 42 PONG๋กœ๊ณ ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๊ธฐ๋ณธ ๋กœ๋น„๋กœ ์ด๋™ํ•œ๋‹ค
  • ๊ฒŒ์ž„ / ์ฑ„ํŒ… ๋กœ๋น„ ๋‘˜๋‹ค ๋””์ž์ธ ๊ณจ๊ฒฉ์€ ๋™์ผ(๋ฐฉ ๋ชฉ๋ก, ์œ ์ € ๋ชฉ๋ก, ๋‚ด ํ”„๋กœํ•„)ํ•˜๋‚˜ ๊ฒŒ์ž„์€ ๋ž˜๋” ๊ฒŒ์ž„ ์ž…์žฅ, ์ฑ„ํŒ…์€ ์ฐธ์—ฌ์ค‘์ธ ์ฑ„ํŒ…๋ฐฉ๋ผ๋Š” ๊ณ ์œ  ๊ธฐ๋Šฅ์ด ์กด์žฌ

๋‚ด ํ”„๋กœํ•„ ๋ณ€๊ฒฝ

update my profile
  • ๊ฒŒ์ž„ ํŽ˜์ด์ง€๋นผ๊ณ ๋Š” ๋ชจ๋“  ํŽ˜์ด์ง€์—์„œ ๋กœ๊ทธ์ธํ•œ ์œ ์ €์˜ ํ”„๋กœํ•„ ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅ
  • ๋‚ด ํ”„๋กœํ•„ ์ˆ˜์ • ์ฐฝ์—์„œ ํ™•์ธ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด์ง€ ์•Š๋Š” ์ด์ƒ ๋‹‰๋„ค์ž„, ํ”„๋กœํ•„ ์‚ฌ์ง„์ด ๊ฐฑ์‹ ๋˜์ง„ ์•Š๋Š”๋‹ค.
  • ๋˜ํ•œ, ๋‘˜ ์ค‘ ํ•˜๋‚˜๋ผ๋„ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ์œผ๋ฉด ํ”„๋กœํ•„ ๊ฐฑ์‹ ์ด ๋œ๋‹ค.

์œ ์ € ์ƒํƒœ ์‹ค์‹œ๊ฐ„ ๋ฐ˜์˜(๋กœ๊ทธ์ธ, ๋กœ๊ทธ์•„์›ƒ, ๊ฒŒ์ž„์ค‘)

apply user state in live
  • ์นœ๊ตฌ ๊ด€๊ณ„๋Š” ํŒ”๋กœ์ž‰(Following) ๊ด€๊ณ„๋กœ ํ•œ์ชฝ์—์„œ ์นœ๊ตฌ ์ถ”๊ฐ€์‹œ ํ•ด๋‹น ์œ ์ €์˜ ์นœ๊ตฌ๋ชฉ๋ก์—๋งŒ ํ•ด๋‹น ์œ ์ €๊ฐ€ ํ™•์ธ๋œ๋‹ค.
  • ์œ ์ €๊ฐ€ ๋กœ๊ทธ์ธ, ๋กœ๊ทธ์•„์›ƒ, ๊ฒŒ์ž„์ค‘์˜ ์ƒํƒœ๋ฅผ ์œ ์ € ๋ชฉ๋ก์—์„œ ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ™•์ธ ๊ฐ€๋Šฅ

๊ฒŒ์ž„ ์ดˆ๋Œ€ํ•˜๊ธฐ / ์ดˆ๋Œ€๋ฐ›๊ธฐ / ๊ฑฐ์ ˆํ•˜๊ธฐ

ask game
  • ๊ฒŒ์ž„ ์ดˆ๋Œ€๋Š” ์–ด๋Š ํŽ˜์ด์ง€๋“  ์œ ์ € ๋ชฉ๋ก์—์„œ ํŠน์ • ์œ ์ €์˜ ํ”„๋กœํ•„ ์ฐฝ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋Œ€์ „ ์‹ ์ฒญ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. (๋‹จ, ๋กœ๊ทธ์ธ ์ƒํƒœ์ธ ์œ ์ €์—๊ฒŒ๋งŒ ๊ฐ€๋Šฅ)
  • ์Šน์ธ๊ณผ ๋™์‹œ์— ๊ฒŒ์ž„ ํ™”๋ฉด์œผ๋กœ ์ด๋™ํ•˜๊ณ , ์นด์šดํŠธ๊ฐ€ ์‹œ์ž‘๋œ๋‹ค.

In Chat

๊ธฐ๋ณธ ์ฑ„ํŒ… ๊ธฐ๋Šฅ

basic chatting
  • ์ฑ„ํŒ…๋ฐฉ ์ž…์žฅ, ํ‡ด์žฅ, ๊ฐ•ํ‡ด ๋“ฑ ์ „์ฒด ์œ ์ €๊ฐ€ ์•Œ์•„์•ผํ•  ๋‚ด์šฉ์€ ๋ธŒ๋กœ๋“œ์บ์ŠคํŒ… ๋ฐฉ์‹์œผ๋กœ ์ฑ„ํŒ…์ฐฝ ์•ˆ์— ๊ณต์ง€ ๋ฉ”์„ธ์ง€๋กœ ํ‘œ๊ธฐ๋œ๋‹ค.
  • ์ฑ„ํŒ…๋ฐฉ์— ์ž…์žฅํ•œ ์ดํ›„์˜ ์ฑ„ํŒ…๋งŒ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
  • ์ฑ„ํŒ… ๋‚ด์—ญ์€ DB์— ์ €์žฅ๋œ๋‹ค.
  • ์ฐจ๋‹จํ•œ ์œ ์ €์˜ ๊ฒฝ์šฐ ์ฐจ๋‹จํ•œ ์‹œ์  ์ดํ›„์˜ ์ฑ„ํŒ…์€ ๋ณด์ด์ง€ ์•Š๋Š”๋‹ค. ์ฐจ๋‹จ์„ ํ•ด์ œํ•˜๋ฉด ์ด์ „์˜ ๋ชจ๋“  ๋ฉ”์„ธ์ง€๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์ฑ„ํŒ…๋ฐฉ ๋‚ด ๊ถŒํ•œ์— ๋”ฐ๋ฅธ ๊ธฐ๋Šฅ

authority in chat room
  • ์ฑ„ํŒ…๋ฐฉ ๋‚ด ๊ถŒํ•œ์€ ๋ฐฉ ์ฃผ์ธ, ๊ด€๋ฆฌ์ž, ์ผ๋ฐ˜์œผ๋กœ ๋‚˜๋‰˜๋ฉฐ ๊ฐ ๊ถŒํ•œ์— ๋”ฐ๋ผ ์œ ์ € ํ”„๋กœํ•„์„ ๋ณผ ๋•Œ ๋ณด์—ฌ์ง€๋Š” ํ”„๋กœํ•„ ๊ตฌ์„ฑ์ด ๋‹ค๋ฅด๋‹ค.
  • ๋ฐฉ ๊ด€๋ฆฌ์ž๋ผ ํ•ด๋„ ๋ฐฉ ์ฃผ์ธ์„ ๊ฐ•ํ‡ด, ์Œ์†Œ๊ฑฐํ•  ์ˆ˜๋Š” ์—†๋‹ค.
  • ๊ฐ•ํ‡ด, ์Œ์†Œ๊ฑฐ์‹œ 10์ดˆ๊ฐ„ ํ•ด๋‹น ์œ ์ €๋Š” ์žฌ์ž…์žฅ, ์ฑ„ํŒ… ์ž…๋ ฅ์ด ๊ธˆ์ง€๋œ๋‹ค.
  • ๋ฐฉ ์ฃผ์ธ์ด ๋ฐฉ์„ ๋‚˜๊ฐˆ ๊ฒฝ์šฐ ํ•ด๋‹น ์ฑ„ํŒ…๋ฐฉ์€ ์‚ญ์ œ๋œ๋‹ค.

๋ฐฉ ์„ค์ • ๋ณ€๊ฒฝ

update chat room setup
  • ๋ฐฉ ์„ค์ •์€ ์˜ค์ง ๋ฐฉ ์ฃผ์ธ๋งŒ ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๋ฐฉ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์ž๋™์œผ๋กœ ๋น„๊ณต๊ฐœ๋ฐฉ์œผ๋กœ ๋ณ€๊ฒฝ๋œ๋‹ค.
  • ๊ณต๊ฐœ๋ฐฉ์ผ ๋•Œ ์ž…์žฅํ•œ ์œ ์ €๋Š” ๋น„๊ณต๊ฐœ๋ฐฉ์œผ๋กœ ๋ณ€๊ฒฝ๋˜์–ด๋„ ๋ฐฉ ๋‚˜๊ฐ€๊ธฐ๋ฅผ ํ•˜์ง€ ์•Š๋Š” ์ด์ƒ ์ž…์žฅํ•  ๋•Œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

DM ๋ณด๋‚ด๊ธฐ

send dm
  • ์ฑ„ํŒ…๋ฐฉ ์•ˆ์—์„œ๋งŒ์ด ์•„๋‹ˆ๋ผ ์œ ์ € ํ”„๋กœํ•„์„ ๋ณผ ์ˆ˜ ์žˆ๋Š” ์–ด๋””์„œ๋“  ํŠน์ • ์œ ์ €์—๊ฒŒ DM์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
  • ์ฐธ์—ฌ์ค‘์ธ ์ฑ„ํŒ…๋ฐฉ ๋ชฉ๋ก์—์„œ ํ™œ์„ฑํ™” ๋œ DM๋ฐฉ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

In Game

์ผ๋ฐ˜ ๊ฒŒ์ž„

start normal game

[ ์ƒˆ ๊ฒŒ์ž„ ๋งŒ๋“ค๊ธฐ ๋ฐ ๊ฒŒ์ž„ ์„ค์ • ]

  • ๋ฐฉ ๋งŒ๋“ค๊ธฐ๋ฅผ ํ†ตํ•ด ๊ฒŒ์ž„๋ฐฉ์„ ๋งŒ๋“ค๊ณ  ์ƒ๋Œ€๋ฐฉ์˜ ์ž…์žฅ์„ ๊ธฐ๋‹ค๋ฆด ์ˆ˜ ์žˆ๋‹ค.
  • ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์„ค์ •ํ•ด ๋ชจ๋ฅด๋Š” ์‚ฌ๋žŒ์˜ ์ž…์žฅ์„ ์ œํ•œํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๊ธฐ๋ณธ ๊ฒŒ์ž„ ๋ชจ๋“œ๋Š” ์ผ๋ฐ˜ ๋ชจ๋“œ, ์Šคํ”ผ๋“œ ๋ชจ๋“œ์™€ ์žฅ์• ๋ฌผ ๋ชจ๋“œ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ( ๋ ˆ๋”์™€ ๋“€์–ผ ๋งค์น˜์—์„œ๋Š” ์ผ๋ฐ˜๋ชจ๋“œ๋กœ๋งŒ ํ”Œ๋ ˆ์ดํ•  ์ˆ˜ ์žˆ๋‹ค )

    [ ๊ฒŒ์ž„ ํ”Œ๋ ˆ์ด ]

  • ๋Œ€์ „ ์ƒ๋Œ€๊ฐ€ ์ž…์žฅํ•˜๋ฉด, ์ฆ‰์‹œ 5์ดˆ ์นด์šดํŠธ๋‹ค์šด ํ›„ ๊ฒŒ์ž„์„ ์‹œ์ž‘ํ•œ๋‹ค.
  • ํ‚ค๋ณด๋“œ์˜ ์ขŒ์šฐ ๋ฐฉํ–ฅํ‚ค๋ฅผ ์ด์šฉํ•ด ํŒจ๋“ค ์œ„์น˜๋ฅผ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • 10์ ์„ ๋จผ์ € ๋“์ ํ•˜๋Š” ์ชฝ์ด ์Šน๋ฆฌํ•˜๋Š” ๊ทœ์น™, ์ค‘๊ฐ„์— ์ ‘์†์ด ๋Š์–ด์ง€๋Š” ์ชฝ์€ ๋ชฐ์ˆ˜ํŒจ ์ฒ˜๋ฆฌํ•œ๋‹ค.

    [ ๊ด€์ „ ๊ธฐ๋Šฅ ]

  • ๋ชจ๋“  ๊ฒŒ์ž„์€ ๊ด€์ „์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ด€์ „ํ•˜๋Š” ๋ฐฉ๋ฒ•์€,
    • ๊ฒŒ์ž„๋ฐฉ ๋ชฉ๋ก์—์„œ ์‹œ์ž‘ ์นด์šดํŠธ ์ค‘ ํ˜น์€, ๊ฒŒ์ž„ ์‹œ์ž‘ํ•œ ๋ฐฉ์— ์ž…์žฅ ํ•˜๊ฑฐ๋‚˜,
    • ๊ฒŒ์ž„ ์ค‘์ธ ์ƒ๋Œ€์˜ ํ”„๋กœํ•„์—์„œ ๊ด€์ „ํ•˜๊ธฐ ๋ฒ„ํŠผ์„ ์ด์šฉ.
  • ๊ด€์ „์ž๋Š” ๋‹จ์ˆœ ๊ด€์ „ ์™ธ์˜ ์–ด๋–ค ์กฐ์ž‘๋„ ๋ถˆ๊ฐ€๋Šฅ.

๊ฒŒ์ž„ ๋ชจ๋“œ ์„ค์ •( ์˜ˆ์‹œ: ์žฅ์• ๋ฌผ ๋ชจ๋“œ )

start obstacle game
  • ๊ฒŒ์ž„ ์ƒ์„ฑ ์‹œ, ๊ฒŒ์ž„ ๋ชจ๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด, ์‹œ์ž‘ ์‹œ ํ•ด๋‹น ๋ชจ๋“œ๋กœ ๊ฒŒ์ž„์ด ์‹คํ–‰๋จ.
  • ์Šคํ”ผ๋“œ ๋ชจ๋“œ: ๊ณต์˜ ์ด๋™ ์†๋„๊ฐ€ 2๋ฐฐ ๋น ๋ฆ„
  • ์žฅ์• ๋ฌผ ๋ชจ๋“œ: ๊ณต์ด ํŠ•๊ฒจ๋‚˜๋Š” ์žฅ์• ๋ฌผ์ด ๋งต์— ๋ฐฐ์น˜๋จ

๋ž˜๋” ๋งค์นญ

match ladder game

[ ๋ž˜๋” ์„ค๋ช… ]

  • ์ผ๋ฐ˜๊ฒŒ์ž„๊ณผ ๊ตฌ๋ถ„ํ•˜์—ฌ, ์ˆœ์œ„๊ฒฝ์Ÿ์„ ์œ„ํ•œ ๋ž˜๋”๊ฒŒ์ž„์ด ๋”ฐ๋กœ ์กด์žฌํ•จ.
  • ๋ž˜๋”๊ฒŒ์ž„์€ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์ง์ ‘ ๋Œ€์ „์ƒ๋Œ€๋ฅผ ์ •ํ•  ์ˆ˜ ์—†๊ณ , ์„œ๋ฒ„์˜ ๋งค์นญ ์‹œ์Šคํ…œ์— ๋”ฐ๋ผ์„œ๋งŒ ์ƒ๋Œ€๊ฐ€ ์ •ํ•ด์ง.
  • ๋ ˆ๋”๊ฒŒ์ž„ ๊ฒฐ๊ณผ๋Š” ์ผ๋ฐ˜๊ฒŒ์ž„๊ณผ ๊ตฌ๋ถ„ํ•ด์„œ ์ €์žฅ ๋จ.
  • ํ”Œ๋ ˆ์ด์–ด ๋ ˆ๋ฒจ์€ ๋ ˆ๋” ์ „์ ์œผ๋กœ๋งŒ ๊ณ„์‚ฐ๋œ๋‹ค.

    [ ๋ž˜๋” ๋งค์นญ ๊ทœ์น™ ]

  • ๋ž˜๋” ๋งค์นญ์€ ๋ ˆ๋ฒจ์— ๋”ฐ๋ผ ๋ ˆ๋ฒจ ์ฐจ์ด๊ฐ€ ์ ์€ ํ”Œ๋ ˆ์ด์–ด๋ฅผ ์šฐ์„ ์œผ๋กœ ๋งค์นญํ•˜๋„๋ก ํ•จ.
  • ๋งค์นญ ๋ฐฉ์‹์€,
    • ์ตœ์ดˆ์—๋Š” ๋ ˆ๋ฒจ ์ฐจ์ด๊ฐ€ 5 ์ด๋‚ด์ธ ํ”Œ๋ ˆ์ด์–ด๋ฅผ ํƒ์ƒ‰,
    • ์กฐ๊ฑด์— ๋งž๋Š” ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์—†๋‹ค๋ฉด, ๋งค ์ดˆ ํƒ์ƒ‰ ๋ฒ”์œ„๋ฅผ 2๋ฐฐ์”ฉ ๋Š˜์—ฌ๊ฐ.
    • 7์ดˆ๋™์•ˆ ์กฐ๊ฑด์— ๋งž๋Š” ํ”Œ๋ ˆ์ด์–ด๋ฅผ ์ฐพ์ง€ ๋ชปํ•˜๋ฉด, ๋งค์นญ ๊ฐ€๋Šฅํ•œ ๊ฐ€์žฅ ์˜ค๋ž˜ ๋Œ€๊ธฐํ•œ ํ”Œ๋ ˆ์ด์–ด์™€ ๋งค์นญ
    • ( ์˜ˆ: 5, 10, 20, 40, 80, 160, INT_MAX)
  • ๋”ฐ๋ผ์„œ, ์˜ˆ์‹œ์ฒ˜๋Ÿผ ๋จผ์ € ๋ž˜๋”๋งค์นญ์„ ์š”์ฒญํ•œ ๊ณ  ๋ ˆ๋ฒจ ์œ ์ €๊ฐ€ ๋งค์นญ๋˜์ง€ ์•Š๊ณ , ๋‚˜์ค‘์— ๋ž˜๋”๋งค์นญ์„ ์š”์ฒญํ•œ ์ € ๋ ˆ๋ฒจ ์œ ์ €์™€ ๋งค์นญ์ด ์„ฑ์‚ฌ๋จ.

back to top

Getting Started

Prerequisites

  1. ๋ณธ ํ”„๋กœ์ ํŠธ๋Š” 42 intra๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋Š” 42cadet์ด์–ด์•ผ ์ •์ƒ ์ด์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

  2. 42API๋กœ ๋ฐœ๊ธ‰๋ฐ›์€ UID, secret key, redirection URL์„ ์‚ฌ์šฉํ•ด ๊ฐ ์ปจํ…Œ์ด๋„ˆ๋ณ„ .env์— ํ•ด๋‹น ๊ฐ’๋“ค์„ ์ž‘์„ฑํ•ด์ค˜์•ผ ํ•œ๋‹ค.

  3. docker, docker-compose๊ฐ€ ์„ค์น˜๋œ ํ™˜๊ฒฝ์ด์–ด์•ผ ํ•œ๋‹ค.

Installation

  1. clone this project at github
  git clone https://github.com/42-Tomodachi/ft_transcendence
  1. run docker-compose at project root path
  cd ft_transcendence && docker-compose up --build

back to top

Constraint

์ตœ์ดˆ ๋ชฉํ‘œ๋กœ ์žก์€ ๊ธฐ๊ฐ„(about 45days)์•ˆ์— ์™„์„ฑํ•˜๊ธฐ ์œ„ํ•ด ๋†“์น˜๊ฑฐ๋‚˜ ๊ฐ„๊ณผํ•œ ์„ค๊ณ„, ๊ธฐ๋Šฅ๋“ค

Frontend

๊ณตํ†ต

    1. ์ตœ์ ํ™”๋ฅผ ๊ณ ๋ คํ•˜์ง€์•Š๊ณ  ๊ตฌํ˜„ํ–ˆ๊ธฐ์— ๋ถˆํ•„์š”ํ•œ ๋ฆฌ๋ Œ๋”๋ง์ด ๋งŽ์ด ๋ฐœ์ƒํ•œ๋‹ค.
    2. Next.js๊ฐ€ ์•„๋‹Œ CRA๋ฅผ ์‚ฌ์šฉ
    3. ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ถ€๋ถ„์ด ๋งŽ์ง€๋งŒ ๊ณ ์œ  ์ปดํฌ๋„ŒํŠธ๋กœ ์ œ์ž‘(ํŠนํžˆ ๋ชจ๋‹ฌ)
    4. ๋ฐฐํฌ์šฉ์œผ๋กœ ๋„์ปค ํŒŒ์ผ์ด ์ž‘์„ฑ๋˜์–ด ์žˆ์ง€ ์•Š์Œ
    5. ๋ฐฐํฌ๋ฅผ ํ•  ์‹œ ๋ฐฑ์—”๋“œ์— ์ข…์†๋˜์–ด ์žˆ์Œ
    6. ์œ ์ €์—๊ฒŒ ์•Œ๋ ค์ค„ ๋ชฉ์ ์œผ๋กœ antd notification์„ ์ ์šฉํ•˜๋ ค ํ–ˆ์œผ๋‚˜ ๊ธฐ์กด ๋””์ž์ธ ๋ณ€๋™์ด ๋ฐœ์ƒํ•ด ์ ์šฉ ์‹คํŒจ
    7. ์ผ๋ถ€ props ํƒ€์ž…์ •์˜์— interface ๋ฏธ์ ์šฉ
    8. 2์ฐจ ํ™œ์„ฑํ™” ํ›„ ๋ฆฌ๋ Œ๋”๋ง ๋ ๋•Œ๋งˆ๋‹ค 2์ฐจ ์ธ์ฆ ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋กœ ๋Œ์•„๊ฐ
    8-1. ์ธ์ฆ๋ฒˆํ˜ธ๋ฅผ ์ œ๋Œ€๋กœ ๊ธฐ์ž…ํ•ด๋„ ์˜ค์ž‘๋™์ด ๋ฐœ์ƒํ•  ๋•Œ๊ฐ€ ์žˆ์Œ
    9. ์œ ์ €๋ฆฌ์ŠคํŠธ ์ •๋ ฌ์„ ํ•œ๋ฒˆ์— ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ(feedback)
    9-1. ํŠน์ • ์œ ์ €(ํด๋ฆญํ•œ) ์ •๋ณด๋ฅผ ์ „์—ญ์œผ๋กœ ๊ด€๋ฆฌ
    10. ๋ชจ๋“  ํŽ˜์ด์ง€์—์„œ ์†Œ์ผ“์„ ์“ธ ๊ฒƒ์ด๋ฉด custom hook์ด๋‚˜ ์ „์—ญ์—์„œ ํ•˜๋‚˜์˜ ์†Œ์ผ“๋งŒ ๊ด€๋ฆฌํ•˜๋Š”๊ฑธ ๊ถŒ์žฅ(feedback)
    11. ๊ธฐ์กด API๊ธฐ๋Šฅ ์ค‘ ์†Œ์ผ“์œผ๋กœ ๋Œ€์ฒด๋œ ๊ฒƒ๋“ค์„ ์‚ญ์ œํ•˜์ง€ ์•Š์Œ
    12. jsdoc์‚ฌ์šฉํ•ด ๊ฐ ์ปดํฌ๋„ŒํŠธ, API๋“ฑ์„ ๋ช…์„ธํ•  ๊ฒฝ์šฐ ์œ ์ง€๋ณด์ˆ˜์— ์šฉ์ด

์ฑ„ํŒ…

    1. ์ฑ„ํŒ… ๋กœ๊ทธ๋ฅผ ์†Œ์ผ“์œผ๋กœ ํ•œ๊บผ๋ฒˆ์— ๋ฐ›์•„์„œ ์ „์ฒด ๋ฆฌ๋ Œ๋”๋ง ํ•ด์ฃผ๊ณ  ์žˆ๋‹ค. (์ตœ์ ํ™” ํ•„์š”)
    2. if else ๋ถ€๋ถ„์ด ๋ฏธํก
    3. ๊ฐ•ํ‡ด๋‹นํ–ˆ์„ ๋•Œ ์œ ์ €์—๊ฒŒ ๋”ฐ๋กœ ๋ณด์—ฌ์ฃผ๋Š” notification์ด ์—†์Œ

๊ฒŒ์ž„

    1. ์„œ๋ฒ„์˜ ํ†ต์‹  ๋ถ€ํ•˜๋ฅผ ํ›จ์”ฌ ์ค„์—ฌ์ค„ ์—ฌ์ง€๊ฐ€ ์žˆ์œผ๋‚˜, ์ ์šฉํ•˜์ง€ ์•Š์Œ.
    2. ๋ž˜๊น… ๋ฐ ์†Œ์†Œํ•œ ๋ฒ„๊ทธ์š”์†Œ๊ฐ€ ์žˆ๋Š”๋ฐ, ๋งŒ์กฑ์Šค๋Ÿฌ์šด ์ˆ˜์ค€๊นŒ์ง€ ๊ฐœ์„ ํ•˜์ง€ ๋ชปํ•จ.
    3. ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€ ์ฝ”๋“œ ๊ธธ์ด๊ฐ€ ๋งŽ์ด ๊ธด ์ƒํ™ฉ
    4. ์œ ์‚ฌํ•œ ๋ณ€์ˆ˜๊ฐ„์˜ ์˜๋ฏธ๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š์Œ(ex. player1,2 - leftPlayer, rightPlayer)
    5. ๊ฒŒ์ž„ ๋กœ์ง์˜ ํŠน์ • ์ƒ์ˆ˜์˜ ์˜๋ฏธํŒŒ์•…์ด ์–ด๋ ค์›€(๋‹Œ์ž์ฝ”๋“œ)

Backend

๊ณตํ†ต

    1. ์„ค๊ณ„๋‹น์‹œ ์•„ํ‚คํ…์ณ ์„ค๊ณ„์— ๋Œ€ํ•ด ๊นŠ์ด์žˆ๊ฒŒ ์•Œ์ง€ ๋ชปํ•˜์—ฌ NestJs์—์„œ ์ œ๊ณตํ•˜๋Š” ์•„ํ‚คํ…์ณ๋ฅผ ์ด์šฉํ•จ
    2. ๊ฐœ๋ฐœ ๊ธฐ๊ฐ„์„ ๊ณ ๋ คํ•˜์—ฌ ํ…Œ์ŠคํŠธ์ฝ”๋“œ๋Š” MVP ์ œ์ž‘ ์ดํ›„, ๋ฆฌํŒฉํ† ๋ง ์ „์— ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๊ฒฐ์ •
    3. ์ตœ์ ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ณ ๋ คํ•˜๊ณ  ์ ์šฉํ•˜๊ธฐ๋ณด๋‹ค๋Š”, ๋‹น์žฅ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ์†Œ๋‹จ์œ„์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐ ๊ธฐ๋Šฅ๋งŒ ์ด์šฉํ•จ.
    4. DB์„ค๊ณ„ ์—ญ์‹œ ์ตœ์ ํ•œ ๊ตฌ์กฐ๋ณด๋‹ค๋Š”, ํ•„์š”ํ•œ ์š”์†Œ๋ฅผ ํฌํ•จ์‹œํ‚ค๋Š” ๊ฒƒ์—๋งŒ ์ง‘์ค‘.
    5. ์†Œ์ผ“์„ ์ด์šฉํ•œ ์‹ค์‹œ๊ฐ„ ํ†ต์‹ ์„ ์„œ๋น„์Šค ๋Œ€๋ถ€๋ถ„์— ์ ์šฉํ† ๋ก ํ•˜๋Š” ํ•ฉ์˜๊ฐ€, ๊ฐœ๋ฐœ์ด ์–ด๋Š์ •๋„ ์ง„ํ–‰๋œ ์‹œ์ ์— ์ถ”๊ฐ€๋˜๋ฉด์„œ, ๊ตฌ์กฐ์ ์œผ๋กœ ๊น”๋”ํ•˜์ง€ ๋ชปํ•œ ์š”์†Œ๊ฐ€ ๋‹ค์ˆ˜ ๋ฐœ์ƒ.
    6. ์ดˆ๊ธฐ์— ๋น ๋ฅธ ๊ฐœ๋ฐœ์„ ์œ„ํ•ด, ์žฌ์‚ฌ์šฉ์„ฑ์ด๋‚˜ ์˜์กด์„ฑ ๋“ฑ์— ๋Œ€ํ•œ ๊ณ ๋ ค ์—†์ด ์งœ์—ฌ์ง„ ์ฝ”๋“œ๊ฐ€ ๋งŽ์•„, ์ค‘๋ณต ๊ธฐ๋Šฅ ํ˜น์€ ์ˆœํ™˜ ์ฐธ์กฐ ์š”์†Œ๊ฐ€ ๋‹ค์ˆ˜ ์กด์žฌํ•จ.

์ฑ„ํŒ…

    1. A์œ ์ €๊ฐ€ B์œ ์ €๋ฅผ ์ฐจ๋‹จ ํ›„ ์ฐจ๋‹จ ํ•ด์ œํ•  ๊ฒฝ์šฐ ์ฐจ๋‹จํ–ˆ๋˜ ์‹œ๊ฐ„ ๋™์•ˆ์˜ B์œ ์ €์˜ ๋ฉ”์„ธ์ง€๊ฐ€ A์—๊ฒŒ ๋ณด์ž„. ๊ธฐํš ๋ฐ ์„ค๊ณ„ ๋‹น์‹œ ์ƒ๊ฐํ•˜์ง€ ๋ชปํ–ˆ์Œ. ๊ธฐํš์— ๋”ฐ๋ผ ์ˆ˜์ • ํ•„์š”.
    2. ์†Œ์ผ“ ์—ฐ๊ฒฐ์„ ํŽ˜์ด์ง€ ์ง„์ž…, ์ดํƒˆ ๊ธฐ์ค€์œผ๋กœ ์—ฐ๊ฒฐ, ํ•ด์ œํ•˜๊ณ  ์žˆ์–ด ์‚ฌ์šฉ์ž๊ฐ€ ํŽ˜์ด์ง€๋ฅผ ์ด๋™ํ•  ๊ฒฝ์šฐ ์ ‘์†์ค‘์ธ ์œ ์ €๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๋ถ€๋ถ„์ด ๊นœ๋นก์ด๋Š” ํ˜„์ƒ ๋ฐœ์ƒ. ๋ฐฑ์—”๋“œ์—์„œ ๋กœ๊ทธ์•„์›ƒ ์‹œ์—๋งŒ ์œ ์ €์˜ ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋„๋ก ์ˆ˜์ • ํ•„์š”.
    3. ์ฑ„ํŒ… ๋‚ด์šฉ์ด๋‚˜, ์‹ค์‹œ๊ฐ„์œผ๋กœ ์œ ์ € ์ƒํƒœ ๋ณ€๊ฒฝ์„ ํ•„์š”ํ•œ ์œ ์ €์—๊ฒŒ ์†ก์‹ ํ•˜๋Š” ๋“ฑ์˜, ๋‹จ๊ธฐ๊ฐ„์— ๋งŽ์€ ์ค‘๋ณต๋œ DB์ ‘๊ทผ์ด ๋ฐœ์ƒํ•˜๋Š” ๋ถ€๋ถ„๋“ค์ด ์žˆ๋Š”๋ฐ, redis ๋“ฑ์„ ์ด์šฉํ•œ DB์บ์‹ฑ์œผ๋กœ ํ›จ์”ฌ ๊น”๋”ํ•˜๊ฒŒ ์ตœ์ ํ™” ๊ฐ€๋Šฅํ–ˆ๋‹ค.
    4. ์ˆœํ™˜์ฐธ์กฐ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ForwardRefํ•จ์ˆ˜๋ฅผ ๋‚จ์šฉํ•˜๋ฉด์„œ, ์ฝ”๋“œ์˜ ํ•ด๋‹น ๋ชจ๋“ˆ์„ ๋‹ค๋ฅธ ๋ชจ๋“ˆ์—์„œ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ๊ฐ€ ๋ชน์‹œ ์–ด๋ ค์›Œ์กŒ๋‹ค.

๊ฒŒ์ž„

    1. ์ตœ์ดˆ ์„ค๊ณ„์™€ ๋‹ค๋ฅด๊ฒŒ ์ถ”๊ฐ€๋œ ๋ถ€๋ถ„๋“ค์ด ๋งŽ์•„, ์ด๋ฏธ ์™„์„ฑ๋œ ๊ธฐ์กด ๋ชจ๋“ˆ์„ ์ œ๋Œ€๋กœ ํ™œ์šฉํ•˜์ง€ ๋ชปํ•˜๊ณ , ๋ง๋ถ™์—ฌ์ง„ ์š”์†Œ๊ฐ€ ๋‹ค์ˆ˜ ์žˆ๋‹ค.
    2. ๊ฒŒ์ž„ ์ „๋ฐ˜์˜ ํ”Œ๋กœ์šฐ๊ฐ€ ํƒ„ํƒ„ํ•œ ์„ค๊ณ„ ๋ณด๋‹ค๋Š”, ๊ทธ๋•Œ ๊ทธ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ํ•„์š”์— ์˜์กดํ•˜๋ฉด์„œ ๊ธ‰์กฐ๋œ ์š”์†Œ๊ฐ€ ๋งŽ๊ณ , ์ถ”ํ›„ ๊ธฐ๋Šฅ์ถ”๊ฐ€ ๋ฐ ๋ณ€๊ฒฝ ์‹œ ๋งŽ์€ ์ˆ˜์ •์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Œ.

back to top

Member

Frontend

dhyeon junselee mosong sgang
dhyeon junselee mosong sgang

Backend

jihokim kankim seungyel
jihokim kankim seungyel

back to top

Resource & Reference

Resource

Convention


License

ํ•ด๋‹น ํ”„๋กœ์ ํŠธ๋Š” MIT ๋ผ์ด์„ผ์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋‘๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

back to top