Skip to Content
Nextra 4.0 is released πŸŽ‰

🧭 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 λΌμ΄μ„ μŠ€ ν•˜μ— λ°°ν¬λΌμš”.


Last updated on