Giter Site home page Giter Site logo

yoopark / lastpong Goto Github PK

View Code? Open in Web Editor NEW

This project forked from lev-zero/lastpong

0.0 0.0 0.0 10.15 MB

ft_transcendence web project in 42 Seoul. It is a SPA service that implements Pong games, spectating, chatting, and DM using socket.io.

Shell 0.16% JavaScript 0.22% TypeScript 99.07% CSS 0.15% Makefile 0.33% Dockerfile 0.07%
nestjs nextjs typescript

lastpong's Introduction

LastPong ๐Ÿ“

์šฐ๋ฆฌ๋“ค์˜ ๋งˆ์ง€๋ง‰ ํƒ๊ตฌ ๊ฒŒ์ž„, LastPong

2023.01. ์ œ์ž‘ ์™„๋ฃŒ

42์„œ์šธ ๊ณตํ†ต๊ณผ์ • ๋งˆ์ง€๋ง‰ ๊ณผ์ œ ft_transcendence ๊ฒฐ๊ณผ๋ฌผ์ž…๋‹ˆ๋‹ค ๐Ÿ™‚

โ˜๏ธ ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ

  • Socket.io๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฒŒ์ž„, ์ฑ„ํŒ…, DM์„ ๊ตฌํ˜„ํ•œ SPA ์›น์„œ๋น„์Šค
  • 42 Auth๋ฅผ ์ด์šฉํ•˜์—ฌ 42 ์œ ์ € ๋Œ€์ƒ์œผ๋กœ ๊ฐ€์ž… ๋ฐ ์ธ์ฆ ๊ธฐ๋Šฅ ๊ตฌํ˜„
  • ์œ ์ € ์ƒ์„ฑ, ์นœ๊ตฌ ๋งบ๊ธฐ, ์นœ๊ตฌ ์ฐจ๋‹จ ๋“ฑ CRUD ์—ฐ์Šต

๐ŸŽจ ๊ธฐํš/๋””์ž์ธ

Figma Design ์ž์„ธํ•œ ๋””์ž์ธ ์‹œ์•ˆ์€ ํ•ด๋‹น ๋งํฌ์—์„œ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ปดํฌ๋„ŒํŠธ ๋ช…์„ธ์„œ ํŒ€ ๋…ธ์…˜ / ์Šฌ๋ž™ ๋“ฑ์„ ํ™œ์šฉํ•˜์—ฌ ํ˜‘์—… ๋ฐ ๋ฌธ์„œํ™”ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๐Ÿ™‚API / DB

API ๋ฌธ์„œ์™€ DB ์„ค๊ณ„ ๊ตฌ์กฐ

๐Ÿ’ก ๊ตฌํ˜„ ์ค‘์  ์‚ฌํ•ญ

  • ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ƒ๊ฐํ•˜๊ณ  ๋Œ€์‘ํ•˜๊ธฐ

    • ๊ฒŒ์ž„ ์ค‘๊ฐ„์— ๋‚˜๊ฐ”์„ ๋•Œ ์ƒ๋Œ€๋ฐฉ ๊ฒŒ์ž„ ์ข…๋ฃŒ ๋ฐ ์•Œ๋ฆผ ๋ณด๋‚ด๊ธฐ
    • ๋น„๋กœ๊ทธ์ธ ์œ ์ €๊ฐ€ ์„œ๋น„์Šค ๋‚ด ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•˜๋„๋ก ํ•˜๊ธฐ
    • ์ฑ„ํŒ… Owner/Admin ๊ถŒํ•œ ๋ถ€์—ฌ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋‹ค์–‘ํ•œ ์ผ€์ด์Šค ์ฒ˜๋ฆฌํ•˜๊ธฐ
  • ๊ฒฐ์ฝ” UI๋ฅผ ํฌ๊ธฐํ•˜์ง€ ์•Š๊ธฐ

    • ์ดˆ๋Œ€, ๊ฒŒ์ž„ ๊ฒฐ๊ณผ ๋“ฑ ํ™”๋ฉด์—์„œ ๋ชจ๋‹ฌ์ฐฝ ์ ๊ทน ํ™œ์šฉํ•˜๊ธฐ
    • Facebook, Instagram์ฒ˜๋Ÿผ ๋ฉ”์ธ์—์„œ DM ํŒ์˜ค๋ฒ„ ๊ฐ€๋Šฅํ•˜๋„๋ก ์ œ์ž‘ํ•˜๊ธฐ
    • ํƒ๊ตฌ ๊ฒŒ์ž„ ํ™”๋ฉด UI๋ฅผ ๊ณ ์ „์ ์ธ ๋Š๋‚Œ ๋‚˜๋„๋ก ๋งŒ๋“ค๊ธฐ

