Skip to content

Pick-px/frontend

Repository files navigation

Pick-PX Logo

Pick-PX Frontend

์‹ค์‹œ๊ฐ„ ํ”ฝ์…€ ์•„ํŠธ ํ˜‘์—… ํ”Œ๋žซํผ์˜ ํ”„๋ก ํŠธ์—”๋“œ ์ž…๋‹ˆ๋‹ค.

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

Pick-PX๋Š” ์‚ฌ์šฉ์ž๋“ค์ด ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ•จ๊ป˜ ํ”ฝ์…€ ์•„ํŠธ๋ฅผ ๊ทธ๋ฆด ์ˆ˜ ์žˆ๋Š” ํ˜‘์—… ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค. ์บ”๋ฒ„์Šค ๊ณต์œ , ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ…, ๊ฒŒ์ž„ ๋ชจ๋“œ ๋“ฑ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์š” ๊ธฐ๋Šฅ

  • ๐ŸŽจ ์‹ค์‹œ๊ฐ„ ํ”ฝ์…€ ์•„ํŠธ ์บ”๋ฒ„์Šค: ๋‹ค์ค‘ ์‚ฌ์šฉ์ž๊ฐ€ ๋™์‹œ์— ํ”ฝ์…€์„ ๊ทธ๋ฆด ์ˆ˜ ์žˆ๋Š” ํ˜‘์—…์บ”๋ฒ„์Šค
  • ๐Ÿ’ฌ ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ…: ์บ”๋ฒ„์Šค ๋‚ด์—์„œ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์†Œํ†ตํ•  ์ˆ˜ ์žˆ๋Š” ์ฑ„ํŒ… ๊ธฐ๋Šฅ
  • ๐ŸŽฎ ๊ฒŒ์ž„ ๋ชจ๋“œ: ํ€ด์ฆˆ๋ฅผ ํ†ตํ•œ ๊ฒŒ์ž„ํ˜• ์บ”๋ฒ„์Šค ๊ฒฝํ—˜
  • ๐Ÿ‘ฅ ๊ทธ๋ฃน ์‹œ์Šคํ…œ: ์บ”๋ฒ„์Šค๋ฅผ ๊ทธ๋ฃน ๋‹จ์œ„๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ๊ณต์œ 
  • ๐Ÿ“ฑ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ: ๋ฐ์Šคํฌํ†ฑ๊ณผ ๋ชจ๋ฐ”์ผ ํ™˜๊ฒฝ ๋ชจ๋‘ ์ง€์›
  • ๐Ÿ” OAuth ๋กœ๊ทธ์ธ: Google ๋กœ๊ทธ์ธ ์ง€์›
  • ๐ŸŽต ์‚ฌ์šด๋“œ ํšจ๊ณผ: BGM ๋ฐ ํšจ๊ณผ์Œ์œผ๋กœ ๋ชฐ์ž…๊ฐ ์žˆ๋Š” ๊ฒฝํ—˜ ์ œ๊ณต

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

Frontend Framework

  • React 19.1.0 - ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌ์ถ•
  • TypeScript 5.8.3 - ํƒ€์ž… ์•ˆ์ „์„ฑ ๋ณด์žฅ
  • Vite 7.0.0 - ๋น ๋ฅธ ๊ฐœ๋ฐœ ์„œ๋ฒ„ ๋ฐ ๋นŒ๋“œ ๋„๊ตฌ

UI & Styling

  • Tailwind CSS 4.1.11 - ์œ ํ‹ธ๋ฆฌํ‹ฐ ๊ธฐ๋ฐ˜ CSS ํ”„๋ ˆ์ž„์›Œํฌ
  • React Responsive - ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ๊ตฌํ˜„
  • React Slick - ์ด๋ฏธ์ง€ ์บ๋Ÿฌ์…€ ์ปดํฌ๋„ŒํŠธ

State Management

  • Zustand 5.0.6 - ๊ฒฝ๋Ÿ‰ ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

Networking & Communication

  • Axios 1.10.0 - HTTP ํด๋ผ์ด์–ธํŠธ
  • Socket.io Client 4.8.1 - ์‹ค์‹œ๊ฐ„ ์›น์†Œ์ผ“ ํ†ต์‹ 

Routing

  • React Router DOM 7.6.3 - ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๋ผ์šฐํŒ…

Utilities

  • JWT Decode 4.0.0 - JWT ํ† ํฐ ๋””์ฝ”๋”ฉ
  • React Toastify 11.0.5 - ํ† ์ŠคํŠธ ์•Œ๋ฆผ
  • Use Sound 5.0.0 - ์‚ฌ์šด๋“œ ํšจ๊ณผ ๊ด€๋ฆฌ

Development Tools

  • ESLint - ์ฝ”๋“œ ํ’ˆ์งˆ ๊ด€๋ฆฌ
  • Prettier - ์ฝ”๋“œ ํฌ๋งทํŒ…
  • Vitest - ๋‹จ์œ„ ํ…Œ์ŠคํŠธ
  • Testing Library - React ์ปดํฌ๋„ŒํŠธ ํ…Œ์ŠคํŠธ

