PL 기술 리서치 보고서 — HTML / PDF / Word (.docx) 통합 뷰어
Word (.docx) 다운로드 PDF 파일 다운로드

[기술 리서치 보고서] 엔터프라이즈 모노레포(Monorepo) 전환 및 표준 빌드 아키텍처 수립

항목내용
보고 대상총괄 PL
작성 일자2026-10-25
검토 영역프론트엔드 / 백엔드(BFF) / DevOps(CI/CD) / 개발 생산성(DX)
최종 권고안대안 A: Turborepo + pnpm Workspaces + S3/R2 자체 원격 캐시(Remote Cache) 채택 권고
의사결정 요청모노레포 전환 4주 로드맵(18 M/D) 착수 승인 및 원격 캐시 스토리지(월 $35 한도) 승인 요청

1. Executive Summary (핵심 요약)

최종 결론: 다중 저장소(Polyrepo) 파편화로 인한 공통 모듈 배포 지연과 CI/CD 빌드 시간 병목을 해소하기 위해 대안 A(Turborepo + pnpm Workspaces + S3/R2 Remote Cache) 도입을 권고함. 대안 B(Nx Enterprise) 대비 초기 도입 공수 48% 단축(35 M/D → 18 M/D) 및 상용 클라우드 캐시 구독료 연 $3,600 절감 우위 확인됨.

2. 도입 배경 및 핵심 요구사항

요약: 현행 멀티레포(Polyrepo, 8개 분산 저장소) 환경의 의존성 파편화, 중복 빌드, 버전 불일치로 인해 개발 리드타임이 급증하고 있으며, 이를 단일 워크스페이스 파이프라인으로 통합하기 위한 핵심 요구조건을 정의함.
그림 1. 파편화된 멀티레포(Polyrepo)의 중복 설정 및 의존성 지연(좌)을 DAG 빌드 오케스트레이터와 원격 캐시 기반 단일 모노레포 플랫폼(우)으로 통합하는 아키텍처 개념도
그림 1. 파편화된 멀티레포(Polyrepo)의 중복 설정 및 의존성 지연(좌)을 DAG 빌드 오케스트레이터와 원격 캐시 기반 단일 모노레포 플랫폼(우)으로 통합하는 아키텍처 개념도

2.1 현행 문제점 (As-Is & Pain Points)

2.2 해결 목표 및 기술 요구사항


3. 후보 기술 대안 비교

요약: 후보 3개 아키텍처 대안을 6대 기준으로 비교한 결과, 대안 A(Turborepo + pnpm Workspaces)가 도입 공수 대비 빌드 가속 성능 및 운영 단순성 측면에서 가장 우수함.

3.1 대안 종합 비교표

평가 기준대안 A: Turborepo + pnpm (권고)대안 B: Nx + pnpm (Enterprise)대안 C: 현행 Polyrepo + Private NPM
종합 판정🟢 최적 (권고)🟡 차선 (러닝커브 및 비용 부담)🔴 부적합 (개발 병목 지속)
핵심 아키텍처pnpm-workspace.yaml + turbo.json 파이프라인 + S3/R2 자체 Remote Cachenx.json + 전용 Executor/Generator 플러그인 + Nx Cloud 분산 실행개별 Git 저장소 분리 유지 + Verdaccio/GitHub Packages 사내 배포
빌드/CI 성능PR 평균 1.8분 (Cache Hit 시 8초)
Rust 기반 해싱 및 병렬 DAG 실행
PR 평균 1.5분 (분산 태스크 실행 지원)
대규모 그래프 분석 성능 최상위
PR 평균 14.5분 (앱별 개별 전체 빌드)
공통 모듈 전파에 2.5시간 소요
구축 공수 (러닝커브)18 M/D (약 4주) (난이도: 하~중)
표준 package.json 유지, 1일 내 학습
35 M/D (약 7주) (난이도: 상)
전용 플러그인 규격 및 설정 마이그레이션
4 M/D (약 1주) (난이도: 하)
현행 유지 및 배포 스크립트 보완
도입/운영 비용월 $35 [추정치]
(자체 S3/R2 원격 캐시 + CI 러너 75% 절감)
월 $350+ [추정치]
(Nx Cloud Pro 팀 플랜 유료 구독 시)
월 $480 [추정치]
(중복 CI 러너 실행 시간 과금 지속)
라이선스 / 성숙도MIT License (Vercel 공식 지원)
GitHub 27k+ Stars, 프론트/풀스택 표준
MIT License (Core) / 상용 (Nx Cloud)
GitHub 25k+ Stars, 대규모 엔터프라이즈
기존 오픈소스/사내 인프라 유지
핵심 Trade-off코드 제너레이터 및 아키텍처 경계 강제 룰은 eslint-plugin-boundaries로 별도 보완 필요플러그인 의존성이 강해 프레임워크 메이저 업그레이드 시 Nx 플러그인 호환 대기 발생공통 코드 재사용 저하, 인터페이스 불일치 장애 및 배포 피로도 누적