โš™๏ธ ์„ค์น˜ ๋ฐ ๋ฐฐํฌ ๋ฐฉ๋ฒ•

$ git clone https://github.com/lev-Zero/lastpong
$ cd lastpong/
# ์•„๋ž˜ ํ™˜๊ฒฝ์„ค์ • ์ฒดํฌ
$ docker-compose up -d

localhost ์ด์™ธ์˜ ์ฃผ์†Œ๋กœ ๋ฐฐํฌํ•  ๋•Œ ์ˆ˜์ •ํ•ด์•ผ ํ•  ๋ถ€๋ถ„

  • docker/backend.env์˜ย CALLBACK_URI,ย FRONTEND_URL
  • frontend/package.json์˜ย proxy
  • frontend/src/utils/variables.ts์˜ย SERVER_URL๊ณผย WS_SERVER_URL
  • 42 OAuth ๋‹ค๋ฅธ ๊ฑธ๋กœ ์ด์šฉํ•˜๋Š” ๊ฒฝ์šฐ, docker/backend.env์˜ย UID,ย SECRETย ๊ฐ’๋„ ๋ณ€๊ฒฝํ•ด์ฃผ์–ด์•ผ ํ•จ

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

ํŒŒํŠธ ๊ธฐ์ˆ ์Šคํƒ ์„ ์ •์ด์œ 
Common typescript_icon TypeScript Type ์•ˆ์ •์„ฑ์„ ๋ณด์žฅํ•˜์—ฌ ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ ๋ฐฉ์ง€
prettier_icon Prettier ์ฝ”๋“œ ์Šคํƒ€์ผ ์ •ํ˜•ํ™”๋ฅผ ํ†ตํ•œ ํ˜‘์—… ๋Šฅ๋ฅ  ํ–ฅ์ƒ
socket.io_icon Socket.io ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ… ๋ฐ ๊ฒŒ์ž„ ๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ์œ„ํ•ด HTTP ํ†ต์‹ ์ด ์•„๋‹Œ ์†Œ์ผ“ ํ†ต์‹  ํ•„์š”
Frontend next.js_icon Next.js Zero Config : Webpack ๋ฐ Babel ์„ค์ • ์—†์ด ๋นŒํŠธ์ธ์œผ๋กœ Code Splitting ๋ฐ JS ๋ฒˆ๋“ค๋ง
File-system Routing : pages ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ…์œผ๋กœ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ ์ง๊ด€์„ฑ ํ™•๋ณด
chakra-ui_icon Chakra UI ํ”„๋ฆฌ๋ฉ”์ด๋“œ ์ปดํฌ๋„ŒํŠธ์™€ ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ์ด์šฉํ•œ ์†์‰ฌ์šด UI ์ œ์ž‘
๐Ÿป Zustand ๋ฐฐ์šฐ๊ธฐ ์‰ฝ๊ณ  ๋‹จ์ˆœํ•œ ๊ตฌ์กฐ์˜ ์ƒํƒœ๊ด€๋ฆฌ ๋ชจ๋“ˆ, ๋ถˆํ•„์š”ํ•œ ๋ฆฌ๋ Œ๋”๋ง ๋ฐฉ์ง€์— ์šฉ์ดํ•จ
Backend nestjs_icon NestJS DI : ์˜์กด๊ด€๊ณ„๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ์ˆ˜์ • ๋ฐ ์žฌ์‚ฌ์šฉ์ด ์šฉ์ดํ•จ
IoC : ์ปดํฌ๋„ŒํŠธ์™€ ๋ชจ๋“ˆ์— ์ง‘์ค‘ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐ€๋Šฅ, ์œ ์ง€๋ณด์ˆ˜ ๋˜๋Š” ํ™•์žฅ์‹œ ํŽธ๋ฆฌ
postgresql_icon PostgreSQL ์˜๊ตฌ ๋ฌด๋ฃŒ์ธ ์˜คํ”ˆ์†Œ์Šค, ์ฐธ๊ณ ํ•  ์ž๋ฃŒ๊ฐ€ ๋งŽ๊ณ  ๋‹ค์–‘ํ•จ
typeorm_icon TypeORM RDBMS์˜ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์™€ ๊ฐ์ฒด์ง€ํ–ฅ ๋ชจ๋ธ ์‚ฌ์ด์˜ ๊ฐ„๊ฒฉ์„ ์ค„์—ฌ ์ƒ์‚ฐ์„ฑ ์ฆ๊ฐ€
passport_icon Passport 42 Auth ์ธ์ฆ ๊ธฐ๋Šฅ ๊ฐ„ํŽธํ™”
Infra docker-compose_icon Docker-compose ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ด์šฉํ•œ ๊ฐ€์ƒํ™˜๊ฒฝ ๊ตฌ์„ฑ ๋ฐ ๋นŒ๋“œ ์ž๋™ํ™”

