배포 파이프라인을 구축했습니다. 코드가 커밋되면 자동으로 빌드되고 테스트를 거쳐 배포됩니다. 훌륭해 보입니다. 그런데 정말 안전한가요?
파이프라인이 해결하지 못하는 것
CI/CD 파이프라인은 배포를 빠르고 일관되게 만들어줍니다. 그러나 파이프라인은 이 질문에 답하지 않습니다.
- 이 배포를 지금 해도 되는가?
- 누가 이 배포를 승인했는가?
- 이 변경이 다른 시스템에 영향을 주지는 않는가?
이 질문에 답하는 것이 배포 거버넌스입니다. 파이프라인은 거버넌스를 대체하지 않습니다.
거버넌스 없는 자동화의 위험
자동화는 좋은 것이지만, 통제 없는 자동화는 위험을 빠르게 확산시킵니다.
잘못된 배포가 더 빠르게 운영에 반영됩니다. 수동 배포 시대에는 담당자가 배포 직전 변경 사항을 한 번 더 확인했습니다. 자동화 이후에는 그 마지막 확인 단계가 사라집니다. 결함이 있는 코드가 더 빠르게, 더 많은 환경에 배포됩니다.
누가 무엇을 배포했는지 알기 어렵습니다. 파이프라인이 배포했다고 기록에 남습니다. 누가 해당 코드를 커밋했고, 누가 머지 승인을 했고, 누가 배포 결정을 내렸는지의 연결 고리가 불명확합니다.
배포 시점을 조율하지 않습니다. 자동화된 파이프라인은 코드가 머지되면 즉시 배포합니다. 그러나 실제 운영에서는 배포 시점이 중요합니다. 트래픽이 많은 시간대, 다른 팀의 릴리즈와의 충돌, 다운타임이 허용되지 않는 기간을 파이프라인은 고려하지 않습니다.
거버넌스가 없다는 것의 의미
거버넌스가 없는 배포 환경에서 흔히 나타나는 상황입니다.
오후 5시에 배포했는데 퇴근 후 장애가 났습니다. 누가 배포를 승인했는지 명확하지 않습니다. 배포와 장애 사이의 연관성을 확인하는 데 한 시간이 걸렸습니다.
이것은 도구의 문제가 아닙니다. **"누가 결정하고, 어떤 기준으로 결정하며, 그 결정이 어디에 기록되는가"**가 정의되지 않은 구조의 문제입니다.
배포 거버넌스의 핵심 요소
거버넌스가 작동하는 배포 구조는 다음을 포함합니다.
변경 승인 체계. 모든 배포는 명시적인 승인을 거칩니다. 누가 승인할 수 있는지, 어떤 조건에서 승인이 필요한지 정의합니다. 긴급 배포 경로도 별도로 정의합니다.
배포 가능 시간 정의. 언제 배포할 수 있고, 언제는 할 수 없는지를 명확히 합니다. 변경 금지 기간(freeze period)도 포함합니다.
롤백 기준. 배포 후 어떤 상태가 되면 롤백할 것인지 사전에 정의합니다. 롤백 결정이 필요한 순간에 그 결정을 즉시 내릴 수 있어야 합니다.
배포 이력 연결. 코드 변경, 승인자, 배포 시각, 이후 모니터링 지표를 하나의 흐름으로 연결합니다. 장애가 발생했을 때 배포와의 연관성을 수 분 내에 확인할 수 있어야 합니다.
빠른 배포와 안전한 배포는 충돌하지 않습니다. 거버넌스는 배포를 느리게 만드는 것이 아니라 배포의 결과를 예측 가능하게 만드는 것입니다.