3.2 대안별 채택 및 기각 사유


4. 아키텍처 및 기술 검증

요약: Apps(배포 단말) → Shared Packages(공통 모듈) → Foundation(설정/캐시)의 단방향 3계층 워크스페이스 구조와 Affected DAG + Remote Cache 기반 CI/CD 가속 파이프라인을 정의함.

4.1 목표 워크스페이스 아키텍처 (To-Be Monorepo Hierarchy)

모노레포 기술 아키텍처 보고서 · 4.1 워크스페이스 패키지 계층Turborepo + pnpm Workspaces 표준 계층 구조 (To-Be)
Turborepo + pnpm Workspaces 기반 모노레포 계층 아키텍처 Apps 계층(Web, Admin, API BFF)이 Shared Packages 계층(UI 디자인 시스템, API Contract, Core Utils)을 심볼릭 링크로 참조하고, 하단 Foundation 계층의 Turborepo와 S3/R2 원격 캐시가 빌드를 가속하는 구조. APPS LAYER · 배포 단말 애플리케이션 SHARED PACKAGES · 내부 공유 모듈 (Workspace Protocol) FOUNDATION & CACHE · 빌드 오케스트레이션 및 원격 캐시 APPS / WEB 고객용 웹 포털 Next.js 15 · App Router APPS / ADMIN 통합 어드민 백오피스 React 19 · Vite APPS / API-BFF 비즈니스 API · BFF 서버 NestJS · OpenAPI PACKAGES / UI 공통 디자인 시스템 React 컴포넌트 · Tailwind PACKAGES / CONTRACT End-to-End API 스키마 Zod · TypeScript 타입 공유 PACKAGES / CORE-UTILS 공통 유틸 · 인증 SDK JWT · 로거 · 날짜/포맷터 packages/config TSConfig · ESLint · Prettier Turborepo + pnpm DAG 병렬 실행 · 하드링크 스토어 Remote Cache (S3 / R2) 빌드·테스트 해시 아티팩트 공유 LEGEND 디자인 시스템 · 캐시 연동 (Focal) E2E 타입 계약 참조 (workspace:*) 내부 유틸 의존성 표준 설정 상속
다이어그램 1. Apps 계층, Shared Packages 계층, Foundation & Remote Cache 계층으로 구성된 Turborepo + pnpm Workspaces 표준 아키텍처

4.2 스마트 CI/CD 및 원격 캐시 동작 흐름 (Affected & Remote Cache Pipeline)

모노레포 전환 시 가장 중요한 핵심 메커니즘은 "전체 코드를 빌드하지 않고 변경된 부분만 빌드하며, 한 번 빌드된 결과물은 전사 개발자와 CI가 해시 기반으로 즉시 재사용(FULL TURBO)"하는 파이프라인임.

모노레포 기술 아키텍처 보고서 · 4.2 스마트 CI/CD 및 원격 캐시 검증Affected DAG 필터링 및 Remote Cache 동작 흐름
Affected 감지 및 Remote Cache 기반 스마트 CI/CD 파이프라인 PR 커밋 시 변경된 패키지와 의존성 영향 범위(Affected Graph)만 추출하고, 원격 캐시 히트 시 즉시 복원(1초 미만)하며 미스 시에만 병렬 빌드 후 캐시를 갱신하여 배포하는 흐름. HIT MISS 캐시 아티팩트 즉시 주입 (빌드 생략) STEP 1 · PR COMMIT 코드 변경 푸시 GitHub Actions 트리거 STEP 2 · AFFECTED DAG 영향 범위 타깃 추출 turbo --filter=...[main] STEP 3 · HASHING 콘텐츠 해시 계산 소스 · 의존성 · 환경변수 STEP 4 · REMOTE CACHE 원격 캐시 조회 S3 / Cloudflare R2 캐시 히트 여부 SHA-256 해시 매칭 FULL TURBO 캐시 즉시 복원 소요 시간 < 1.0초 PARALLEL BUILD 변경분 병렬 빌드 완료 후 캐시 업로드 STEP 5 · DEPLOY 변경 앱 선택 배포 CI 총 소요: 1.8분 이내 LEGEND Affected 필터 · 캐시 히트 (Focal) 캐시 조회 · 배포 파이프라인 일반 빌드 경로 (Cache Miss) FULL TURBO 바이패스 경로
다이어그램 2. Git 변경 감지(Affected DAG) 및 SHA-256 해시 기반 S3/R2 원격 캐시 히트/미스 처리 파이프라인