๐Ÿ ํŠœํ† ๋ฆฌ์–ผ

  1. LAST PONG (๋กœ๊ทธ์ธ)

Untitled

2-1. ์‚ฌ์šฉ์ž ์„ค์ • (๋‹‰๋„ค์ž„ ์„ค์ •)

Untitled

2-2. ์‚ฌ์šฉ์ž ์„ค์ • (์•„๋ฐ”ํƒ€ ์„ค์ •)

(์‚ฌ์ง„ ํŒŒ์ผ) Front โ†’ Back ์ „์†ก

Untitled

  1. ๋ฉ”์ธํ™”๋ฉด

Untitled

3-1. ๋ฉ”์ธ ํ™”๋ฉด (๊ธฐ๋Šฅ ์„ค๋ช…)

Untitled

4-1. ๊ฒŒ์ž„ ํ”Œ๋ ˆ์ด

MATCH ๋ฒ„ํŠผ ํด๋ฆญ์‹œ ์„œ๋ฒ„ Queue์— ๋“ฑ๋ก๋˜๊ณ  ํ”Œ๋ ˆ์ด์–ด๊ฐ€ 2๋ช…์ด์ƒ ๋  ๊ฒฝ์šฐ ์„ค์ •ํ™”๋ฉด์œผ๋กœ ์ด๋™

Untitled

4-2. ๊ฒŒ์ž„ ํ”Œ๋ ˆ์ด (์„ค์ • ํ™”๋ฉด)

Untitled

4-3. ๊ฒŒ์ž„ ์„ค์ • ๊ทœ์น™

Untitled

4-4. ๊ฒŒ์ž„ ํ”Œ๋ ˆ์ด ํ™”๋ฉด

์ผ๋ฐ˜ ๋ชจ๋“œ

Untitled

์–ด๋‘์šด ํ™”๋ฉด ๋ชจ๋“œ

Untitled

4-5. ๊ฒŒ์ž„ ํ”Œ๋ ˆ์ด (์Šน๋ฆฌ)

Untitled

๊ฒŒ์ž„ ํ”Œ๋ ˆ์ด (ํŒจ๋ฐฐ)

Untitled

  1. ์‚ฌ์šฉ์ž ์ •๋ณด ํ‘œ์‹œ

Untitled

5-1. ์‚ฌ์šฉ์ž ์นœ๊ตฌ ์ดˆ๋Œ€

