~/csslab.dev/notes $ ls

// note

모노레포 CD를 서비스별로 쪼개기 — 한 배포가 남을 안 건드리게

  • 여러 서비스가 한 저장소에 있는 모노레포의 배포 구조

증상

  • 앱 하나만 고쳐도 전부 빌드·배포됨 — 느리고, 무관한 서비스에 위험이 전파
  • 한 서비스의 배포 실패가 다른 서비스 릴리스를 막음

원인

  • 단일 파이프라인이 저장소 전체를 대상으로 돎
  • 환경(dev/qa/prod)마다 승인 시점과 절차가 다른데 한 흐름에 묶여 있어 분리할 수 없었음

조치

  • 서비스 × 환경 단위로 workflow를 독립 파일화(총 17개) — 각 workflow가 자기 서비스·자기 환경만 책임지므로 실패 반경이 그 칸으로 한정
  • path 필터로 바뀐 서비스만 트리거 — 서비스 A만 고치면 A 파이프라인만 돌고 B는 아예 실행되지 않음. 공유 패키지 변경은 그걸 쓰는 서비스들만 트리거되게 경로에 포함
  • 배포는 컨테이너 이미지를 빌드해 레지스트리에 올린 뒤 GitOps manifest의 태그를 갱신 — 트리거와 실제 롤아웃을 분리해 무엇이 어디에 떠 있는지 선언적으로 추적
  • 재사용 workflow로 공통화하는 대신 파일을 나눔 — 설정 중복은 생기지만 서비스 간 결합이 없음. DRY보다 격리를 택함

결과

  • 배포 시간 약 9분 → 5분대
  • 한 서비스 파이프라인을 고쳐도 다른 서비스에 영향이 없음