Terraform Monorepo에서 Multi-Repo로 이동하면서 정신도 잃지 않기 (그리고 잠도 잃지 않기)
발행: (2025년 12월 12일 오전 05:55 GMT+9)
2 min read
원문: Dev.to
Source: Dev.to
문제
| Metric | Monorepo | Multi‑Repo |
|---|---|---|
| Average plan time | 68 min | 1.8 min (97 % faster) |
| Failed runs per week | 27 | 0.8 (97 % reduction) |
| PR merge time | 4.2 h | 18 min (93 % faster) |
| Largest state file | 1.9 GB | 38 MB |
| Engineer happiness | 4.8/10 | 9.6/10 |
단일 레포: 180 k LoC, 2 800 리소스, 상태 파일 1.9 GB.
멀티‑레포: 각 팀별 레포.
예시: team‑alpha 상태 추출
terraform state mv -state-out=team-alpha.tfstate \
module.vpc module.team_alpha_vpc
terraform state mv -state-out=team-alpha.tfstate \
aws_eks_cluster.alpha null
총 42팀에 대해 반복 (스크립트로 자동화).
새 레포지토리 생성
자동화 스크립트가 각 레포를 다음과 같이 생성합니다:
- 올바른
.terraform-version제약조건 - 전용 S3 + DynamoDB 테이블을 가리키는 백엔드 설정
README.md,CODEOWNERS, 그리고 pre‑commit 훅
도구 업그레이드
| From | To |
|---|---|
| Terraform 1.5 + Terraform Cloud | OpenTofu 1.8 + Atlantis 4.0 |
Atlantis 설정 (YAML)
repos:
- id: /meenanukala/*
apply_requirements: [approved, mergeable]
workflow: tofu
workflows:
tofu:
plan:
steps:
- init
- plan:
extra_args: ["-lock-timeout=5m"]
apply:
steps:
- apply
품질 게이트 적용
- 모든 PR에 Infracost + tfsec 적용
- 상태 파일 커밋을 차단하는 커스텀 pre‑commit 훅
- 프로바이더 업데이트를 위한 Dependabot
- 주간 자동 드리프트 감지
결과
| Metric | Before | After |
|---|---|---|
| Average plan time | 68 min | 1.8 min |
| Failed runs per week | 27 | 0.8 |
| PR merge time | 4.2 h | 18 min |
| Largest state file | 1.9 GB | 38 MB |
| Engineer happiness | 4.8/10 | 9.6/10 |
리소스
- 마이그레이션 런북 & 스크립트 –
- 중첩 모듈을 처리하는 상태 분할 스크립트 포함
- 레포 생성 템플릿
- Atlantis + OpenTofu 설정
- 전체 마이그레이션 런북 (PDF)
Monorepo는 2018년에 의미가 있었지만, 2025가 되면 이자는 붙은 기술 부채가 됩니다. Terraform 플랜이 커피를 마시는 시간보다 오래 걸린다면 전환할 때입니다. 위 레포를 포크하고 런북을 따라 진행하세요.
— Meena Nukala, Senior DevOps Engineer (UK)