์นœ๊ตฌ ์ดˆ๋Œ€ ๋ฒ„ํŠผ์‹œ ์„œ๋ฒ„์— ๋“ฑ๋ก๋œ ๋ชจ๋“  ์œ ์ € ์ •๋ณด๋ฅผ ์œ ์ € ์ƒํƒœ์— ๋”ฐ๋ผ ํ‘œ์‹œ

Untitled

5-2. ์‚ฌ์šฉ์ž ์นœ๊ตฌ ์ดˆ๋Œ€์ฐฝ

์นœ๊ตฌ ์ดˆ๋Œ€์ฐฝ์—์„œ ์ผ๋ฐ˜ ์œ ์ € ์„ ํƒ์‹œ ์œ ์ € ํ”„๋กœํ•„์ด ํ‘œ์‹œ ๋œ๋‹ค.

Untitled

  • ADD FRIEND ๋ฒ„ํŠผ ํด๋ฆญ โ†’ ์˜ค๋ฅธ ์ชฝ์— ์žˆ๋Š” ์นœ๊ตฌ ์ฐฝ์— ์นœ๊ตฌ๊ฐ€ ์ถ”๊ฐ€๋œ๋‹ค.
  • DELETE FRIEND ๋ฒ„ํŠผ ํด๋ฆญ โ†’ ์ถ”๊ฐ€๋œ ์นœ๊ตฌ๋ฅผ ์‚ญ์ œํ•œ๋‹ค.

5-3. ์‚ฌ์šฉ์ž ์นœ๊ตฌ ์ฐฝ

Untitled

์ถ”๊ฐ€ํ•œ ์นœ๊ตฌ๋ฅผ ์˜ค๋ฅธ์ชฝ ํด๋ฆญ์‹œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฉ”๋‰ด ํ™”๋ฉด์ด ํ‘œ์‹œ๋œ๋‹ค.

  • VIEW PROFILE : ์นœ๊ตฌ์˜ ํ”„๋กœํ•„ ์ •๋ณด ํ™•์ธ
  • INVITE TO GAME : ์นœ๊ตฌ๋ฅผ ํ•‘ํ ๊ฒŒ์ž„์— ์ดˆ๋Œ€ํ•œ๋‹ค. - ๊ฒŒ์ž„ Queue ์™€ ๋ณ„๋„๋กœ ๋™์ž‘ํ•œ๋‹ค.
  • DELETE FRIEND : ์นœ๊ตฌ๋ฅผ ์‚ญ์ œํ•œ๋‹ค.

5-4. ์นœ๊ตฌ ์ฐฝ DM (Direct Message)

์นœ๊ตฌ ์ฐฝ์— ์žˆ๋Š” ์นœ๊ตฌ๋ฅผ ์™ผ์ชฝ ํด๋ฆญํ•˜๋ฉด ์นœ๊ตฌ์™€์˜ DM ์ฐฝ์ด ํ‘œ์‹œ๋œ๋‹ค.

Untitled

์นœ๊ตฌ์™€ ํ•จ๊ป˜ DM์„ ์ฃผ๊ณ  ๋ฐ›์„์ˆ˜ ์žˆ๋‹ค.

Untitled

์นœ๊ตฌ์—๊ฒŒ DM์„ ๋ฐ›๊ฒŒ๋˜๋ฉด DM ๋ฉ”์‹œ์ง€์˜ ๊ฐฏ์ˆ˜๊ฐ€ ๋”ฐ๋ผ ์นœ๊ตฌ ์ฐฝ์— ํ‘œ์‹œ๋œ๋‹ค.

Untitled

5-5. ์‚ฌ์šฉ์ž ๊ฒŒ์ž„ ์ดˆ๋Œ€ ํ™”๋ฉด

Untitled

์นœ๊ตฌ์—๊ฒŒ INVITE TO GAME ๋ฉ”์‹œ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฒŒ์ž„ ์ดˆ๋Œ€ ํ™”๋ฉด์ด ํ‘œ์‹œ๋œ๋‹ค.

