π Web App
κ°μ
apps/web
μ Next.js κΈ°λ°μ μΉ μ ν리μΌμ΄μ
μΌλ‘, Turborepo νκ²½μμ λ€μν λ΄λΆ ν¨ν€μ§(@repo/*
)λ₯Ό νμ©νλ μμ νλ‘μ νΈμ
λλ€. μ»΄ν¬λνΈ κΈ°λ° κ΅¬μ‘°, μ νΈλ¦¬ν° ν¨μ, Vitest κΈ°λ° ν
μ€νΈ νκ²½μ κ°μΆκ³ μμ΅λλ€.
μ΄ μν¬μ€νμ΄μ€λ Turborepo ν
νλ¦Ώβμ κΈ°λ³Έμ μΌλ‘ ν¬ν¨λμ΄ μλ Next.js μ±μ κΈ°λ°μΌλ‘ μμ±λμμ΅λλ€.
μ¬κΈ°μ μ 곡νλ κΈ°λ₯μ νμ₯νκ³ , μ΄ λͺ¨λ
Έλ ν¬ νλ‘μ νΈμ λ΄λΆ ν¨ν€μ§λ€μ ν΅ν©νμ¬ μ€μ μ ν리μΌμ΄μ
κ°λ°μ νμν ꡬ쑰λ₯Ό κ°μΆκΈ° μν μμμ μν μ ν©λλ€.
μ°Έκ³ : Turborepo Next.js ν
νλ¦Ώ > apps > webβ
π οΈ μ 곡 κΈ°λ₯
- Next.js κΈ°λ° SSR/CSR: μλ² μ¬μ΄λ λ λλ§(SSR)κ³Ό ν΄λΌμ΄μΈνΈ μ¬μ΄λ λ λλ§(CSR)μ λͺ¨λ μ§μν©λλ€.
- λ΄λΆ ν¨ν€μ§ ν΅ν©: Turborepoμ λ€μν λ΄λΆ ν¨ν€μ§(
@repo/*
)λ₯Ό νμ©νμ¬ UI, μ νΈλ¦¬ν°, API ν΄λΌμ΄μΈνΈ λ±μ ν΅ν©ν©λλ€. - μ»΄ν¬λνΈ κΈ°λ° κ΅¬μ‘°: μ¬μ¬μ© κ°λ₯ν μ»΄ν¬λνΈμ 컨ν μ΄λ ꡬ쑰λ₯Ό μ±ννμ¬ μ μ§λ³΄μμ±κ³Ό νμ₯μ±μ λμμ΅λλ€.
- νκ²½λ³ μ€μ λΆλ¦¬: κ°λ°/μ΄μ νκ²½μ λ°λΌ μ€μ νμΌμ λΆλ¦¬νμ¬ κ΄λ¦¬ν©λλ€.
- ν μ€νΈ μλν: Vitest κΈ°λ°μ μ λ/ν΅ν© ν μ€νΈ νκ²½μ μ 곡ν©λλ€.
- Docker μ§μ: Dockerfileμ ν΅ν΄ μμ½κ² λ°°ν¬ λ° ν μ€νΈ νκ²½μ ꡬμ±ν μ μμ΅λλ€.
π μ£Όμ λλ ν 리 ꡬ쑰
app/
: Next.js 13+ App Router κΈ°λ°μ νμ΄μ§ λ° λ μ΄μμ νμΌμ΄ μμΉν©λλ€.components/
: κ³΅ν΅ UI μ»΄ν¬λνΈκ° μμΉν©λλ€.containers/
: νμ΄μ§λ³ μ£Όμ 컨ν μ΄λ μ»΄ν¬λνΈκ° μμΉν©λλ€.configs/
: νκ²½λ³ μ€μ λ° κ³΅ν΅ μ€μ νμΌμ΄ μμΉν©λλ€.utils/
: μ νΈλ¦¬ν° ν¨μ λͺ¨μμ λλ€.tests/
: Vitest κΈ°λ° ν μ€νΈ μ½λκ° μμΉν©λλ€.public/
: μ μ μμ°(μ΄λ―Έμ§, ν°νΈ λ±)μ΄ μμΉν©λλ€.next.config.js
: Next.js μ€μ νμΌtsconfig.json
: TypeScript μ€μ νμΌvitest.config.ts
: Vitest ν μ€νΈ νκ²½ μ€μ νμΌ
βοΈ Next.js λ° Turborepo μ€μ
next.config.js
: Turborepo νκ²½μμ λ΄λΆ ν¨ν€μ§(@repo/*
)λ₯Ό aliasλ‘ μ°κ²°νμ¬ μ¬μ©ν μ μλλ‘ μ€μ ν©λλ€. νκ²½ λ³μ, μ΄λ―Έμ§ μ΅μ ν, μΈλΆ API νλ‘μ λ± λ€μν Next.js μ΅μ μ 컀μ€ν°λ§μ΄μ¦ν μ μμ΅λλ€.tsconfig.json
: Turborepoμ νμ μ€ν¬λ¦½νΈ λ² μ΄μ€ μ€μ μ μμλ°μ, κ²½λ‘ alias λ° strict μ΅μ μ μ μ©ν©λλ€.
π§ͺ Vitest ν μ€νΈ νκ²½
vitest.config.ts
: Next.js νκ²½μ λ§μΆ Vitest μ€μ νμΌλ‘, λ΄λΆ ν¨ν€μ§μμ ν΅ν© ν μ€νΈ, 컀μ€ν setup νμΌ, 컀λ²λ¦¬μ§ 리ν¬νΈ λ±μ μ§μν©λλ€.tests/
: μ€μ ν μ€νΈ μ½λμ ν μ€νΈ μ νΈλ¦¬ν°κ° μμΉν©λλ€.
π³ Dockerfile μ 곡
- Dockerfile: Next.js μ±μ νλ‘λμ λΉλ ν, Node.js νκ²½μμ μ€ννλ λ©ν°μ€ν μ΄μ§ Dockerfileμ μ 곡ν©λλ€. μμ‘΄μ± μ€μΉ, λΉλ, μ€ν λ¨κ³λ₯Ό λΆλ¦¬νμ¬ μ΅μ νν©λλ€.
Dockerfileμ νμ©νλ©΄ CI/CD νμ΄νλΌμΈμμ μμ½κ² Next.js μ±μ λΉλνκ³ λ°°ν¬ λλ ν
μ€νΈν μ μμ΅λλ€.
Dockerfile μ μ΄μ©ν μ€μ ν
μ€νΈ μμμ μ¬μ© μμλ μλμ 2 κ° λ¬Έμλ₯Ό μ°Έκ³ νμΈμ:
π μ°κ²°λ λ΄λΆ ν¨ν€μ§
μ΄ μ ν리μΌμ΄μ μ λ€μ Turborepo λ΄λΆ ν¨ν€μ§μ μ°λλ©λλ€:
dependencies
@repo/node-utils
: Node.js μ νΈλ¦¬ν° ν¨μ@repo/browser-utils
: λΈλΌμ°μ νκ²½ μ νΈλ¦¬ν°@repo/react-utils
: React μ νΈλ¦¬ν° ν¨μ λͺ¨μ@repo/react-ui
: κ³΅ν΅ UI μ»΄ν¬λνΈ λΌμ΄λΈλ¬λ¦¬@repo/http-clients
: API ν΄λΌμ΄μΈνΈ
devDependencies
@repo/eslint-config
: ESLint κ³΅ν΅ μ€μ @repo/typescript-config
: TypeScript κ³΅ν΅ μ€μ @repo/vitest-config
: Vitest κ³΅ν΅ μ€μ