Terraform Monorepo에서 Multi-Repo로 이동하면서 정신도 잃지 않기 (그리고 잠도 잃지 않기)

발행: (2025년 12월 12일 오전 05:55 GMT+9)
2 min read
원문: Dev.to

Source: Dev.to

문제

MetricMonorepoMulti‑Repo
Average plan time68 min1.8 min (97 % faster)
Failed runs per week270.8 (97 % reduction)
PR merge time4.2 h18 min (93 % faster)
Largest state file1.9 GB38 MB
Engineer happiness4.8/109.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 훅

도구 업그레이드

FromTo
Terraform 1.5 + Terraform CloudOpenTofu 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
  • 주간 자동 드리프트 감지

결과

MetricBeforeAfter
Average plan time68 min1.8 min
Failed runs per week270.8
PR merge time4.2 h18 min
Largest state file1.9 GB38 MB
Engineer happiness4.8/109.6/10

리소스

  • 마이그레이션 런북 & 스크립트
    • 중첩 모듈을 처리하는 상태 분할 스크립트 포함
    • 레포 생성 템플릿
    • Atlantis + OpenTofu 설정
    • 전체 마이그레이션 런북 (PDF)

Monorepo는 2018년에 의미가 있었지만, 2025가 되면 이자는 붙은 기술 부채가 됩니다. Terraform 플랜이 커피를 마시는 시간보다 오래 걸린다면 전환할 때입니다. 위 레포를 포크하고 런북을 따라 진행하세요.

— Meena Nukala, Senior DevOps Engineer (UK)

Back to Blog

관련 글

더 보기 »