์ดˆ๋Œ€ ๋ฐ›์€ ์นœ๊ตฌ์˜ ์„ ํƒ์— ๋”ฐ๋ผ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ–‰๋™์ด ์‹คํ–‰๋œ๋‹ค.

  • ์ดˆ๋Œ€ ์ˆ˜๋ฝ : ๊ฒŒ์ž„ ์„ค์ • ์ฐฝ์œผ๋กœ ์ด๋™๋œ๋‹ค.
  • ์ดˆ๋Œ€ ๊ฑฐ์ ˆ : ์ดˆ๋Œ€ ์ฐฝ์ด ์ž๋™์œผ๋กœ ์ข…๋ฃŒ๋œ๋‹ค.
  1. ์ฑ„ํŒ… ํ™”๋ฉด

Untitled

ํ˜„์žฌ ์ ‘์†๋œ ๋ชจ๋“  ์œ ์ € ์ •๋ณด๋ฅผ ์ถœ๋ ฅํ•˜๊ณ , CREATE ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์—ฌ ์ฑ„ํŒ…๋ฐฉ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋น„๋ฐ€๋ฒˆํ˜ธ์˜ ํ‘œ์‹œ๋ฅผ *๋กœ ๋ฐ”๊ฟ” ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

6.1 ์ฑ„ํŒ…๋ฐฉ ์ž…์žฅ

Untitled

์ฑ„ํŒ…๋ฐฉ์— ์ž…์žฅํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ™”๋ฉด์ด ํ‘œ์‹œ๋˜๋ฉฐ ์‚ฌ์šฉ์ž๋“ค๊ณผ ๋Œ€ํ™”๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

Untitled

๋ฐฉ์— ์ž…์žฅํ•ด์„œ ๋ฐฉ์žฅ > ๊ด€๋ฆฌ์ž > ์ผ๋ฐ˜ ์ˆ˜์ค€์œผ๋กœ ๊ถŒํ•œ์„ ๊ฐ–๋Š”๋‹ค.

  • MUTE 1 MIN : 1๋ถ„๊ฐ„ ์‚ฌ์šฉ์ž์˜ ๋Œ€ํ™”๋ฅผ MUTE ์‹œํ‚ต๋‹ˆ๋‹ค.
  • BAN USER : ์‚ฌ์šฉ์ž๋ฅผ ๊ฐ•ํ‡ด ์‹œํ‚ค๊ณ  1๋ถ„๊ฐ„ ์ž…์žฅ์„ ์ œํ•œ์‹œํ‚ต๋‹ˆ๋‹ค.
  • VIEW PROFILE : ์‚ฌ์šฉ์ž์˜ ํ”„๋กœํ•„์„ ๋ณผ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • INVITE TO GAME : ๊ฒŒ์ž„์— ์ƒ๋Œ€๋ฅผ ์ดˆ๋Œ€ํ•ฉ๋‹ˆ๋‹ค
  • ADD FRIEND : ์ƒ๋Œ€๋ฅผ ์นœ๊ตฌ๋กœ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค
  • BLOCK : ์ƒ๋Œ€๋ฅผ BLOCK ํ•˜์—ฌ ์ƒ๋Œ€๋ฐฉ์˜ ๋ฉ”์‹œ์ง€๋ฅผ ๋”์ด์ƒ ๋ณด์ง€์•Š์Šต๋‹ˆ๋‹ค.

Untitled

MUTE ๋œ ์ƒํƒœ์—์„œ ๋ฉ”์‹œ์ง€๋ฅผ ์ž…๋ ฅํ•˜๋ ค๊ณ  ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ™”๋ฉด์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ‘‹ ํŒ€ ์ •๋ณด

Name Github ID Role
๋ฐ•์šฉ์ค€ FrontEnd
๋ฌธ์น˜ํ›ˆ FrontEnd
์ตœ์„ ๋นˆ FrontEnd
์ด์ •ํ™˜ BackEnd

lastpong's People

Contributors

yoopark avatar toy-k avatar lev-zero avatar choi-sunbin avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.