๐Ÿ“ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

src/
โ”œโ”€โ”€ api/                    # API ํด๋ผ์ด์–ธํŠธ
โ”œโ”€โ”€ assets/                 # ์ •์  ์ž์‚ฐ (์ด๋ฏธ์ง€, ์•„์ด์ฝ˜)
โ”œโ”€โ”€ auth/                   # ์ธ์ฆ ๊ด€๋ จ ์ปดํฌ๋„ŒํŠธ
โ”œโ”€โ”€ components/             # ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ปดํฌ๋„ŒํŠธ
โ”‚   โ”œโ”€โ”€ album/             # ์•จ๋ฒ” ๊ด€๋ จ ์ปดํฌ๋„ŒํŠธ
โ”‚   โ”œโ”€โ”€ canvas/            # ์บ”๋ฒ„์Šค ๊ด€๋ จ ์ปดํฌ๋„ŒํŠธ
โ”‚   โ”œโ”€โ”€ chat/              # ์ฑ„ํŒ… ๊ด€๋ จ ์ปดํฌ๋„ŒํŠธ
โ”‚   โ”œโ”€โ”€ game/              # ๊ฒŒ์ž„ ๊ด€๋ จ ์ปดํฌ๋„ŒํŠธ
โ”‚   โ”œโ”€โ”€ group/             # ๊ทธ๋ฃน ๊ด€๋ จ ์ปดํฌ๋„ŒํŠธ
โ”‚   โ”œโ”€โ”€ modal/             # ๋ชจ๋‹ฌ ์ปดํฌ๋„ŒํŠธ
โ”‚   โ””โ”€โ”€ toast/             # ํ† ์ŠคํŠธ ์•Œ๋ฆผ ์ปดํฌ๋„ŒํŠธ
โ”œโ”€โ”€ hooks/                  # ์ปค์Šคํ…€ React ํ›…
โ”œโ”€โ”€ pages/                  # ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ
โ”œโ”€โ”€ router/                 # ๋ผ์šฐํŒ… ์„ค์ •
โ”œโ”€โ”€ services/               # ์„œ๋น„์Šค ๋ ˆ์ด์–ด
โ”œโ”€โ”€ store/                  # Zustand ์ƒํƒœ ๊ด€๋ฆฌ
โ”œโ”€โ”€ utils/                  # ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜
โ””โ”€โ”€ workers/                # Web Worker

๐Ÿš€ ์„ค์น˜ ๋ฐ ์‹คํ–‰

ํ•„์ˆ˜ ์š”๊ตฌ์‚ฌํ•ญ

  • Node.js 18.0.0 ์ด์ƒ
  • npm ๋˜๋Š” yarn

์„ค์น˜

# ์˜์กด์„ฑ ์„ค์น˜
npm install

๊ฐœ๋ฐœ ์„œ๋ฒ„ ์‹คํ–‰

# ๊ฐœ๋ฐœ ๋ชจ๋“œ๋กœ ์‹คํ–‰
npm run dev

๊ฐœ๋ฐœ ์„œ๋ฒ„๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ http://localhost:5173์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

๋นŒ๋“œ

# ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ
npm run build

๋ฏธ๋ฆฌ๋ณด๊ธฐ

# ๋นŒ๋“œ๋œ ๊ฒฐ๊ณผ๋ฌผ ๋ฏธ๋ฆฌ๋ณด๊ธฐ
npm run preview

ํ…Œ์ŠคํŠธ

# ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์‹คํ–‰
npm run test

# ํ…Œ์ŠคํŠธ UI ์‹คํ–‰
npm run test:ui

์ฝ”๋“œ ํ’ˆ์งˆ

# ESLint ๊ฒ€์‚ฌ
npm run lint

๐Ÿ”ง ํ™˜๊ฒฝ ์„ค์ •

ํ™˜๊ฒฝ ๋ณ€์ˆ˜

ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์— .env ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  ๋‹ค์Œ ๋ณ€์ˆ˜๋“ค์„ ์„ค์ •ํ•˜์„ธ์š”:

VITE_API_BASE_URL=http://localhost:3000
VITE_SOCKET_URL=http://localhost:3000

๋ฐฑ์—”๋“œ ์—ฐ๊ฒฐ

์ด ํ”„๋ก ํŠธ์—”๋“œ๋Š” NestJS ๋ฐฑ์—”๋“œ์™€ ์—ฐ๋™๋ฉ๋‹ˆ๋‹ค. ๋ฐฑ์—”๋“œ ์„œ๋ฒ„๊ฐ€ ์‹คํ–‰ ์ค‘์ด์–ด์•ผ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“ฑ ์ฃผ์š” ์ปดํฌ๋„ŒํŠธ

