π§ Overview
π κ°μ
turborepo-template
μ λͺ¨λ
Έλ ν¬ κ΄λ¦¬λ λΉλλ₯Ό λ¨μννλ €κ³ λ§λ ν
νλ¦Ώμ΄μμ. μ΄ ν
νλ¦Ώμ λ€μν μ±κ³Ό ν¨ν€μ§λ₯Ό ν¬ν¨νκ³ μμ΄μ, ν νμ
κ³Ό μμ°μ±μ λμ΄λ λ° λμμ μ€ κ±°μμ.
ποΈ μ£Όμ μΈλΆ ν¨ν€μ§/λꡬ μμ‘΄μ±
μ΄ ν νλ¦Ώμ κ°λ° νκ²½ ꡬμ±κ³Ό λΉλ νλ‘μΈμ€λ₯Ό κ°μννκΈ° μν΄ μ¬λ¬ μΈλΆ ν¨ν€μ§μ λꡬμ μμ‘΄νκ³ μμ΄μ. μλλ μ£Όμ μμ‘΄μ± λͺ©λ‘μ΄μμ:
μΉ΄ν κ³ λ¦¬ | ν¨ν€μ§/λꡬ μ΄λ¦ λ° μ€λͺ |
---|---|
ν¨ν€μ§ λ§€λμ | pnpm |
λͺ¨λ Έλ ν¬ κ΄λ¦¬ | turborepo (turbo) |
μΈμ΄/νΈλμ€νμΌλ¬ | typescript |
ν¬λ§·ν° | prettier |
컀λ°/ν | husky, @commitlint/cli, @commitlint/config-conventional |
λ¦°ν° | eslint |
ν μ€ν | vitest, @testing-library/react, @testing-library/dom, @testing-library/jest-dom, @testing-library/user-event, jsdom |
λΉλ/λ²λ€λ¬ | next, @vitejs/plugin-react, vite-tsconfig-paths |
UI νλ μμν¬ | react, react-dom |
E2E/μ±λ₯ν μ€νΈ | playwright, lighthouse, lighthouse-ci |
λ²μ λ | changesets |
λ¬Έμν | nextra, mdx |
π κ΅¬μ± μμ κ° κ΄κ³λ
μ΄ ν νλ¦Ώμ μ¬λ¬ μ±κ³Ό ν¨ν€μ§λ‘ ꡬμ±λΌ μμ΄μ. κ° μ±κ³Ό ν¨ν€μ§ κ°μ κ΄κ³λ μλμ λ€μ΄μ΄κ·Έλ¨μ μ°Έκ³ ν΄ μ£ΌμΈμ.
π‘ μ°Έκ³ : μ΄ λ€μ΄μ΄κ·Έλ¨μ Mermaidβλ₯Ό μ¬μ©ν΄μ κ·Έλ Έμ΄μ. μ΄ λꡬλ ν μ€νΈ κΈ°λ°μΌλ‘ λ€μ΄μ΄κ·Έλ¨μ 그릴 μ μκ² ν΄μ€μ. μλμ μ½λλ₯Ό 볡μ¬ν΄μ Mermaid Live Editorβμ λΆμ¬λ£μΌλ©΄ λ€μ΄μ΄κ·Έλ¨μ μκ°μ μΌλ‘ νμΈν μ μμ΄μ.
π¦ κ΅¬μ± μμ
π₯οΈ Apps
μ΄ μΉμ μ λ€μν μ ν리μΌμ΄μ μ ν¬ν¨νκ³ μμ΄μ. κ° μ±μ νΉμ λͺ©μ μ μν΄ μ€κ³λμμΌλ©°, Next.jsμ κ°μ μ΅μ κΈ°μ μ€νμ νμ©νκ³ μμ΄μ.
Empty Next App
: Next.jsλ₯Ό μ¬μ©ν λΉ μ ν리μΌμ΄μ ν νλ¦Ώμ΄μμ.Web
: Next.js κΈ°λ°μ μΉ μ ν리μΌμ΄μ μ΄μμ.Frontend Workshop
: μ»΄ν¬λνΈ κ°λ°μ΄λ ν μ€νΈλ₯Ό μν Storybook νκ²½μ΄μμ.Docs
: λ³Έ νλ‘μ νΈμ λν Next.js κΈ°λ°μ λ¬Έμν νλ‘μ νΈλ‘, Nextraλ₯Ό μ¬μ©ν΄μ μμ±λμμ΄μ.
π¦ Packages
μ΄ μΉμ
μ μ¬μ¬μ© κ°λ₯ν ν¨ν€μ§ λͺ¨μμ ν¬ν¨νκ³ μμ΄μ. κ° ν¨ν€μ§λ νΉμ κΈ°λ₯μ μ 곡νλ©°, λͺ¨λ
Έλ ν¬ κ΅¬μ‘°μμ λ
립μ μΌλ‘ κ΄λ¦¬λΌμ.
λν, μ΄κ³³μ μλ ν¨ν€μ§λ€ μ€ μΌλΆλ npmβμ λ°°ν¬λ μ μλλ‘ μ€μ λμ΄ μμ΄μ.
(π’: npmμ λ°°ν¬λλλ‘ μ€μ λ ν¨ν€μ§, π: npmμ λ°°ν¬λμ§ μλλ‘ μ€μ λ ν¨ν€μ§)
- π’
Browser Utils
: λΈλΌμ°μ κ΄λ ¨ μ νΈλ¦¬ν° ν¨μ λͺ¨μμ΄μμ. - π’
ESLint Plugin Sample
: μν ESLint νλ¬κ·ΈμΈμ΄μμ. - π
HTTP Clients
: HTTP μμ²μ μ²λ¦¬νλ €κ³ λ§λ ν΄λΌμ΄μΈνΈ λΌμ΄λΈλ¬λ¦¬μμ. - π’
Node Utils
: Node.js νκ²½μμ μΈ μ μλ μ νΈλ¦¬ν° ν¨μ λͺ¨μμ΄μμ. - π’
React UI
: React κΈ°λ° UI μ»΄ν¬λνΈ λΌμ΄λΈλ¬λ¦¬μμ. - π’
React Utils
: React μ ν리μΌμ΄μ μμ μΈ μ μλ μ νΈλ¦¬ν° ν¨μ λͺ¨μμ΄μμ.
π§© Shared
μ΄ μΉμ
μ νλ‘μ νΈ μ λ°μμ μ¬μ¬μ© κ°λ₯ν λ΄λΆ ν¨ν€μ§λ₯Ό ν¬ν¨νκ³ μμ΄μ. shared
λλ ν 리μ μλ ν¨ν€μ§λ€μ npmμ λ°°ν¬λμ§ μκ³ , λ΄λΆμ μΌλ‘λ§ μ¬μ©λΌμ.
Helpers
: νλ‘μ νΈ μ λ°μμ μ¬μ¬μ© κ°λ₯ν μ νΈλ¦¬ν° ν¨μμ κ³΅ν΅ λ‘μ§μ μ 곡νλ λ΄λΆ ν¨ν€μ§μμ.
π οΈ Tools
μ΄ μΉμ μ κ°λ° λ° ν μ€νΈλ₯Ό μ§μνλ λꡬλ€μ ν¬ν¨νκ³ μμ΄μ. κ° λꡬλ νΉμ μμ μ μλννκ±°λ κ°μννλ λ° λμμ μ€μ.
Playwright Web
: Playwright κΈ°λ°μ μΉ ν μ€νΈ λꡬμμ.CLI
: λͺ λ Ήμ€ μμ μ μλννκ³ νλ‘μ νΈ κ΄λ¦¬ λ° κ°λ°μ μ§μνκΈ° μν λꡬμμ.Lighthouse CI
: μΉ μ ν리μΌμ΄μ μ μ±λ₯, μ κ·Όμ±, SEO λ±μ μλμΌλ‘ μΈ‘μ νκ³ κ΄λ¦¬νκΈ° μν λꡬμμ.
βοΈ Configs
μ΄ μΉμ μ νλ‘μ νΈ μ λ°μμ μ¬μ©λλ κ³΅ν΅ μ€μ νμΌλ€μ ν¬ν¨νκ³ μμ΄μ. ESLint, TypeScript, Vitestμ κ°μ λꡬλ€μ μ€μ μ΄ ν¬ν¨λΌμ.
ESLint Config
: ESLint μ€μ μ μν κ³΅ν΅ κ΅¬μ±μ΄μμ.Playwright Config
: Playwright ν μ€νΈ μ€μ μ΄μμ.TypeScript Config
: TypeScript μ€μ μ μν κ³΅ν΅ κ΅¬μ±μ΄μμ.Vitest Config
: Vitest ν μ€νΈ μ€μ μ μν κ³΅ν΅ κ΅¬μ±μ΄μμ.
π Workflows
μ΄ νλ‘μ νΈλ λ€μκ³Ό κ°μ GitHub Actions Workflowλ₯Ό ν¬ν¨νκ³ μμ΄μ:
π§ͺ Test
test.yml
νμΌμ μ μλμ΄ μμΌλ©°, νλ‘μ νΈμ μ£Όμ ν
μ€νΈ(μ λ, E2E, Lighthouse, Storybook λ±)λ₯Ό ν΅ν©μ μΌλ‘ μ€νν΄μ.
μ΄ Workflowλ λ€μκ³Ό κ°μ ν
μ€νΈλ₯Ό ν¬ν¨ν΄μ:
(π³λ GitHub Actionsμμ Docker 컨ν
μ΄λλ₯Ό μ¬μ©ν΄μ μ€νλλ ν
μ€νΈλ₯Ό μλ―Έν΄μ)
π Release
release.yml
νμΌμ μ μλμ΄ μμΌλ©°, Changesetsλ₯Ό κΈ°λ°μΌλ‘ ν¨ν€μ§ λ°°ν¬λ₯Ό μλνν΄μ.
- μ΄ Workflowλ Changesets λ΄μ μ¬μ©ν΄μ PRμ μμ±νκ³ , λ³κ²½ μ¬νμ μλμΌλ‘ μΆμ ν΄μ.
- PRμ μΉμΈνλ©΄, λ³κ²½λ ν¨ν€μ§μ λ²μ μ΄ μ λ°μ΄νΈλκ³ , CHANGELOG.md νμΌμ΄ μμ±λΌμ.
- κ·Έλ¦¬κ³ μΉμΈλ PRμ΄ λ³ν©λλ©΄μ μ€νλλ Workflowμ μν΄, NPM_TOKENμ μ¬μ©νμ¬ npmμ ν¨ν€μ§κ° λ°°ν¬λΌμ.
π Publish GitHub Pages
publish-github-pages.yml
νμΌμ μ μλμ΄ μμΌλ©°, docs μ±μ GitHub Pagesμ λ°°ν¬ν΄μ.
π CI/CD with GitHub
μ΄ νλ‘μ νΈλ λ°°ν¬ λ° ν μ€νΈλ₯Ό μλννκΈ° μν΄ GitHubμ μ¬λ¬ κΈ°λ₯μ νμ©νκ³ μμ΄μ. μλλ μ£Όμ κΈ°λ₯κ³Ό μ€μ λ°©λ²μ΄μμ:
π³ GitHub Container Registry
μΌλΆ docker-compose
κΈ°λ° μν¬νλ‘μ°(μ: Storybook, E2E, Lighthouse ν
μ€νΈ)μμλ Docker μ΄λ―Έμ§ λΉλ μ GitHub Container Registry(GHCR)βλ₯Ό νμ©ν΄μ μ΄λ―Έμ§ λ μ΄μ΄λ₯Ό μΊμ±ν΄μ.
μ΄λ κ² νλ©΄ μν¬νλ‘μ° μ€ν μλλ₯Ό λμ΄κ³ , λΆνμν λΉλ λΉμ©μ μ€μΌ μ μμ΄μ.
π GitHub Pages
μ΄ νλ‘μ νΈλ GitHub Pagesλ₯Ό μ¬μ©ν΄μ docs
μ±μ λ°°ν¬νκ³ μμ΄μ.
GitHub Pages λ°°ν¬κ° μ μμ μΌλ‘ λμνλ €λ©΄ Settingsμμ Pagesλ₯Ό νμ±νν΄μΌ ν΄μ.
π¬ Giscus GitHub App
μ΄ νλ‘μ νΈλ Giscusλ₯Ό μ¬μ©ν΄μ GitHub Discussionsμ λ¬Έμν μ±μ ν΅ν©νκ³ μμ΄μ. Giscusλ GitHub Discussionsλ₯Ό κΈ°λ°μΌλ‘ νλ λκΈ μμ€ν μΌλ‘, λ¬Έμμ λκΈμ λ¬ μ μκ² ν΄μ€μ.
πΌ Lighthouse CI GitHub App
Lighthouse ν
μ€νΈκ° μ μμ μΌλ‘ λμνλ €λ©΄ GitHub Secretsμ LHCI_GITHUB_APP_TOKEN
λ³μλ₯Ό λ°λμ λ±λ‘ν΄μΌ ν΄μ.
μ΄ ν ν°μ Lighthouse CIκ° GitHub PRκ³Ό μ°λλμ΄ κ²°κ³Όλ₯Ό λ³΄κ³ νκ±°λ μν 체ν¬λ₯Ό μνν λ νμν΄μ.
π¦ ν¨ν€μ§ λ²μ λ λ° λ°°ν¬
μ΄ νλ‘μ νΈλ Changesetsβλ₯Ό μ¬μ©νμ¬ ν¨ν€μ§ λ²μ κ΄λ¦¬μ λ°°ν¬λ₯Ό κ°μννκ³ μμ΄μ. Changesetsλ λͺ¨λ Έλ ν¬ νκ²½μμ νΉν μ μ©νλ©°, κ° ν¨ν€μ§μ λ³κ²½ μ¬νμ μΆμ νκ³ μ΄λ₯Ό κΈ°λ°μΌλ‘ λ²μ μ μ λ°μ΄νΈν μ μλλ‘ λμμ€μ.
β¬οΈ μμ‘΄μ± μ€μΉ
pnpm μ€μΉ
pnpm install
π§βπ» μ¬μ©λ²
CLI μ¬μ©
pnpm install
μ μ€ννλ©΄ tools/cli
μ μ μλ CLI λͺ
λ Ήμ΄λ€μ λ°λ‘ μ¬μ©ν μ μμ΄μ.
example --ls [directory-path]
example --mkdir <directory-name>
example --touch <file-name>
λΉλ
pnpm build
κ°λ° μλ² μ€ν
pnpm dev
μ격 μΊμ± μ€μ (Optional)
νμμ λ°λΌ Turborepo 곡μ λ¬Έμβλ₯Ό μ°Έκ³ νμ¬ μ격 μΊμ±μ μ¬μ©νλλ‘ μ€μ ν μ μμ΄μ.
npx turbo login
npx turbo link
π€ κΈ°μ¬
μ΄ ν νλ¦Ώμ κΈ°μ¬νλ €λ©΄, CONTRIBUTING.mdλ₯Ό μ°Έκ³ ν΄ μ£ΌμΈμ.
π λΌμ΄μ μ€
μ΄ νλ‘μ νΈλ MIT λΌμ΄μ μ€ νμ λ°°ν¬λΌμ.