{"componentChunkName":"component---src-templates-blog-post-js","path":"/etc/모노레포-Monorepo-완전정복-Turborepo와-Nx로-대규모-프로젝트-관리하기/","result":{"data":{"site":{"siteMetadata":{"title":"Bottlehs Tech Blog","description":"웹·앱·AI 개발자 전병훈(bottlehs)의 기술 블로그. AI·LLM, JavaScript·Vue, Spring Boot, 알고리즘, 블록체인 실무 가이드를 다룹니다","siteUrl":"https://www.bottlehs.dev","author":{"name":"Jeon Byung Hun","summary":"개발을 즐기는 bottlehs - Engineer, MS, AI, FE, BE, OS, IOT, Blockchain, 설계, 테스트"},"social":{"github":"bottlehs","codepen":"bottlehs"}}},"markdownRemark":{"id":"2ea22c84-577c-5c64-be98-af8f0a9a2f50","excerpt":"모노레포 완전정복 모노레포(Monorepo)는 여러 프로젝트를 하나의 저장소에서 관리하는 방식이다. 코드 공유, 일관성 유지, 대규모 프로젝트 관리에 효과적이다. 이 글은 모노레포의 개념부터 Turborepo, Nx 등 주요 도구를 활용한 실전 구축까지 완벽하게 정리한다.…","html":"<p><img src=\"/assets/etc.png\" alt=\"모노레포 완전정복\" title=\"모노레포 완전정복\"></p>\n<p>모노레포(Monorepo)는 여러 프로젝트를 하나의 저장소에서 관리하는 방식이다. 코드 공유, 일관성 유지, 대규모 프로젝트 관리에 효과적이다. 이 글은 모노레포의 개념부터 Turborepo, Nx 등 주요 도구를 활용한 실전 구축까지 완벽하게 정리한다.</p>\n<h2 id=\"1-모노레포란-무엇인가\" style=\"position:relative;\"><a href=\"#1-%EB%AA%A8%EB%85%B8%EB%A0%88%ED%8F%AC%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80\" aria-label=\"1 모노레포란 무엇인가 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1. 모노레포란 무엇인가?</h2>\n<h3 id=\"1-1-기본-개념\" style=\"position:relative;\"><a href=\"#1-1-%EA%B8%B0%EB%B3%B8-%EA%B0%9C%EB%85%90\" aria-label=\"1 1 기본 개념 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1-1. 기본 개념</h3>\n<p>모노레포(Monorepo)는 “Monolithic Repository”의 줄임말로, 여러 프로젝트나 패키지를 하나의 Git 저장소에서 관리하는 방식이다.</p>\n<p><strong>전통적인 멀티레포 (Multi-repo):</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">company/\n├── frontend/          (별도 저장소)\n├── backend/          (별도 저장소)\n├── shared-library/   (별도 저장소)\n└── mobile/           (별도 저장소)</code></pre></div>\n<p><strong>모노레포 (Monorepo):</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">company/\n├── apps/\n│   ├── frontend/\n│   ├── backend/\n│   └── mobile/\n├── packages/\n│   ├── shared-ui/\n│   ├── shared-utils/\n│   └── shared-types/\n└── package.json</code></pre></div>\n<h3 id=\"1-2-모노레포의-장단점\" style=\"position:relative;\"><a href=\"#1-2-%EB%AA%A8%EB%85%B8%EB%A0%88%ED%8F%AC%EC%9D%98-%EC%9E%A5%EB%8B%A8%EC%A0%90\" aria-label=\"1 2 모노레포의 장단점 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1-2. 모노레포의 장단점</h3>\n<p><strong>장점:</strong></p>\n<ul>\n<li><strong>코드 공유 용이</strong>: 패키지 간 코드 공유가 쉬움</li>\n<li><strong>일관성 유지</strong>: 공통 설정, 린팅 규칙 통일</li>\n<li><strong>원자적 변경</strong>: 여러 패키지를 한 커밋으로 변경</li>\n<li><strong>리팩토링 용이</strong>: 전체 코드베이스에서 안전하게 리팩토링</li>\n<li><strong>의존성 관리</strong>: 버전 충돌 방지</li>\n</ul>\n<p><strong>단점:</strong></p>\n<ul>\n<li><strong>저장소 크기</strong>: 큰 저장소로 인한 클론 시간 증가</li>\n<li><strong>권한 관리</strong>: 세밀한 권한 제어 어려움</li>\n<li><strong>빌드 복잡도</strong>: 빌드 시스템 복잡도 증가</li>\n<li><strong>CI/CD 복잡도</strong>: 변경된 패키지만 빌드하는 로직 필요</li>\n</ul>\n<h3 id=\"1-3-모노레포-사용-사례\" style=\"position:relative;\"><a href=\"#1-3-%EB%AA%A8%EB%85%B8%EB%A0%88%ED%8F%AC-%EC%82%AC%EC%9A%A9-%EC%82%AC%EB%A1%80\" aria-label=\"1 3 모노레포 사용 사례 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1-3. 모노레포 사용 사례</h3>\n<p><strong>적합한 경우:</strong></p>\n<ul>\n<li>여러 관련 프로젝트 관리</li>\n<li>코드 공유가 많은 프로젝트</li>\n<li>대규모 팀 협업</li>\n<li>마이크로서비스 아키텍처</li>\n</ul>\n<p><strong>부적합한 경우:</strong></p>\n<ul>\n<li>완전히 독립적인 프로젝트</li>\n<li>작은 규모의 프로젝트</li>\n<li>외부 오픈소스 프로젝트</li>\n</ul>\n<h2 id=\"2-주요-모노레포-도구-비교\" style=\"position:relative;\"><a href=\"#2-%EC%A3%BC%EC%9A%94-%EB%AA%A8%EB%85%B8%EB%A0%88%ED%8F%AC-%EB%8F%84%EA%B5%AC-%EB%B9%84%EA%B5%90\" aria-label=\"2 주요 모노레포 도구 비교 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2. 주요 모노레포 도구 비교</h2>\n<h3 id=\"2-1-도구-개요\" style=\"position:relative;\"><a href=\"#2-1-%EB%8F%84%EA%B5%AC-%EA%B0%9C%EC%9A%94\" aria-label=\"2 1 도구 개요 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2-1. 도구 개요</h3>\n<table>\n<thead>\n<tr>\n<th>도구</th>\n<th>특징</th>\n<th>장점</th>\n<th>단점</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>Turborepo</strong></td>\n<td>Vercel 개발, 빌드 시스템</td>\n<td>빠른 빌드, 캐싱 우수</td>\n<td>상대적으로 새로움</td>\n</tr>\n<tr>\n<td><strong>Nx</strong></td>\n<td>Nrwl 개발, 엔터프라이즈급</td>\n<td>강력한 기능, 플러그인</td>\n<td>학습 곡선 높음</td>\n</tr>\n<tr>\n<td><strong>Lerna</strong></td>\n<td>전통적인 도구</td>\n<td>간단함, 널리 사용</td>\n<td>성능 제한적</td>\n</tr>\n<tr>\n<td><strong>pnpm workspaces</strong></td>\n<td>패키지 매니저 통합</td>\n<td>간단한 설정</td>\n<td>고급 기능 제한적</td>\n</tr>\n<tr>\n<td><strong>Yarn workspaces</strong></td>\n<td>Yarn 통합</td>\n<td>안정적</td>\n<td>Yarn에 종속</td>\n</tr>\n</tbody>\n</table>\n<h3 id=\"2-2-선택-가이드\" style=\"position:relative;\"><a href=\"#2-2-%EC%84%A0%ED%83%9D-%EA%B0%80%EC%9D%B4%EB%93%9C\" aria-label=\"2 2 선택 가이드 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2-2. 선택 가이드</h3>\n<p><strong>Turborepo 추천:</strong></p>\n<ul>\n<li>빠른 빌드 속도 중요</li>\n<li>간단한 설정 선호</li>\n<li>Next.js, React 프로젝트</li>\n</ul>\n<p><strong>Nx 추천:</strong></p>\n<ul>\n<li>대규모 엔터프라이즈 프로젝트</li>\n<li>강력한 도구 필요</li>\n<li>다양한 프레임워크 지원 필요</li>\n</ul>\n<p><strong>Lerna 추천:</strong></p>\n<ul>\n<li>기존 프로젝트 마이그레이션</li>\n<li>간단한 패키지 관리만 필요</li>\n</ul>\n<h2 id=\"3-turborepo-실전-가이드\" style=\"position:relative;\"><a href=\"#3-turborepo-%EC%8B%A4%EC%A0%84-%EA%B0%80%EC%9D%B4%EB%93%9C\" aria-label=\"3 turborepo 실전 가이드 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3. Turborepo 실전 가이드</h2>\n<h3 id=\"3-1-프로젝트-구조\" style=\"position:relative;\"><a href=\"#3-1-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B5%AC%EC%A1%B0\" aria-label=\"3 1 프로젝트 구조 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3-1. 프로젝트 구조</h3>\n<p><strong>기본 구조:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">my-monorepo/\n├── apps/\n│   ├── web/              # Next.js 앱\n│   ├── admin/            # React 앱\n│   └── api/              # Node.js API\n├── packages/\n│   ├── ui/               # 공유 UI 컴포넌트\n│   ├── utils/            # 유틸리티 함수\n│   └── config/           # 공유 설정\n├── package.json\n├── turbo.json            # Turborepo 설정\n└── pnpm-workspace.yaml   # pnpm workspaces 설정</code></pre></div>\n<h3 id=\"3-2-초기-설정\" style=\"position:relative;\"><a href=\"#3-2-%EC%B4%88%EA%B8%B0-%EC%84%A4%EC%A0%95\" aria-label=\"3 2 초기 설정 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3-2. 초기 설정</h3>\n<p><strong>루트 package.json:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"json\"><pre class=\"language-json\"><code class=\"language-json\"><span class=\"token punctuation\">{</span>\n  <span class=\"token property\">\"name\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"my-monorepo\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token property\">\"private\"</span><span class=\"token operator\">:</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">,</span>\n  <span class=\"token property\">\"workspaces\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\n    <span class=\"token string\">\"apps/*\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token string\">\"packages/*\"</span>\n  <span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n  <span class=\"token property\">\"scripts\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token property\">\"dev\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"turbo run dev\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"build\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"turbo run build\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"test\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"turbo run test\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"lint\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"turbo run lint\"</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n  <span class=\"token property\">\"devDependencies\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token property\">\"turbo\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"^1.10.0\"</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p><strong>turbo.json:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"json\"><pre class=\"language-json\"><code class=\"language-json\"><span class=\"token punctuation\">{</span>\n  <span class=\"token property\">\"$schema\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"https://turbo.build/schema.json\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token property\">\"pipeline\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token property\">\"build\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token property\">\"dependsOn\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span><span class=\"token string\">\"^build\"</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n      <span class=\"token property\">\"outputs\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span><span class=\"token string\">\".next/**\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"dist/**\"</span><span class=\"token punctuation\">]</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"dev\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token property\">\"cache\"</span><span class=\"token operator\">:</span> <span class=\"token boolean\">false</span><span class=\"token punctuation\">,</span>\n      <span class=\"token property\">\"persistent\"</span><span class=\"token operator\">:</span> <span class=\"token boolean\">true</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"test\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token property\">\"dependsOn\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span><span class=\"token string\">\"build\"</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n      <span class=\"token property\">\"outputs\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"lint\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token property\">\"outputs\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h3 id=\"3-3-앱-생성\" style=\"position:relative;\"><a href=\"#3-3-%EC%95%B1-%EC%83%9D%EC%84%B1\" aria-label=\"3 3 앱 생성 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3-3. 앱 생성</h3>\n<p><strong>apps/web/package.json:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"json\"><pre class=\"language-json\"><code class=\"language-json\"><span class=\"token punctuation\">{</span>\n  <span class=\"token property\">\"name\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"web\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token property\">\"version\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"1.0.0\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token property\">\"private\"</span><span class=\"token operator\">:</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">,</span>\n  <span class=\"token property\">\"scripts\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token property\">\"dev\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"next dev\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"build\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"next build\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"start\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"next start\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"lint\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"next lint\"</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n  <span class=\"token property\">\"dependencies\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token property\">\"next\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"^14.0.0\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"react\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"^18.0.0\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"react-dom\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"^18.0.0\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"@my-monorepo/ui\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"workspace:*\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"@my-monorepo/utils\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"workspace:*\"</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p><strong>apps/web/next.config.js:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> <span class=\"token punctuation\">{</span> createVanillaExtractPlugin <span class=\"token punctuation\">}</span> <span class=\"token operator\">=</span> <span class=\"token function\">require</span><span class=\"token punctuation\">(</span><span class=\"token string\">'@vanilla-extract/next-plugin'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">const</span> withVanillaExtract <span class=\"token operator\">=</span> <span class=\"token function\">createVanillaExtractPlugin</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">/** @type {import('next').NextConfig} */</span>\n<span class=\"token keyword\">const</span> nextConfig <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token literal-property property\">transpilePackages</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span><span class=\"token string\">'@my-monorepo/ui'</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n\nmodule<span class=\"token punctuation\">.</span>exports <span class=\"token operator\">=</span> <span class=\"token function\">withVanillaExtract</span><span class=\"token punctuation\">(</span>nextConfig<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<h3 id=\"3-4-패키지-생성\" style=\"position:relative;\"><a href=\"#3-4-%ED%8C%A8%ED%82%A4%EC%A7%80-%EC%83%9D%EC%84%B1\" aria-label=\"3 4 패키지 생성 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3-4. 패키지 생성</h3>\n<p><strong>packages/ui/package.json:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"json\"><pre class=\"language-json\"><code class=\"language-json\"><span class=\"token punctuation\">{</span>\n  <span class=\"token property\">\"name\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"@my-monorepo/ui\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token property\">\"version\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"1.0.0\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token property\">\"main\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"./index.tsx\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token property\">\"types\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"./index.tsx\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token property\">\"scripts\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token property\">\"build\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"tsc\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"dev\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"tsc --watch\"</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n  <span class=\"token property\">\"dependencies\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token property\">\"react\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"^18.0.0\"</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n  <span class=\"token property\">\"devDependencies\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token property\">\"@types/react\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"^18.0.0\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"typescript\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"^5.0.0\"</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p><strong>packages/ui/Button.tsx:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"typescript\"><pre class=\"language-typescript\"><code class=\"language-typescript\"><span class=\"token keyword\">import</span> React <span class=\"token keyword\">from</span> <span class=\"token string\">'react'</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">interface</span> <span class=\"token class-name\">ButtonProps</span> <span class=\"token punctuation\">{</span>\n  children<span class=\"token operator\">:</span> React<span class=\"token punctuation\">.</span>ReactNode<span class=\"token punctuation\">;</span>\n  onClick<span class=\"token operator\">?</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token keyword\">void</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">const</span> Button<span class=\"token operator\">:</span> React<span class=\"token punctuation\">.</span><span class=\"token constant\">FC</span><span class=\"token operator\">&lt;</span>ButtonProps<span class=\"token operator\">></span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span> children<span class=\"token punctuation\">,</span> onClick <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span>\n    <span class=\"token operator\">&lt;</span>button\n      onClick<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span>onClick<span class=\"token punctuation\">}</span>\n      className<span class=\"token operator\">=</span><span class=\"token string\">\"px-4 py-2 bg-blue-500 text-white rounded\"</span>\n    <span class=\"token operator\">></span>\n      <span class=\"token punctuation\">{</span>children<span class=\"token punctuation\">}</span>\n    <span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>button<span class=\"token operator\">></span>\n  <span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p><strong>packages/ui/index.tsx:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"typescript\"><pre class=\"language-typescript\"><code class=\"language-typescript\"><span class=\"token keyword\">export</span> <span class=\"token punctuation\">{</span> Button <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'./Button'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">type</span> <span class=\"token punctuation\">{</span> ButtonProps <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'./Button'</span><span class=\"token punctuation\">;</span></code></pre></div>\n<h3 id=\"3-5-패키지-사용\" style=\"position:relative;\"><a href=\"#3-5-%ED%8C%A8%ED%82%A4%EC%A7%80-%EC%82%AC%EC%9A%A9\" aria-label=\"3 5 패키지 사용 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3-5. 패키지 사용</h3>\n<p><strong>apps/web/app/page.tsx:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"typescript\"><pre class=\"language-typescript\"><code class=\"language-typescript\"><span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> Button <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'@my-monorepo/ui'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> formatDate <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'@my-monorepo/utils'</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">default</span> <span class=\"token keyword\">function</span> <span class=\"token function\">Home</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span>\n    <span class=\"token operator\">&lt;</span>div<span class=\"token operator\">></span>\n      <span class=\"token operator\">&lt;</span>h1<span class=\"token operator\">></span>Welcome<span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>h1<span class=\"token operator\">></span>\n      <span class=\"token operator\">&lt;</span>p<span class=\"token operator\">></span>Today <span class=\"token keyword\">is</span> <span class=\"token punctuation\">{</span><span class=\"token function\">formatDate</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">new</span> <span class=\"token class-name\">Date</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">}</span><span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>p<span class=\"token operator\">></span>\n      <span class=\"token operator\">&lt;</span>Button onClick<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token function\">alert</span><span class=\"token punctuation\">(</span><span class=\"token string\">'Clicked!'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">}</span><span class=\"token operator\">></span>\n        Click Me\n      <span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>Button<span class=\"token operator\">></span>\n    <span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>div<span class=\"token operator\">></span>\n  <span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h3 id=\"3-6-빌드-및-실행\" style=\"position:relative;\"><a href=\"#3-6-%EB%B9%8C%EB%93%9C-%EB%B0%8F-%EC%8B%A4%ED%96%89\" aria-label=\"3 6 빌드 및 실행 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3-6. 빌드 및 실행</h3>\n<p><strong>개발 모드:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\"><span class=\"token comment\"># 모든 앱 실행</span>\n<span class=\"token function\">pnpm</span> dev\n\n<span class=\"token comment\"># 특정 앱만 실행</span>\n<span class=\"token function\">pnpm</span> <span class=\"token parameter variable\">--filter</span> web dev</code></pre></div>\n<p><strong>빌드:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\"><span class=\"token comment\"># 모든 패키지 빌드</span>\n<span class=\"token function\">pnpm</span> build\n\n<span class=\"token comment\"># 특정 패키지만 빌드</span>\n<span class=\"token function\">pnpm</span> <span class=\"token parameter variable\">--filter</span> web build</code></pre></div>\n<p><strong>캐싱:</strong></p>\n<ul>\n<li>Turborepo는 자동으로 빌드 결과를 캐싱</li>\n<li>변경되지 않은 패키지는 재빌드하지 않음</li>\n<li>CI/CD에서도 캐싱 활용 가능</li>\n</ul>\n<h2 id=\"4-nx-실전-가이드\" style=\"position:relative;\"><a href=\"#4-nx-%EC%8B%A4%EC%A0%84-%EA%B0%80%EC%9D%B4%EB%93%9C\" aria-label=\"4 nx 실전 가이드 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>4. Nx 실전 가이드</h2>\n<h3 id=\"4-1-프로젝트-초기화\" style=\"position:relative;\"><a href=\"#4-1-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%B4%88%EA%B8%B0%ED%99%94\" aria-label=\"4 1 프로젝트 초기화 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>4-1. 프로젝트 초기화</h3>\n<p><strong>Nx 설치:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">npx create-nx-workspace@latest my-monorepo</code></pre></div>\n<p><strong>기본 구조:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">my-monorepo/\n├── apps/\n│   ├── web/\n│   └── api/\n├── libs/\n│   ├── ui/\n│   └── utils/\n├── nx.json\n├── workspace.json\n└── package.json</code></pre></div>\n<h3 id=\"4-2-앱-생성\" style=\"position:relative;\"><a href=\"#4-2-%EC%95%B1-%EC%83%9D%EC%84%B1\" aria-label=\"4 2 앱 생성 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>4-2. 앱 생성</h3>\n<p><strong>Next.js 앱 생성:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">nx generate @nx/next:application web</code></pre></div>\n<p><strong>React 라이브러리 생성:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">nx generate @nx/react:library ui <span class=\"token parameter variable\">--directory</span><span class=\"token operator\">=</span>libs/ui</code></pre></div>\n<h3 id=\"4-3-태스크-실행\" style=\"position:relative;\"><a href=\"#4-3-%ED%83%9C%EC%8A%A4%ED%81%AC-%EC%8B%A4%ED%96%89\" aria-label=\"4 3 태스크 실행 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>4-3. 태스크 실행</h3>\n<p><strong>개발 서버:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">nx serve web</code></pre></div>\n<p><strong>빌드:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">nx build web</code></pre></div>\n<p><strong>테스트:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">nx <span class=\"token builtin class-name\">test</span> web</code></pre></div>\n<p><strong>의존성 그래프:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">nx graph</code></pre></div>\n<h3 id=\"4-4-영향을-받는-프로젝트만-빌드\" style=\"position:relative;\"><a href=\"#4-4-%EC%98%81%ED%96%A5%EC%9D%84-%EB%B0%9B%EB%8A%94-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%EB%A7%8C-%EB%B9%8C%EB%93%9C\" aria-label=\"4 4 영향을 받는 프로젝트만 빌드 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>4-4. 영향을 받는 프로젝트만 빌드</h3>\n<p><strong>영향 분석:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\"><span class=\"token comment\"># 변경된 프로젝트 확인</span>\nnx affected:graph\n\n<span class=\"token comment\"># 영향받는 프로젝트만 빌드</span>\nnx affected:build\n\n<span class=\"token comment\"># 영향받는 프로젝트만 테스트</span>\nnx affected:test</code></pre></div>\n<h2 id=\"5-패키지-간-의존성-관리\" style=\"position:relative;\"><a href=\"#5-%ED%8C%A8%ED%82%A4%EC%A7%80-%EA%B0%84-%EC%9D%98%EC%A1%B4%EC%84%B1-%EA%B4%80%EB%A6%AC\" aria-label=\"5 패키지 간 의존성 관리 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>5. 패키지 간 의존성 관리</h2>\n<h3 id=\"5-1-내부-패키지-참조\" style=\"position:relative;\"><a href=\"#5-1-%EB%82%B4%EB%B6%80-%ED%8C%A8%ED%82%A4%EC%A7%80-%EC%B0%B8%EC%A1%B0\" aria-label=\"5 1 내부 패키지 참조 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>5-1. 내부 패키지 참조</h3>\n<p><strong>package.json에서:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"json\"><pre class=\"language-json\"><code class=\"language-json\"><span class=\"token punctuation\">{</span>\n  <span class=\"token property\">\"dependencies\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token property\">\"@my-monorepo/ui\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"workspace:*\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"@my-monorepo/utils\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"workspace:*\"</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p><strong>TypeScript 경로 매핑:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"json\"><pre class=\"language-json\"><code class=\"language-json\"><span class=\"token punctuation\">{</span>\n  <span class=\"token property\">\"compilerOptions\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token property\">\"paths\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token property\">\"@my-monorepo/ui\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span><span class=\"token string\">\"./packages/ui\"</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n      <span class=\"token property\">\"@my-monorepo/utils\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span><span class=\"token string\">\"./packages/utils\"</span><span class=\"token punctuation\">]</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h3 id=\"5-2-버전-관리\" style=\"position:relative;\"><a href=\"#5-2-%EB%B2%84%EC%A0%84-%EA%B4%80%EB%A6%AC\" aria-label=\"5 2 버전 관리 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>5-2. 버전 관리</h3>\n<p><strong>버전 동기화:</strong></p>\n<ul>\n<li>모든 패키지 버전을 동일하게 유지</li>\n<li>또는 독립적으로 버전 관리</li>\n</ul>\n<p><strong>Lerna를 사용한 버전 관리:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"json\"><pre class=\"language-json\"><code class=\"language-json\"><span class=\"token punctuation\">{</span>\n  <span class=\"token property\">\"version\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"independent\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token property\">\"packages\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span><span class=\"token string\">\"packages/*\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"apps/*\"</span><span class=\"token punctuation\">]</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h2 id=\"6-cicd-통합\" style=\"position:relative;\"><a href=\"#6-cicd-%ED%86%B5%ED%95%A9\" aria-label=\"6 cicd 통합 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>6. CI/CD 통합</h2>\n<h3 id=\"6-1-github-actions-turborepo\" style=\"position:relative;\"><a href=\"#6-1-github-actions-turborepo\" aria-label=\"6 1 github actions turborepo permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>6-1. GitHub Actions (Turborepo)</h3>\n<p><strong>.github/workflows/ci.yml:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"yaml\"><pre class=\"language-yaml\"><code class=\"language-yaml\"><span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> CI\n\n<span class=\"token key atrule\">on</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">push</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">branches</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">[</span>main<span class=\"token punctuation\">]</span>\n  <span class=\"token key atrule\">pull_request</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">branches</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">[</span>main<span class=\"token punctuation\">]</span>\n\n<span class=\"token key atrule\">jobs</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">build</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">runs-on</span><span class=\"token punctuation\">:</span> ubuntu<span class=\"token punctuation\">-</span>latest\n    <span class=\"token key atrule\">steps</span><span class=\"token punctuation\">:</span>\n      <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">uses</span><span class=\"token punctuation\">:</span> actions/checkout@v3\n      \n      <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> Setup Node.js\n        <span class=\"token key atrule\">uses</span><span class=\"token punctuation\">:</span> actions/setup<span class=\"token punctuation\">-</span>node@v3\n        <span class=\"token key atrule\">with</span><span class=\"token punctuation\">:</span>\n          <span class=\"token key atrule\">node-version</span><span class=\"token punctuation\">:</span> <span class=\"token string\">'20'</span>\n      \n      <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> Setup pnpm\n        <span class=\"token key atrule\">uses</span><span class=\"token punctuation\">:</span> pnpm/action<span class=\"token punctuation\">-</span>setup@v2\n        <span class=\"token key atrule\">with</span><span class=\"token punctuation\">:</span>\n          <span class=\"token key atrule\">version</span><span class=\"token punctuation\">:</span> <span class=\"token number\">8</span>\n      \n      <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> Install dependencies\n        <span class=\"token key atrule\">run</span><span class=\"token punctuation\">:</span> pnpm install\n      \n      <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> Build\n        <span class=\"token key atrule\">run</span><span class=\"token punctuation\">:</span> pnpm build\n      \n      <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> Test\n        <span class=\"token key atrule\">run</span><span class=\"token punctuation\">:</span> pnpm test</code></pre></div>\n<h3 id=\"6-2-변경된-패키지만-빌드\" style=\"position:relative;\"><a href=\"#6-2-%EB%B3%80%EA%B2%BD%EB%90%9C-%ED%8C%A8%ED%82%A4%EC%A7%80%EB%A7%8C-%EB%B9%8C%EB%93%9C\" aria-label=\"6 2 변경된 패키지만 빌드 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>6-2. 변경된 패키지만 빌드</h3>\n<p><strong>Turborepo:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"yaml\"><pre class=\"language-yaml\"><code class=\"language-yaml\"><span class=\"token punctuation\">-</span> <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> Build changed packages\n  <span class=\"token key atrule\">run</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">|</span><span class=\"token scalar string\">\n    pnpm turbo build --filter='...[origin/main]'</span></code></pre></div>\n<p><strong>Nx:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"yaml\"><pre class=\"language-yaml\"><code class=\"language-yaml\"><span class=\"token punctuation\">-</span> <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> Build affected\n  <span class=\"token key atrule\">run</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">|</span><span class=\"token scalar string\">\n    nx affected:build --base=origin/main</span></code></pre></div>\n<h2 id=\"7-공유-설정-관리\" style=\"position:relative;\"><a href=\"#7-%EA%B3%B5%EC%9C%A0-%EC%84%A4%EC%A0%95-%EA%B4%80%EB%A6%AC\" aria-label=\"7 공유 설정 관리 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>7. 공유 설정 관리</h2>\n<h3 id=\"7-1-eslint-설정\" style=\"position:relative;\"><a href=\"#7-1-eslint-%EC%84%A4%EC%A0%95\" aria-label=\"7 1 eslint 설정 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>7-1. ESLint 설정</h3>\n<p><strong>packages/eslint-config/package.json:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"json\"><pre class=\"language-json\"><code class=\"language-json\"><span class=\"token punctuation\">{</span>\n  <span class=\"token property\">\"name\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"@my-monorepo/eslint-config\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token property\">\"version\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"1.0.0\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token property\">\"main\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"index.js\"</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p><strong>packages/eslint-config/index.js:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\">module<span class=\"token punctuation\">.</span>exports <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">extends</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\n    <span class=\"token string\">'eslint:recommended'</span><span class=\"token punctuation\">,</span>\n    <span class=\"token string\">'plugin:@typescript-eslint/recommended'</span><span class=\"token punctuation\">,</span>\n    <span class=\"token string\">'plugin:react/recommended'</span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n  <span class=\"token literal-property property\">rules</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token comment\">// 공통 규칙</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p><strong>앱에서 사용:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"json\"><pre class=\"language-json\"><code class=\"language-json\"><span class=\"token punctuation\">{</span>\n  <span class=\"token property\">\"extends\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"@my-monorepo/eslint-config\"</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h3 id=\"7-2-typescript-설정\" style=\"position:relative;\"><a href=\"#7-2-typescript-%EC%84%A4%EC%A0%95\" aria-label=\"7 2 typescript 설정 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>7-2. TypeScript 설정</h3>\n<p><strong>packages/tsconfig/base.json:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"json\"><pre class=\"language-json\"><code class=\"language-json\"><span class=\"token punctuation\">{</span>\n  <span class=\"token property\">\"compilerOptions\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token property\">\"target\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"ES2020\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"module\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"ESNext\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"lib\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span><span class=\"token string\">\"ES2020\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"DOM\"</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"strict\"</span><span class=\"token operator\">:</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"esModuleInterop\"</span><span class=\"token operator\">:</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"skipLibCheck\"</span><span class=\"token operator\">:</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"forceConsistentCasingInFileNames\"</span><span class=\"token operator\">:</span> <span class=\"token boolean\">true</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p><strong>앱에서 확장:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"json\"><pre class=\"language-json\"><code class=\"language-json\"><span class=\"token punctuation\">{</span>\n  <span class=\"token property\">\"extends\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"@my-monorepo/tsconfig/base.json\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token property\">\"compilerOptions\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token property\">\"outDir\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"./dist\"</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h2 id=\"8-best-practices\" style=\"position:relative;\"><a href=\"#8-best-practices\" aria-label=\"8 best practices permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>8. Best Practices</h2>\n<h3 id=\"8-1-프로젝트-구조\" style=\"position:relative;\"><a href=\"#8-1-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B5%AC%EC%A1%B0\" aria-label=\"8 1 프로젝트 구조 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>8-1. 프로젝트 구조</h3>\n<p><strong>명확한 구조:</strong></p>\n<ul>\n<li><code class=\"language-text\">apps/</code>: 실행 가능한 애플리케이션</li>\n<li><code class=\"language-text\">packages/</code>: 재사용 가능한 패키지</li>\n<li><code class=\"language-text\">tools/</code>: 개발 도구 및 스크립트</li>\n</ul>\n<h3 id=\"8-2-의존성-관리\" style=\"position:relative;\"><a href=\"#8-2-%EC%9D%98%EC%A1%B4%EC%84%B1-%EA%B4%80%EB%A6%AC\" aria-label=\"8 2 의존성 관리 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>8-2. 의존성 관리</h3>\n<p><strong>의존성 최소화:</strong></p>\n<ul>\n<li>필요한 패키지만 설치</li>\n<li>공통 의존성은 루트에 설치</li>\n</ul>\n<p><strong>버전 통일:</strong></p>\n<ul>\n<li>동일한 라이브러리는 동일한 버전 사용</li>\n<li>버전 충돌 방지</li>\n</ul>\n<h3 id=\"8-3-빌드-최적화\" style=\"position:relative;\"><a href=\"#8-3-%EB%B9%8C%EB%93%9C-%EC%B5%9C%EC%A0%81%ED%99%94\" aria-label=\"8 3 빌드 최적화 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>8-3. 빌드 최적화</h3>\n<p><strong>병렬 빌드:</strong></p>\n<ul>\n<li>Turborepo, Nx는 자동으로 병렬 빌드</li>\n<li>의존성 그래프 기반 최적화</li>\n</ul>\n<p><strong>캐싱 활용:</strong></p>\n<ul>\n<li>빌드 결과 캐싱</li>\n<li>CI/CD에서도 캐싱 활용</li>\n</ul>\n<h3 id=\"8-4-코드-공유\" style=\"position:relative;\"><a href=\"#8-4-%EC%BD%94%EB%93%9C-%EA%B3%B5%EC%9C%A0\" aria-label=\"8 4 코드 공유 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>8-4. 코드 공유</h3>\n<p><strong>공유 패키지 설계:</strong></p>\n<ul>\n<li>명확한 인터페이스 정의</li>\n<li>독립적으로 테스트 가능하도록 설계</li>\n<li>문서화</li>\n</ul>\n<h2 id=\"9-마이그레이션-가이드\" style=\"position:relative;\"><a href=\"#9-%EB%A7%88%EC%9D%B4%EA%B7%B8%EB%A0%88%EC%9D%B4%EC%85%98-%EA%B0%80%EC%9D%B4%EB%93%9C\" aria-label=\"9 마이그레이션 가이드 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>9. 마이그레이션 가이드</h2>\n<h3 id=\"9-1-기존-프로젝트-통합\" style=\"position:relative;\"><a href=\"#9-1-%EA%B8%B0%EC%A1%B4-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%ED%86%B5%ED%95%A9\" aria-label=\"9 1 기존 프로젝트 통합 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>9-1. 기존 프로젝트 통합</h3>\n<p><strong>단계별 마이그레이션:</strong></p>\n<ol>\n<li>모노레포 구조 생성</li>\n<li>기존 프로젝트 이동</li>\n<li>의존성 정리</li>\n<li>빌드 시스템 설정</li>\n<li>CI/CD 업데이트</li>\n</ol>\n<p><strong>주의사항:</strong></p>\n<ul>\n<li>Git 히스토리 보존</li>\n<li>점진적 마이그레이션</li>\n<li>팀과 충분한 소통</li>\n</ul>\n<h2 id=\"faq\" style=\"position:relative;\"><a href=\"#faq\" aria-label=\"faq permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>FAQ</h2>\n<p><strong>Q: 모노레포가 항상 좋은가요?</strong><br>\nA: 상황에 따라 다릅니다. 코드 공유가 많고 관련된 프로젝트를 관리할 때 유리하지만, 완전히 독립적인 프로젝트는 멀티레포가 나을 수 있습니다.</p>\n<p><strong>Q: Turborepo와 Nx 중 어떤 것을 선택해야 하나요?</strong><br>\nA: 간단한 프로젝트와 빠른 빌드가 중요하면 Turborepo, 대규모 엔터프라이즈 프로젝트와 강력한 도구가 필요하면 Nx를 선택하세요.</p>\n<p><strong>Q: 모노레포에서 Git 히스토리는 어떻게 관리하나요?</strong><br>\nA: 기존 프로젝트를 통합할 때는 <code class=\"language-text\">git subtree</code>나 <code class=\"language-text\">git filter-branch</code>를 사용하여 히스토리를 보존할 수 있습니다.</p>\n<p><strong>Q: 패키지 버전을 독립적으로 관리할 수 있나요?</strong><br>\nA: 네, Lerna의 <code class=\"language-text\">independent</code> 모드나 각 패키지의 독립적인 버전 관리가 가능합니다.</p>\n<p><strong>Q: CI/CD에서 모든 패키지를 빌드하나요?</strong><br>\nA: 아니요, 변경된 패키지만 빌드하는 것이 효율적입니다. Turborepo와 Nx는 이를 자동으로 처리합니다.</p>\n<p><strong>Q: 모노레포 저장소 크기가 커지면 어떻게 하나요?</strong><br>\nA: Git LFS 사용, 부분 클론, 또는 저장소 분할을 고려할 수 있습니다. 하지만 대부분의 경우 모던 Git은 큰 저장소도 잘 처리합니다.</p>\n<h2 id=\"결론-모노레포로-대규모-프로젝트-관리\" style=\"position:relative;\"><a href=\"#%EA%B2%B0%EB%A1%A0-%EB%AA%A8%EB%85%B8%EB%A0%88%ED%8F%AC%EB%A1%9C-%EB%8C%80%EA%B7%9C%EB%AA%A8-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B4%80%EB%A6%AC\" aria-label=\"결론 모노레포로 대규모 프로젝트 관리 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>결론: 모노레포로 대규모 프로젝트 관리</h2>\n<p>모노레포는 대규모 프로젝트와 팀 협업에서 강력한 도구다. 코드 공유, 일관성 유지, 효율적인 빌드 등 많은 장점을 제공한다.</p>\n<p>하지만 모든 프로젝트에 적합한 것은 아니다. 프로젝트의 규모, 팀 구조, 코드 공유 정도를 고려하여 선택해야 한다. 적절히 활용하면 개발 생산성을 크게 향상시킬 수 있다.</p>\n<p>Turborepo와 Nx 같은 도구들이 모노레포의 복잡성을 크게 줄여주고 있다. 이제는 더 많은 프로젝트가 모노레포를 채택하고 있으며, 이는 앞으로의 트렌드가 될 것이다.</p>\n<h2 id=\"모노레포-학습-후-프로젝트-기회\" style=\"position:relative;\"><a href=\"#%EB%AA%A8%EB%85%B8%EB%A0%88%ED%8F%AC-%ED%95%99%EC%8A%B5-%ED%9B%84-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B8%B0%ED%9A%8C\" aria-label=\"모노레포 학습 후 프로젝트 기회 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>모노레포 학습 후 프로젝트 기회</h2>\n<p>모노레포를 마스터한 후, 실제 프로젝트에 적용하고 싶다면 <a href=\"https://bluebutton.kr/\">블루버튼</a> 같은 프로젝트 매칭 플랫폼을 활용할 수 있다. 모노레포를 활용한 대규모 프로젝트 관리, 마이크로서비스 아키텍처, 코드 공유가 중요한 프로젝트 등에서 실전 경험을 쌓을 수 있다. 특히 프론트엔드와 백엔드를 함께 관리하거나, 여러 앱을 하나의 저장소에서 관리하는 프로젝트에서 모노레포의 강점을 발휘할 수 있다.</p>","tableOfContents":"<ul>\n<li>\n<p><a href=\"/etc/%EB%AA%A8%EB%85%B8%EB%A0%88%ED%8F%AC-Monorepo-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Turborepo%EC%99%80-Nx%EB%A1%9C-%EB%8C%80%EA%B7%9C%EB%AA%A8-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B4%80%EB%A6%AC%ED%95%98%EA%B8%B0/#1-%EB%AA%A8%EB%85%B8%EB%A0%88%ED%8F%AC%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80\">1. 모노레포란 무엇인가?</a></p>\n<ul>\n<li><a href=\"/etc/%EB%AA%A8%EB%85%B8%EB%A0%88%ED%8F%AC-Monorepo-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Turborepo%EC%99%80-Nx%EB%A1%9C-%EB%8C%80%EA%B7%9C%EB%AA%A8-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B4%80%EB%A6%AC%ED%95%98%EA%B8%B0/#1-1-%EA%B8%B0%EB%B3%B8-%EA%B0%9C%EB%85%90\">1-1. 기본 개념</a></li>\n<li><a href=\"/etc/%EB%AA%A8%EB%85%B8%EB%A0%88%ED%8F%AC-Monorepo-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Turborepo%EC%99%80-Nx%EB%A1%9C-%EB%8C%80%EA%B7%9C%EB%AA%A8-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B4%80%EB%A6%AC%ED%95%98%EA%B8%B0/#1-2-%EB%AA%A8%EB%85%B8%EB%A0%88%ED%8F%AC%EC%9D%98-%EC%9E%A5%EB%8B%A8%EC%A0%90\">1-2. 모노레포의 장단점</a></li>\n<li><a href=\"/etc/%EB%AA%A8%EB%85%B8%EB%A0%88%ED%8F%AC-Monorepo-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Turborepo%EC%99%80-Nx%EB%A1%9C-%EB%8C%80%EA%B7%9C%EB%AA%A8-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B4%80%EB%A6%AC%ED%95%98%EA%B8%B0/#1-3-%EB%AA%A8%EB%85%B8%EB%A0%88%ED%8F%AC-%EC%82%AC%EC%9A%A9-%EC%82%AC%EB%A1%80\">1-3. 모노레포 사용 사례</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/etc/%EB%AA%A8%EB%85%B8%EB%A0%88%ED%8F%AC-Monorepo-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Turborepo%EC%99%80-Nx%EB%A1%9C-%EB%8C%80%EA%B7%9C%EB%AA%A8-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B4%80%EB%A6%AC%ED%95%98%EA%B8%B0/#2-%EC%A3%BC%EC%9A%94-%EB%AA%A8%EB%85%B8%EB%A0%88%ED%8F%AC-%EB%8F%84%EA%B5%AC-%EB%B9%84%EA%B5%90\">2. 주요 모노레포 도구 비교</a></p>\n<ul>\n<li><a href=\"/etc/%EB%AA%A8%EB%85%B8%EB%A0%88%ED%8F%AC-Monorepo-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Turborepo%EC%99%80-Nx%EB%A1%9C-%EB%8C%80%EA%B7%9C%EB%AA%A8-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B4%80%EB%A6%AC%ED%95%98%EA%B8%B0/#2-1-%EB%8F%84%EA%B5%AC-%EA%B0%9C%EC%9A%94\">2-1. 도구 개요</a></li>\n<li><a href=\"/etc/%EB%AA%A8%EB%85%B8%EB%A0%88%ED%8F%AC-Monorepo-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Turborepo%EC%99%80-Nx%EB%A1%9C-%EB%8C%80%EA%B7%9C%EB%AA%A8-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B4%80%EB%A6%AC%ED%95%98%EA%B8%B0/#2-2-%EC%84%A0%ED%83%9D-%EA%B0%80%EC%9D%B4%EB%93%9C\">2-2. 선택 가이드</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/etc/%EB%AA%A8%EB%85%B8%EB%A0%88%ED%8F%AC-Monorepo-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Turborepo%EC%99%80-Nx%EB%A1%9C-%EB%8C%80%EA%B7%9C%EB%AA%A8-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B4%80%EB%A6%AC%ED%95%98%EA%B8%B0/#3-turborepo-%EC%8B%A4%EC%A0%84-%EA%B0%80%EC%9D%B4%EB%93%9C\">3. Turborepo 실전 가이드</a></p>\n<ul>\n<li><a href=\"/etc/%EB%AA%A8%EB%85%B8%EB%A0%88%ED%8F%AC-Monorepo-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Turborepo%EC%99%80-Nx%EB%A1%9C-%EB%8C%80%EA%B7%9C%EB%AA%A8-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B4%80%EB%A6%AC%ED%95%98%EA%B8%B0/#3-1-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B5%AC%EC%A1%B0\">3-1. 프로젝트 구조</a></li>\n<li><a href=\"/etc/%EB%AA%A8%EB%85%B8%EB%A0%88%ED%8F%AC-Monorepo-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Turborepo%EC%99%80-Nx%EB%A1%9C-%EB%8C%80%EA%B7%9C%EB%AA%A8-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B4%80%EB%A6%AC%ED%95%98%EA%B8%B0/#3-2-%EC%B4%88%EA%B8%B0-%EC%84%A4%EC%A0%95\">3-2. 초기 설정</a></li>\n<li><a href=\"/etc/%EB%AA%A8%EB%85%B8%EB%A0%88%ED%8F%AC-Monorepo-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Turborepo%EC%99%80-Nx%EB%A1%9C-%EB%8C%80%EA%B7%9C%EB%AA%A8-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B4%80%EB%A6%AC%ED%95%98%EA%B8%B0/#3-3-%EC%95%B1-%EC%83%9D%EC%84%B1\">3-3. 앱 생성</a></li>\n<li><a href=\"/etc/%EB%AA%A8%EB%85%B8%EB%A0%88%ED%8F%AC-Monorepo-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Turborepo%EC%99%80-Nx%EB%A1%9C-%EB%8C%80%EA%B7%9C%EB%AA%A8-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B4%80%EB%A6%AC%ED%95%98%EA%B8%B0/#3-4-%ED%8C%A8%ED%82%A4%EC%A7%80-%EC%83%9D%EC%84%B1\">3-4. 패키지 생성</a></li>\n<li><a href=\"/etc/%EB%AA%A8%EB%85%B8%EB%A0%88%ED%8F%AC-Monorepo-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Turborepo%EC%99%80-Nx%EB%A1%9C-%EB%8C%80%EA%B7%9C%EB%AA%A8-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B4%80%EB%A6%AC%ED%95%98%EA%B8%B0/#3-5-%ED%8C%A8%ED%82%A4%EC%A7%80-%EC%82%AC%EC%9A%A9\">3-5. 패키지 사용</a></li>\n<li><a href=\"/etc/%EB%AA%A8%EB%85%B8%EB%A0%88%ED%8F%AC-Monorepo-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Turborepo%EC%99%80-Nx%EB%A1%9C-%EB%8C%80%EA%B7%9C%EB%AA%A8-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B4%80%EB%A6%AC%ED%95%98%EA%B8%B0/#3-6-%EB%B9%8C%EB%93%9C-%EB%B0%8F-%EC%8B%A4%ED%96%89\">3-6. 빌드 및 실행</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/etc/%EB%AA%A8%EB%85%B8%EB%A0%88%ED%8F%AC-Monorepo-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Turborepo%EC%99%80-Nx%EB%A1%9C-%EB%8C%80%EA%B7%9C%EB%AA%A8-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B4%80%EB%A6%AC%ED%95%98%EA%B8%B0/#4-nx-%EC%8B%A4%EC%A0%84-%EA%B0%80%EC%9D%B4%EB%93%9C\">4. Nx 실전 가이드</a></p>\n<ul>\n<li><a href=\"/etc/%EB%AA%A8%EB%85%B8%EB%A0%88%ED%8F%AC-Monorepo-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Turborepo%EC%99%80-Nx%EB%A1%9C-%EB%8C%80%EA%B7%9C%EB%AA%A8-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B4%80%EB%A6%AC%ED%95%98%EA%B8%B0/#4-1-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%B4%88%EA%B8%B0%ED%99%94\">4-1. 프로젝트 초기화</a></li>\n<li><a href=\"/etc/%EB%AA%A8%EB%85%B8%EB%A0%88%ED%8F%AC-Monorepo-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Turborepo%EC%99%80-Nx%EB%A1%9C-%EB%8C%80%EA%B7%9C%EB%AA%A8-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B4%80%EB%A6%AC%ED%95%98%EA%B8%B0/#4-2-%EC%95%B1-%EC%83%9D%EC%84%B1\">4-2. 앱 생성</a></li>\n<li><a href=\"/etc/%EB%AA%A8%EB%85%B8%EB%A0%88%ED%8F%AC-Monorepo-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Turborepo%EC%99%80-Nx%EB%A1%9C-%EB%8C%80%EA%B7%9C%EB%AA%A8-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B4%80%EB%A6%AC%ED%95%98%EA%B8%B0/#4-3-%ED%83%9C%EC%8A%A4%ED%81%AC-%EC%8B%A4%ED%96%89\">4-3. 태스크 실행</a></li>\n<li><a href=\"/etc/%EB%AA%A8%EB%85%B8%EB%A0%88%ED%8F%AC-Monorepo-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Turborepo%EC%99%80-Nx%EB%A1%9C-%EB%8C%80%EA%B7%9C%EB%AA%A8-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B4%80%EB%A6%AC%ED%95%98%EA%B8%B0/#4-4-%EC%98%81%ED%96%A5%EC%9D%84-%EB%B0%9B%EB%8A%94-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%EB%A7%8C-%EB%B9%8C%EB%93%9C\">4-4. 영향을 받는 프로젝트만 빌드</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/etc/%EB%AA%A8%EB%85%B8%EB%A0%88%ED%8F%AC-Monorepo-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Turborepo%EC%99%80-Nx%EB%A1%9C-%EB%8C%80%EA%B7%9C%EB%AA%A8-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B4%80%EB%A6%AC%ED%95%98%EA%B8%B0/#5-%ED%8C%A8%ED%82%A4%EC%A7%80-%EA%B0%84-%EC%9D%98%EC%A1%B4%EC%84%B1-%EA%B4%80%EB%A6%AC\">5. 패키지 간 의존성 관리</a></p>\n<ul>\n<li><a href=\"/etc/%EB%AA%A8%EB%85%B8%EB%A0%88%ED%8F%AC-Monorepo-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Turborepo%EC%99%80-Nx%EB%A1%9C-%EB%8C%80%EA%B7%9C%EB%AA%A8-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B4%80%EB%A6%AC%ED%95%98%EA%B8%B0/#5-1-%EB%82%B4%EB%B6%80-%ED%8C%A8%ED%82%A4%EC%A7%80-%EC%B0%B8%EC%A1%B0\">5-1. 내부 패키지 참조</a></li>\n<li><a href=\"/etc/%EB%AA%A8%EB%85%B8%EB%A0%88%ED%8F%AC-Monorepo-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Turborepo%EC%99%80-Nx%EB%A1%9C-%EB%8C%80%EA%B7%9C%EB%AA%A8-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B4%80%EB%A6%AC%ED%95%98%EA%B8%B0/#5-2-%EB%B2%84%EC%A0%84-%EA%B4%80%EB%A6%AC\">5-2. 버전 관리</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/etc/%EB%AA%A8%EB%85%B8%EB%A0%88%ED%8F%AC-Monorepo-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Turborepo%EC%99%80-Nx%EB%A1%9C-%EB%8C%80%EA%B7%9C%EB%AA%A8-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B4%80%EB%A6%AC%ED%95%98%EA%B8%B0/#6-cicd-%ED%86%B5%ED%95%A9\">6. CI/CD 통합</a></p>\n<ul>\n<li><a href=\"/etc/%EB%AA%A8%EB%85%B8%EB%A0%88%ED%8F%AC-Monorepo-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Turborepo%EC%99%80-Nx%EB%A1%9C-%EB%8C%80%EA%B7%9C%EB%AA%A8-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B4%80%EB%A6%AC%ED%95%98%EA%B8%B0/#6-1-github-actions-turborepo\">6-1. GitHub Actions (Turborepo)</a></li>\n<li><a href=\"/etc/%EB%AA%A8%EB%85%B8%EB%A0%88%ED%8F%AC-Monorepo-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Turborepo%EC%99%80-Nx%EB%A1%9C-%EB%8C%80%EA%B7%9C%EB%AA%A8-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B4%80%EB%A6%AC%ED%95%98%EA%B8%B0/#6-2-%EB%B3%80%EA%B2%BD%EB%90%9C-%ED%8C%A8%ED%82%A4%EC%A7%80%EB%A7%8C-%EB%B9%8C%EB%93%9C\">6-2. 변경된 패키지만 빌드</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/etc/%EB%AA%A8%EB%85%B8%EB%A0%88%ED%8F%AC-Monorepo-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Turborepo%EC%99%80-Nx%EB%A1%9C-%EB%8C%80%EA%B7%9C%EB%AA%A8-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B4%80%EB%A6%AC%ED%95%98%EA%B8%B0/#7-%EA%B3%B5%EC%9C%A0-%EC%84%A4%EC%A0%95-%EA%B4%80%EB%A6%AC\">7. 공유 설정 관리</a></p>\n<ul>\n<li><a href=\"/etc/%EB%AA%A8%EB%85%B8%EB%A0%88%ED%8F%AC-Monorepo-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Turborepo%EC%99%80-Nx%EB%A1%9C-%EB%8C%80%EA%B7%9C%EB%AA%A8-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B4%80%EB%A6%AC%ED%95%98%EA%B8%B0/#7-1-eslint-%EC%84%A4%EC%A0%95\">7-1. ESLint 설정</a></li>\n<li><a href=\"/etc/%EB%AA%A8%EB%85%B8%EB%A0%88%ED%8F%AC-Monorepo-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Turborepo%EC%99%80-Nx%EB%A1%9C-%EB%8C%80%EA%B7%9C%EB%AA%A8-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B4%80%EB%A6%AC%ED%95%98%EA%B8%B0/#7-2-typescript-%EC%84%A4%EC%A0%95\">7-2. TypeScript 설정</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/etc/%EB%AA%A8%EB%85%B8%EB%A0%88%ED%8F%AC-Monorepo-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Turborepo%EC%99%80-Nx%EB%A1%9C-%EB%8C%80%EA%B7%9C%EB%AA%A8-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B4%80%EB%A6%AC%ED%95%98%EA%B8%B0/#8-best-practices\">8. Best Practices</a></p>\n<ul>\n<li><a href=\"/etc/%EB%AA%A8%EB%85%B8%EB%A0%88%ED%8F%AC-Monorepo-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Turborepo%EC%99%80-Nx%EB%A1%9C-%EB%8C%80%EA%B7%9C%EB%AA%A8-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B4%80%EB%A6%AC%ED%95%98%EA%B8%B0/#8-1-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B5%AC%EC%A1%B0\">8-1. 프로젝트 구조</a></li>\n<li><a href=\"/etc/%EB%AA%A8%EB%85%B8%EB%A0%88%ED%8F%AC-Monorepo-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Turborepo%EC%99%80-Nx%EB%A1%9C-%EB%8C%80%EA%B7%9C%EB%AA%A8-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B4%80%EB%A6%AC%ED%95%98%EA%B8%B0/#8-2-%EC%9D%98%EC%A1%B4%EC%84%B1-%EA%B4%80%EB%A6%AC\">8-2. 의존성 관리</a></li>\n<li><a href=\"/etc/%EB%AA%A8%EB%85%B8%EB%A0%88%ED%8F%AC-Monorepo-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Turborepo%EC%99%80-Nx%EB%A1%9C-%EB%8C%80%EA%B7%9C%EB%AA%A8-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B4%80%EB%A6%AC%ED%95%98%EA%B8%B0/#8-3-%EB%B9%8C%EB%93%9C-%EC%B5%9C%EC%A0%81%ED%99%94\">8-3. 빌드 최적화</a></li>\n<li><a href=\"/etc/%EB%AA%A8%EB%85%B8%EB%A0%88%ED%8F%AC-Monorepo-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Turborepo%EC%99%80-Nx%EB%A1%9C-%EB%8C%80%EA%B7%9C%EB%AA%A8-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B4%80%EB%A6%AC%ED%95%98%EA%B8%B0/#8-4-%EC%BD%94%EB%93%9C-%EA%B3%B5%EC%9C%A0\">8-4. 코드 공유</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/etc/%EB%AA%A8%EB%85%B8%EB%A0%88%ED%8F%AC-Monorepo-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Turborepo%EC%99%80-Nx%EB%A1%9C-%EB%8C%80%EA%B7%9C%EB%AA%A8-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B4%80%EB%A6%AC%ED%95%98%EA%B8%B0/#9-%EB%A7%88%EC%9D%B4%EA%B7%B8%EB%A0%88%EC%9D%B4%EC%85%98-%EA%B0%80%EC%9D%B4%EB%93%9C\">9. 마이그레이션 가이드</a></p>\n<ul>\n<li><a href=\"/etc/%EB%AA%A8%EB%85%B8%EB%A0%88%ED%8F%AC-Monorepo-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Turborepo%EC%99%80-Nx%EB%A1%9C-%EB%8C%80%EA%B7%9C%EB%AA%A8-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B4%80%EB%A6%AC%ED%95%98%EA%B8%B0/#9-1-%EA%B8%B0%EC%A1%B4-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%ED%86%B5%ED%95%A9\">9-1. 기존 프로젝트 통합</a></li>\n</ul>\n</li>\n<li><a href=\"/etc/%EB%AA%A8%EB%85%B8%EB%A0%88%ED%8F%AC-Monorepo-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Turborepo%EC%99%80-Nx%EB%A1%9C-%EB%8C%80%EA%B7%9C%EB%AA%A8-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B4%80%EB%A6%AC%ED%95%98%EA%B8%B0/#faq\">FAQ</a></li>\n<li><a href=\"/etc/%EB%AA%A8%EB%85%B8%EB%A0%88%ED%8F%AC-Monorepo-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Turborepo%EC%99%80-Nx%EB%A1%9C-%EB%8C%80%EA%B7%9C%EB%AA%A8-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B4%80%EB%A6%AC%ED%95%98%EA%B8%B0/#%EA%B2%B0%EB%A1%A0-%EB%AA%A8%EB%85%B8%EB%A0%88%ED%8F%AC%EB%A1%9C-%EB%8C%80%EA%B7%9C%EB%AA%A8-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B4%80%EB%A6%AC\">결론: 모노레포로 대규모 프로젝트 관리</a></li>\n<li><a href=\"/etc/%EB%AA%A8%EB%85%B8%EB%A0%88%ED%8F%AC-Monorepo-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Turborepo%EC%99%80-Nx%EB%A1%9C-%EB%8C%80%EA%B7%9C%EB%AA%A8-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B4%80%EB%A6%AC%ED%95%98%EA%B8%B0/#%EB%AA%A8%EB%85%B8%EB%A0%88%ED%8F%AC-%ED%95%99%EC%8A%B5-%ED%9B%84-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B8%B0%ED%9A%8C\">모노레포 학습 후 프로젝트 기회</a></li>\n</ul>","wordCount":{"words":731},"fields":{"slug":"/etc/모노레포-Monorepo-완전정복-Turborepo와-Nx로-대규모-프로젝트-관리하기/","image":null,"faq":[{"question":"모노레포가 항상 좋은가요?","answer":"상황에 따라 다릅니다. 코드 공유가 많고 관련된 프로젝트를 관리할 때 유리하지만, 완전히 독립적인 프로젝트는 멀티레포가 나을 수 있습니다."},{"question":"Turborepo와 Nx 중 어떤 것을 선택해야 하나요?","answer":"간단한 프로젝트와 빠른 빌드가 중요하면 Turborepo, 대규모 엔터프라이즈 프로젝트와 강력한 도구가 필요하면 Nx를 선택하세요."},{"question":"모노레포에서 Git 히스토리는 어떻게 관리하나요?","answer":"기존 프로젝트를 통합할 때는 git subtree나 git filter-branch를 사용하여 히스토리를 보존할 수 있습니다."},{"question":"패키지 버전을 독립적으로 관리할 수 있나요?","answer":"네, Lerna의 independent 모드나 각 패키지의 독립적인 버전 관리가 가능합니다."},{"question":"CI/CD에서 모든 패키지를 빌드하나요?","answer":"아니요, 변경된 패키지만 빌드하는 것이 효율적입니다. Turborepo와 Nx는 이를 자동으로 처리합니다."},{"question":"모노레포 저장소 크기가 커지면 어떻게 하나요?","answer":"Git LFS 사용, 부분 클론, 또는 저장소 분할을 고려할 수 있습니다. 하지만 대부분의 경우 모던 Git은 큰 저장소도 잘 처리합니다."}]},"frontmatter":{"title":"모노레포(Monorepo) 완전정복 - Turborepo와 Nx로 대규모 프로젝트 관리하기","date":"2025년 12월 29일","dateISO":"2025-12-29T06:45:00.000Z","updatedISO":null,"category":"etc","description":"모노레포의 모든 것을 다룬다. 개념부터 Turborepo, Nx, Lerna까지 주요 도구 비교, 실전 구축 가이드, CI/CD 통합, 대규모 프로젝트 관리 전략까지 실무 중심으로 정리한다.","tags":["Monorepo","모노레포","Turborepo","Nx","Lerna","프로젝트 관리","빌드 시스템","코드 공유","대규모 프로젝트"]}}},"pageContext":{"slug":"/etc/모노레포-Monorepo-완전정복-Turborepo와-Nx로-대규모-프로젝트-관리하기/","previous":{"fields":{"slug":"/etc/Serverless-아키텍처-실전-가이드-AWS-Lambda부터-Vercel까지/"},"frontmatter":{"title":"Serverless 아키텍처 실전 가이드 - AWS Lambda부터 Vercel까지","tags":["Serverless","AWS Lambda","Vercel","Netlify","Cloud Functions","서버리스","인프라","배포","Edge Computing"]}},"next":{"fields":{"slug":"/javascript/웹-성능-최적화-완전정복-Core-Web-Vitals부터-번들-최적화까지/"},"frontmatter":{"title":"웹 성능 최적화 완전정복 - Core Web Vitals부터 번들 최적화까지","tags":["웹 성능","성능 최적화","Core Web Vitals","번들 최적화","이미지 최적화","캐싱","코드 스플리팅","Lighthouse","웹 최적화"]}}}},"staticQueryHashes":["213619243","3262363727"]}