Skip to content

Latest commit

ย 

History

History
169 lines (122 loc) ยท 6.6 KB

File metadata and controls

169 lines (122 loc) ยท 6.6 KB

image

๐ŸŽค ๋‚ด ์ฝ˜์„œํŠธ๋ฅผ ๋ถ€ํƒํ•ด

์˜ˆ๋งค๋ถ€ํ„ฐ ๋’คํ’€์ด๊นŒ์ง€, ๊ณต์—ฐ ๊ด€๋žŒ์˜ ํ•˜๋ฃจ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์˜ฌ์ธ์› ๋งค๋‹ˆ์ง€๋จผํŠธ ํ”Œ๋žซํผ


1๏ธโƒฃ ํ”„๋กœ์ ํŠธ ๊ฐœ์š”

๐Ÿ“– ์†Œ๊ฐœ

๊ณต์—ฐ ๊ด€๋žŒ์€ ๋‹จ์ˆœํ•œ 2์‹œ๊ฐ„์˜ ๊ฒฝํ—˜์ด ์•„๋‹™๋‹ˆ๋‹ค.
ํƒ์ƒ‰ โ†’ ์˜ˆ๋งค โ†’ ์ด๋™ โ†’ ๊ด€๋žŒ โ†’ ๋’คํ’€์ด๋กœ ์ด์–ด์ง€๋Š” ํ•˜๋ฃจ์˜ ํ”Œ๋กœ์šฐ๋ฅผ ํ•˜๋‚˜์˜ ํ”Œ๋žซํผ ์•ˆ์—์„œ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์„œ๋ฒ„ ์šด์˜์‹œ๊ฐ„์€ 09:00 ~ 18:00์ด๋ฉฐ, ์ด ์‹œ๊ฐ„ ์™ธ์—๋Š” ์„œ๋ฒ„๊ฐ€ ๊บผ์ ธ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์–‘ํ•ด ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

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

  • ๊ณต์—ฐ ์ผ์ • ํƒ์ƒ‰ : ์•„ํ‹ฐ์ŠคํŠธ/์žฅ์†Œ/๋‚ ์งœ ๊ธฐ์ค€์œผ๋กœ ๊ณต์—ฐ์„ ํƒ์ƒ‰ํ•˜๊ณ  ๊ด€์‹ฌ ๊ณต์—ฐ ์ €์žฅ
  • ์˜ˆ๋งค ์˜คํ”ˆ ์•Œ๋ฆผ : ํ‹ฐ์ผ“ํŒ… ์ผ์ • ์•Œ๋ฆผ ์„ค์ •์œผ๋กœ ์˜คํ”ˆ์„ ์ ˆ๋Œ€ ๋†“์น˜์ง€ ์•Š์Œ
  • ์™ธ์ถœ ๊ณ„ํš ์ˆ˜๋ฆฝ : ์ด๋™ ๋™์„ , ์‹์‚ฌ, ์ง‘ํ•ฉ ์žฅ์†Œ๊นŒ์ง€ ๊ณต์—ฐ ํ•˜๋ฃจ๋ฅผ ํ•œ๋ˆˆ์— ๊ณ„ํš
  • ๋™ํ–‰์ž ๊ตฌ์ธ ๋ฐ ์กฐ์œจ : ํ•จ๊ป˜ ๊ฐˆ ๋™ํ–‰์ž ๋ชจ์ง‘, ์ผ์ • ๊ณต์œ 

๐Ÿ”Ž ํŒ€์› ์†Œ๊ฐœ

ํ”„๋ก ํŠธ์—”๋“œ

์ด๋ฆ„ ์—ญํ•  GitHub
๋ฐ•์ƒ์•„ ํŒ€์žฅ, Git ์ด๊ด„, UI/UX ๋””์ž์ธ, ๊ณต์—ฐยท๋งˆ์ดํŽ˜์ด์ง€ยท๊ฒ€์ƒ‰ยท์™ธ์ถœํ”Œ๋ž˜๋„ˆ ํผ๋ธ”๋ฆฌ์‹ฑ ๋ฐ ๊ฐœ๋ฐœ @garlatonic
๋ณ€์ˆ˜์—ฐ ํŒ€์›, ๊ตฌ์ธยท๊ณต์—ฐยท๋งˆ์ดํŽ˜์ด์ง€ ํผ๋ธ”๋ฆฌ์‹ฑ ๋ฐ ๊ฐœ๋ฐœ @varYeon
์ •์ง„ํ™˜ ํŒ€์›, ์ธ์ฆ/์ธ๊ฐ€ ๊ตฌํ˜„, ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ…ยท๊ณต์—ฐ ํ›„๊ธฐยท์•„ํ‹ฐ์ŠคํŠธ ํผ๋ธ”๋ฆฌ์‹ฑ ๋ฐ ๊ฐœ๋ฐœ @stupilman

๋ฐฑ์—”๋“œ

์ด๋ฆ„ ์—ญํ•  GitHub
์ตœ๋ณ‘์ค€ PO, ์ธ์ฆ/์ธ๊ฐ€ยทํšŒ์›ยท์ปค๋ฎค๋‹ˆํ‹ฐ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„ ๋ฐ ๊ฐœ๋ฐœ @larama-C
๊ฐ•ํœ˜์œค ํŒ€์žฅ, Git ์ด๊ด„, ๊ณต์—ฐ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„ ๋ฐ ๊ฐœ๋ฐœ @Creamcheesepie
๊น€๋ฏผ์„ ํŒ€์›, ํ”Œ๋ž˜๋„ˆ ์ผ์ • ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„ ๋ฐ ๊ฐœ๋ฐœ, ๋ชจ๋‹ˆํ„ฐ๋ง @kms152000
๊น€์œค์ˆ˜ ํŒ€์›, ํ”Œ๋ž˜๋„ˆ ์žฅ์†Œ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„ ๋ฐ ๊ฐœ๋ฐœ, E2E ํ…Œ์ŠคํŠธ @tobbot16
์ดํ˜œ์ง€ ํŒ€์›, ์ฑ„ํŒ… ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„ ๋ฐ ๊ฐœ๋ฐœ, CI/CD, AWS ์ธํ”„๋ผ ๊ด€๋ฆฌ @heygeeji
์ •์œค์„œ ํŒ€์›, ์•„ํ‹ฐ์ŠคํŠธยท์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„ ๋ฐ ๊ฐœ๋ฐœ @ys0221

2๏ธโƒฃ ๊ธฐ์ˆ  ์Šคํƒ

๐Ÿ–ฅ ํ”„๋ก ํŠธ์—”๋“œ

๋ถ„๋ฅ˜ ๊ธฐ์ˆ 
Framework Next.js 16 (App Router), React 19
Language TypeScript 5 (Strict Mode)
Styling Tailwind CSS v4, shadcn/ui (Radix UI)
์ƒํƒœ ๊ด€๋ฆฌ Zustand v5, TanStack Query v5
ํผ ๊ด€๋ฆฌ React Hook Form v7, Zod v4
์‹ค์‹œ๊ฐ„ ํ†ต์‹  STOMP.js (WebSocket)
์ง€๋„ Kakao Maps SDK
๊ธฐํƒ€ date-fns, Swiper

๐Ÿ›  ๊ฐœ๋ฐœ ํ™˜๊ฒฝ & ํ˜‘์—… ๋„๊ตฌ

๋ถ„๋ฅ˜ ๊ธฐ์ˆ 
์ฝ”๋“œ ํ’ˆ์งˆ ESLint v9, Prettier v3
Git ํ›… Husky v9, lint-staged
CI/CD Vercel
๋ธŒ๋žœ์น˜ ์ „๋žต GitHub Flow

3๏ธโƒฃ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ •

๐Ÿ“‹ ์š”๊ตฌ ์‚ฌํ•ญ

  • Node.js: >= 18.0.0
  • ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €: npm
  • ์ถ”์ฒœ IDE ํ”Œ๋Ÿฌ๊ทธ์ธ: ESLint, Prettier, Tailwind CSS IntelliSense

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

# 1. ์ €์žฅ์†Œ ํด๋ก 
git clone https://github.com/prgrms-web-devcourse-final-project/WEB6_7_codecrete_FE.git
cd WEB6_7_codecrete_FE

# 2. ํŒจํ‚ค์ง€ ์„ค์น˜
npm install

# 3. ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •
# ์˜ˆ์‹œ ํŒŒ์ผ์„ ๋ณต์‚ฌํ•œ ๋’ค .env ์— ๊ฐ’์„ ์ฑ„์›Œ์ฃผ์„ธ์š”.
cp .env.example .env
# ๊ฐ ํ‚ค ๊ฐ’์€ ํŒ€ ๋…ธ์…˜/์Šฌ๋ž™ ๋“ฑ์˜ ๋‚ด๋ถ€ ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•ด ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

# 4. ๊ฐœ๋ฐœ ์„œ๋ฒ„ ์‹คํ–‰
npm run dev

โš ๏ธ ์ด ํ”„๋กœ์ ํŠธ๋Š” ๋ฐฑ์—”๋“œ ์„œ๋ฒ„์™€ ํ•จ๊ป˜ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๋ฐฑ์—”๋“œ ๋ ˆํฌ์ง€ํ† ๋ฆฌ: WEB6_7_codecrete_BE

๐Ÿ“œ ์ฃผ์š” ์Šคํฌ๋ฆฝํŠธ

๋ช…๋ น์–ด ์„ค๋ช…
npm run dev ๊ฐœ๋ฐœ ์„œ๋ฒ„ ์‹คํ–‰
npm run build ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ
npm run start ํ”„๋กœ๋•์…˜ ์„œ๋ฒ„ ์‹คํ–‰
npm run lint ESLint ๊ฒ€์‚ฌ
npm run format Prettier ์ž๋™ ํฌ๋งทํŒ…

4๏ธโƒฃ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