4.3 핵심 구성요소별 표준 기술 규격 및 검증 내역


5. 주요 리스크 및 대응 방안

요약: 모노레포 전환 시 발생 가능한 5대 리스크(Git 저장소 비대화, CI 병목, 권한 통제, 의존성 충돌, 배포 결합)를 식별하고 예방책 및 비상 우회 계획(Contingency Plan)을 수립함.
구분리스크 요인발생 가능성영향도사전 예방 및 대응 방안 (Mitigation & Contingency)
기술커밋 누적 및 대용량 에셋 유입으로 인한 Git 저장소 클론 속도 저하중중- 이미지/폰트/바이너리는 CDN/S3로 외부화하고 .gitignore 및 Pre-commit 훅(1MB 초과 파일 차단) 강제함
- [우회안] CI 및 개발자 환경에 git clone --filter=blob:none(Partial Clone) 및 Sparse Checkout 표준 스크립트 제공함
운영루트 공통 설정(tsconfig.base.json 등) 변경 시 전체 워크스페이스 캐시 일괄 무효화(Cache Invalidation)중상- 루트 package.json에는 최소한의 실행 스크립트만 두고, 설정을 packages/config-* 단위로 세분화하여 해시 영향 범위를 격리함
- [우회안] 전체 빌드 발생 시 GitHub Actions Matrix Sharding(4병렬 샤드)이 자동 활성화되도록 워크플로우 구성함
보안/권한단일 저장소 통합에 따라 민감 도메인(결제/정산) 코드의 수정 권한 통제 약화중중- .github/CODEOWNERS 파일을 경로별(apps/admin/**, packages/api-contract/**)로 엄격히 분리 설정하고 Branch Protection Rule로 담당 리드 승인 필수화함
일정기존 8개 저장소의 상이한 ESLint/TypeScript 규칙 통합 중 대량 컴파일 에러 발생상중- 전환 초기에는 기존 앱별 tsconfig.json을 유지(strict: false 허용)하여 물리적 통합을 먼저 완료하고, 신규 패키지부터 strict: true를 점진 적용함
배포특정 앱의 빌드 실패가 타 정상 앱의 긴급 핫픽스 배포를 블로킹할 위험하상- 배포 파이프라인은 앱 단위(turbo run build --filter=web...)로 완전 분리하여 타 앱의 깨진 테스트나 빌드가 해당 앱 배포에 영향을 주지 않도록 격리함

6. 최종 권고안 및 향후 추진 일정

요약: 총괄 PL 승인 시 총 4주(18 M/D) 일정으로 4단계 무중단 마이그레이션을 추진하며, Phase 1(1주차) 파일럿 검증 후 전 저장소 이관을 완료함.

6.1 단계별 추진 로드맵

단계주요 과업 (Action Items)소요 기간 (일정)핵심 산출물 및 완료 기준 (Exit Criteria)
Phase 1: 기반 구축 및 파일럿 검증- pnpm-workspace.yaml, turbo.json, catalog: 표준 템플릿 구성
- S3/R2 연동 커스텀 Remote Cache 서버 구축
- packages/ui + apps/web 2개 프로젝트 우선 통합 PoC
1주차 (5 M/D)- 모노레포 파일럿 검증 결과서 (Cache Hit 시 빌드 10초 이내 확인)
- 표준 디렉터리 및 네이밍 컨벤션 가이드
Phase 2: 공통 패키지 및 Git 히스토리 이관- git subtree / git filter-repo로 기존 커밋 히스토리를 보존하며 8개 저장소 이관
- 사내 NPM 배포 파이프라인을 workspace:* 내부 심볼릭 링크로 전환
- packages/api-contract(Zod/OpenAPI) 공통 스키마 추출
2주차 (5 M/D)- 전체 공통 패키지(ui, api-contract, core-utils, config) 통합 완료
- 사내 NPM 배포 없이 로컬 즉시 참조 동작 확인
Phase 3: 스마트 CI/CD 및 거버넌스 적용- GitHub Actions Affected 빌드·테스트 워크플로우 구축
- CODEOWNERS, eslint-plugin-boundaries, syncpack 적용
- 앱별 독립 Docker 멀티스테이지 빌드(turbo prune) 최적화
3주차 (5 M/D)- PR 평균 검증 시간 2분 이내 달성 확인
- turbo prune 기반 경량 컨테이너 이미지 빌드 성공
Phase 4: 개발자 온보딩 및 구 저장소 아카이빙- 전 개발자 대상 모노레포 명령어/워크플로우 온보딩 세션 진행
- 기존 8개 개별 Git 저장소 Read-only(Archived) 전환 완료
4주차 (3 M/D)- 전사 모노레포 전환 완료 보고서
- CI 러너 비용 70% 이상 절감 지표 확인

6.2 참고 자료 (References)