Skip to content

Latest commit

Β 

History

History
150 lines (126 loc) Β· 5.56 KB

File metadata and controls

150 lines (126 loc) Β· 5.56 KB

My App

Next.js ν”„λ‘œμ νŠΈ κΈ°λ³Έ μ„ΈνŒ…

μ£Όμš” κΈ°λŠ₯

ν”„λ ˆμž„μ›Œν¬ & 라이브러리

  • Next.js 16 - React ν”„λ ˆμž„μ›Œν¬ (Turbopack)
  • React 19 - UI 라이브러리
  • TypeScript - νƒ€μž… μ•ˆμ •μ„±
  • Tailwind CSS - μœ ν‹Έλ¦¬ν‹° 기반 μŠ€νƒ€μΌλ§

개발 도ꡬ

  • ESLint - μ½”λ“œ ν’ˆμ§ˆ 검사 및 μžλ™ μˆ˜μ •
    • simple-import-sort: Import λ¬Έ μžλ™ μ •λ ¬
    • eslint-plugin-perfectionist: JSX 속성 μžλ™ μ •λ ¬
    • Next.js ꢌμž₯ κ·œμΉ™ 적용
  • Prettier - μ½”λ“œ ν¬λ§€νŒ…
    • prettier-plugin-tailwindcss: Tailwind CSS 클래슀 μžλ™ μ •λ ¬
  • commitLint
    • commit message κ·œμΉ™ 검사
  • Husky + lint-staged
    • Pre-commit: ESLint μžλ™ 검사 및 μˆ˜μ •
    • Commit-msg: Commit λ©”μ‹œμ§€ κ·œμΉ™ 검증

API & μƒνƒœ 관리

  • TanStack Query (React Query) - μ„œλ²„ μƒνƒœ 관리 및 데이터 페칭
    • DevTools 포함
  • Orval - OpenAPI/Swaggerλ₯Ό ν†΅ν•œ API ν΄λΌμ΄μ–ΈνŠΈ μžλ™ 생성

ν…ŒμŠ€νŠΈ & 개발

  • Jest - JavaScript ν…ŒμŠ€νŠΈ ν”„λ ˆμž„μ›Œν¬
    • React Testing Library 포함
    • jsdom ν™˜κ²½ 지원
  • Storybook - UI μ»΄ν¬λ„ŒνŠΈ 개발 및 λ¬Έμ„œν™”
  • MSW (Mock Service Worker) - API λͺ¨ν‚Ή

μœ ν‹Έλ¦¬ν‹°

  • @faker-js/faker - ν…ŒμŠ€νŠΈ 데이터 생성
  • @svgr/webpack - SVGλ₯Ό React μ»΄ν¬λ„ŒνŠΈλ‘œ λ³€ν™˜

슀크립트

# 개발 μ„œλ²„ μ‹€ν–‰
npm run dev

# ν”„λ‘œλ•μ…˜ λΉŒλ“œ
npm run build

# ν”„λ‘œλ•μ…˜ μ„œλ²„ μ‹€ν–‰
npm start

# 린트 검사
npm run lint

# Storybook μ‹€ν–‰
npm run storybook

# Storybook λΉŒλ“œ
npm run build-storybook

# Orval API ν΄λΌμ΄μ–ΈνŠΈ 생성
npx orval

폴더 ꡬ쑰

my-app
β”œβ”€ πŸ“ public                            # 정적 파일
β”‚  └─ πŸ“ images                         # 이미지 파일 λͺ¨μŒ
β”‚
β”œβ”€ πŸ“ src
β”‚  β”œβ”€ πŸ“ api                            # API ν΄λΌμ΄μ–ΈνŠΈ
β”‚  β”‚  └─ httpClient.ts                   # Axios/Fetch μΈμŠ€ν„΄μŠ€
β”‚  β”‚
β”‚  β”œβ”€ πŸ“ app                            # Next.js App Router (page.tsx만 관리)
β”‚  β”‚  β”œβ”€ page.tsx                        # ν™ˆ νŽ˜μ΄μ§€
β”‚  β”‚  β”œβ”€ πŸ“ login
β”‚  β”‚  β”‚  └─ page.tsx                     # 둜그인 νŽ˜μ΄μ§€
β”‚  β”‚  └─ πŸ“ details
β”‚  β”‚     └─ πŸ“ [id]
β”‚  β”‚        └─ page.tsx                  # 상세 νŽ˜μ΄μ§€
β”‚  β”‚
β”‚  β”œβ”€ πŸ“ assets                         # 정적 λ¦¬μ†ŒμŠ€
β”‚  β”‚  β”œβ”€ πŸ“ fonts                       # 둜컬 폰트 파일
β”‚  β”‚  β”‚  └─ PretendardVariable.woff2
β”‚  β”‚  └─ πŸ“ icons                       # SVG μ•„μ΄μ½˜
β”‚  β”‚     └─ icon_check_blue.svg
β”‚  β”‚
β”‚  β”œβ”€ πŸ“ components                     # λͺ¨λ“  μ»΄ν¬λ„ŒνŠΈ 관리
β”‚  β”‚  β”œβ”€ πŸ“ common                      # 곡용 μ»΄ν¬λ„ŒνŠΈ
β”‚  β”‚  β”‚  β”œβ”€ πŸ“ Button
β”‚  β”‚  β”‚  β”‚  β”œβ”€ Button.test.tsx           # ν…ŒμŠ€νŠΈ 파일
β”‚  β”‚  β”‚  β”‚  └─ Button.tsx                # λ²„νŠΌ μ»΄ν¬λ„ŒνŠΈ
β”‚  β”‚  β”‚  β”œβ”€ πŸ“ Input
β”‚  β”‚  β”‚  β”‚  └─ Input.tsx
β”‚  β”‚  β”‚  └─ πŸ“ Modal
β”‚  β”‚  β”‚     └─ Modal.tsx
β”‚  β”‚  β”‚
β”‚  β”‚  └─ πŸ“ pages                       # νŽ˜μ΄μ§€ μ „μš© μ»΄ν¬λ„ŒνŠΈ
β”‚  β”‚     β”œβ”€ πŸ“ login                    # 둜그인 νŽ˜μ΄μ§€ μ»΄ν¬λ„ŒνŠΈ
β”‚  β”‚     β”‚  β”œβ”€ LoginForm.tsx
β”‚  β”‚     β”‚  └─ SocialLoginButtons.tsx
β”‚  β”‚     └─ πŸ“ details                  # 상세 νŽ˜μ΄μ§€ μ»΄ν¬λ„ŒνŠΈ
β”‚  β”‚        β”œβ”€ DetailsHeader.tsx
β”‚  β”‚        └─ DetailsContent.tsx
β”‚  β”‚
β”‚  β”œβ”€ πŸ“ lib                            # μœ ν‹Έλ¦¬ν‹° ν•¨μˆ˜ 및 μ„€μ •
β”‚  β”‚  β”œβ”€ feature.ts                      # κΈ°λŠ₯ ν”Œλž˜κ·Έ λ˜λŠ” μ„€μ •
β”‚  β”‚  β”œβ”€ queryClient.ts                  # React Query ν΄λΌμ΄μ–ΈνŠΈ μ„€μ •
β”‚  β”‚  └─ utils.ts                        # 곡톡 μœ ν‹Έλ¦¬ν‹° ν•¨μˆ˜
β”‚  β”‚
β”‚  β”œβ”€ πŸ“ mock                           # MSW λͺ¨ν‚Ή μ„€μ •
β”‚  β”‚  β”œβ”€ browser.ts                      # λΈŒλΌμš°μ €μš© MSW μ„€μ •
β”‚  β”‚  β”œβ”€ handlers.ts                     # API λͺ¨ν‚Ή ν•Έλ“€λŸ¬
β”‚  β”‚  └─ server.ts                       # μ„œλ²„μš© MSW μ„€μ • (ν…ŒμŠ€νŠΈ)
β”‚  β”‚
β”‚  β”œβ”€ πŸ“ providers                      # React Provider μ»΄ν¬λ„ŒνŠΈ
β”‚  β”‚  β”œβ”€ LazyMotionProvider.tsx          # Framer Motion μ§€μ—° λ‘œλ”©
β”‚  β”‚  β”œβ”€ MSWProvider.tsx                 # MSW μ΄ˆκΈ°ν™”
β”‚  β”‚  └─ QueryProvider.tsx               # React Query Provider
β”‚  β”‚
β”‚  β”œβ”€ πŸ“ stores                         # μ „μ—­ μƒνƒœ 관리 (Zustand)
β”‚  β”‚  β”œβ”€ useAuthStore.ts                 # 인증 μƒνƒœ
β”‚  β”‚  β”œβ”€ useModalStore.ts                # λͺ¨λ‹¬ μƒνƒœ
β”‚  β”‚  └─ useUserStore.ts                 # μ‚¬μš©μž 정보
β”‚  β”‚
β”‚  β”œβ”€ πŸ“ types                          # TypeScript νƒ€μž… μ •μ˜
β”‚  β”‚  β”œβ”€ api.ts                          # API 응닡 νƒ€μž…
β”‚  β”‚  β”œβ”€ common.ts                       # 곡톡 νƒ€μž…
β”‚  β”‚  └─ user.ts                         # μ‚¬μš©μž κ΄€λ ¨ νƒ€μž…
β”‚  β”‚
β”‚  └─ πŸ“ styles                         # CSS λͺ¨λ“ˆν™”
β”‚     β”œβ”€ animations.css                  # μ• λ‹ˆλ©”μ΄μ…˜ μ •μ˜
β”‚     β”œβ”€ base.css                        # κΈ°λ³Έ μŠ€νƒ€μΌ 리셋
β”‚     β”œβ”€ colors.css                      # 색상 λ³€μˆ˜
β”‚     β”œβ”€ layout.css                      # λ ˆμ΄μ•„μ›ƒ μœ ν‹Έλ¦¬ν‹°
β”‚     └─ typography.css                  # νƒ€μ΄ν¬κ·Έλž˜ν”Ό μ„€μ •

μ°Έκ³ 

ν”„λ‘œμ νŠΈ μ„ΈνŒ…μ€ Project Setup Guideλ₯Ό 기반으둜 μƒμ„±ν–ˆμŠ΅λ‹ˆλ‹€.