src/
โ”œโ”€โ”€ app/              # Next.js App Router (๋ผ์šฐํŠธ + ํŽ˜์ด์ง€)
โ”œโ”€โ”€ components/       # ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ UI ์ปดํฌ๋„ŒํŠธ (Atomic Design)
โ”œโ”€โ”€ hooks/            # ์ปค์Šคํ…€ React Hook
โ”œโ”€โ”€ queries/          # TanStack Query (queryKey ์ •์˜)
โ”œโ”€โ”€ stores/           # Zustand ์ „์—ญ ์ƒํƒœ ์Šคํ† ์–ด
โ”œโ”€โ”€ types/            # TypeScript ๊ณต์šฉ ํƒ€์ž… ์ •์˜
โ”œโ”€โ”€ utils/            # ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜
โ”œโ”€โ”€ lib/              # ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์ • (Backend API, zod, shadcn/io ๋“ฑ)
โ”œโ”€โ”€ providers/        # Context Provider ๋ชจ์Œ
โ”œโ”€โ”€ constants/        # ์ƒ์ˆ˜ ์ •์˜
โ”œโ”€โ”€ assets/           # ์ด๋ฏธ์ง€, ์•„์ด์ฝ˜ ๋“ฑ ์ •์  ํŒŒ์ผ
โ”œโ”€โ”€ css/              # ์ „์—ญ ์Šคํƒ€์ผ
โ””โ”€โ”€ proxy.ts          # Next.js API Route Proxy ์„ค์ •

5๏ธโƒฃ ํ•ต์‹ฌ ๊ตฌํ˜„ ํฌ์ธํŠธ

๐Ÿ“… ์ผ์ • ๊ด€๋ฆฌ ๋ฐ ์บ˜๋ฆฐ๋” ์—ฐ๋™

  • Context API๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋งˆ์ดํŽ˜์ด์ง€ ๋‚ด๋ถ€ ์บ˜๋ฆฐ๋”์— ํšจ๊ณผ์ ์œผ๋กœ ๊ณต์—ฐ / ์•„ํ‹ฐ์ŠคํŠธ / ํ”Œ๋ž˜๋„ˆ ์ผ์ • ํ‘œ์‹œ

โšก ์„ฑ๋Šฅ ์ตœ์ ํ™”

  • Next.js App Router์˜ ๋™์  ๋ผ์šฐํŠธ ํŠน์„ฑ์„ ๊ณ ๋ คํ•ด prefetch ์ „๋žต๊ณผ Streaming ๊ธฐ๋ฐ˜ Suspense๋ฅผ ๋„์ž…
  • Suspense boundary๋ฅผ ๋ผ์šฐํŠธ ๋‹จ์œ„๋กœ ๋ถ„๋ฆฌํ•ด, ๋ ˆ์ด์•„์›ƒ์€ ์ฆ‰์‹œ ๋ Œ๋”๋งํ•˜๊ณ  ๋ฐ์ดํ„ฐ ์˜์—ญ๋งŒ Skeleton UI๋กœ ๋Œ€๊ธฐํ•˜๋Š” ๊ตฌ์กฐ๋กœ ์ฒด๊ฐ ์ง€์—ฐ ๊ฐœ์„ 

๐Ÿ”„ ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ… (WebSocket + STOMP)

  • @stomp/stompjs ๊ธฐ๋ฐ˜ WebSocket ์—ฐ๊ฒฐ๋กœ ๋™ํ–‰์ž ๊ฐ„ ์‹ค์‹œ๊ฐ„ ์†Œํ†ต ๊ตฌํ˜„
  • ์—ฐ๊ฒฐ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ Custom Hook(useStompClient)์œผ๋กœ ์บก์Аํ™”

๐Ÿ—บ ์นด์นด์˜ค ์ง€๋„ ์—ฐ๋™

  • react-kakao-maps-sdk๋ฅผ ํ™œ์šฉํ•ด ๊ณต์—ฐ์žฅ ์ฃผ๋ณ€ ๋™์„  ๋ฐ ๋ง›์ง‘ ์ •๋ณด๋ฅผ ์ง€๋„ ์œ„์— ์‹œ๊ฐํ™”

๐Ÿ“‹ ํผ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ

  • react-hook-form + zod ์กฐํ•ฉ์œผ๋กœ ํƒ€์ž… ์•ˆ์ „ํ•œ ํผ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๊ตฌํ˜„
  • ์Šคํ‚ค๋งˆ ๊ธฐ๋ฐ˜ ๊ฒ€์ฆ์œผ๋กœ ์„œ๋ฒ„ยทํด๋ผ์ด์–ธํŠธ ๊ณตํ†ต ์œ ํšจ์„ฑ ๋กœ์ง ์ผ์›ํ™”

๋” ์ž์„ธํ•œ ๊ฐœ๋ฐœ ์ปจ๋ฒค์…˜๊ณผ PR ์ž‘์„ฑ ๊ฐ€์ด๋“œ๋ผ์ธ์€ CONTRIBUTING.md๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”.