Canvas System

  • PixelCanvas.tsx - ๋ฉ”์ธ ํ”ฝ์…€ ์บ”๋ฒ„์Šค ์ปดํฌ๋„ŒํŠธ
  • CanvasUI.tsx - ์บ”๋ฒ„์Šค UI ์ปจํŠธ๋กค
  • StarfieldCanvas.tsx - ๋ณ„์ž๋ฆฌ ๋ฐฐ๊ฒฝ ํšจ๊ณผ

Game System

  • GameCanvas.tsx - ๊ฒŒ์ž„ ๋ชจ๋“œ ์บ”๋ฒ„์Šค
  • QuestionModal.tsx - ํ€ด์ฆˆ ๋ชจ๋‹ฌ
  • GameTimer.tsx - ๊ฒŒ์ž„ ํƒ€์ด๋จธ

Chat System

  • Chat.tsx - ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ… ์ปดํฌ๋„ŒํŠธ
  • MessageList.tsx - ๋ฉ”์‹œ์ง€ ๋ชฉ๋ก
  • MessageInput.tsx - ๋ฉ”์‹œ์ง€ ์ž…๋ ฅ

Modal System

  • Modal.tsx - ๊ธฐ๋ณธ ๋ชจ๋‹ฌ ์ปดํฌ๋„ŒํŠธ
  • LoginModalContent.tsx - ๋กœ๊ทธ์ธ ๋ชจ๋‹ฌ
  • GroupModalContent.tsx - ๊ทธ๋ฃน ๊ด€๋ฆฌ ๋ชจ๋‹ฌ

๐Ÿ”Œ API ํ†ต์‹ 

API ํด๋ผ์ด์–ธํŠธ

  • apiClient.ts - Axios ๊ธฐ๋ฐ˜ HTTP ํด๋ผ์ด์–ธํŠธ
  • CanvasAPI.ts - ์บ”๋ฒ„์Šค ๊ด€๋ จ API
  • GameAPI.ts - ๊ฒŒ์ž„ ๊ด€๋ จ API
  • GroupAPI.ts - ๊ทธ๋ฃน ๊ด€๋ จ API

WebSocket ํ†ต์‹ 

  • socketService.ts - Socket.io ํด๋ผ์ด์–ธํŠธ ์„ค์ •
  • useSocket.ts - WebSocket ์ปค์Šคํ…€ ํ›…
  • useChatSocket.ts - ์ฑ„ํŒ… ์†Œ์ผ“ ํ›…
  • useGameSocket.ts - ๊ฒŒ์ž„ ์†Œ์ผ“ ํ›…

๐ŸŽจ ์Šคํƒ€์ผ๋ง

์ด ํ”„๋กœ์ ํŠธ๋Š” Tailwind CSS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์Šคํƒ€์ผ๋ง๋ฉ๋‹ˆ๋‹ค:

  • ์œ ํ‹ธ๋ฆฌํ‹ฐ ํด๋ž˜์Šค ๊ธฐ๋ฐ˜ ์Šคํƒ€์ผ๋ง
  • ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ์ง€์›
  • ๋‹คํฌ/๋ผ์ดํŠธ ๋ชจ๋“œ ์ง€์› (ํ•„์š”์‹œ)

๐Ÿงช ํ…Œ์ŠคํŠธ

# ๋ชจ๋“  ํ…Œ์ŠคํŠธ ์‹คํ–‰
npm run test

# ํ…Œ์ŠคํŠธ ์ปค๋ฒ„๋ฆฌ์ง€ ํ™•์ธ
npm run test:coverage

# ํ…Œ์ŠคํŠธ UI ์‹คํ–‰
npm run test:ui

๐Ÿค ๊ธฐ์—ฌํ•˜๊ธฐ

  1. ์ด ์ €์žฅ์†Œ๋ฅผ ํฌํฌํ•ฉ๋‹ˆ๋‹ค
  2. ์ƒˆ๋กœ์šด ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค (git checkout -b feature/amazing-feature)
  3. ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ปค๋ฐ‹ํ•ฉ๋‹ˆ๋‹ค (git commit -m 'Add some amazing feature')
  4. ๋ธŒ๋žœ์น˜์— ํ‘ธ์‹œํ•ฉ๋‹ˆ๋‹ค (git push origin feature/amazing-feature)
  5. Pull Request๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค

๐Ÿ“„ ๋ผ์ด์„ ์Šค

์ด ํ”„๋กœ์ ํŠธ๋Š” MIT ๋ผ์ด์„ ์Šค ํ•˜์— ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ“ž ์ง€์›

๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜ ์งˆ๋ฌธ์ด ์žˆ์œผ์‹œ๋ฉด ์ด์Šˆ๋ฅผ ์ƒ์„ฑํ•ด ์ฃผ์„ธ์š”.


Pick-PX Frontend - ํ•จ๊ป˜ ๊ทธ๋ฆฌ๋Š” ํ”ฝ์…€ ์•„ํŠธ์˜ ์„ธ๊ณ„ ๐ŸŒŸ

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages