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 λ©μμ§ κ·μΉ κ²μ¦
- 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 orvalmy-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λ₯Ό κΈ°λ°μΌλ‘ μμ±νμ΅λλ€.