![[코드가 환경을 모르는 구조 2/7] 배포 코드가 환경을 모르는 구조](/_next/image?url=https%3A%2F%2Fcdn.sanity.io%2Fimages%2Fv31psllp%2Fproduction%2F58ae2e178769ca25361200fed07c9ecb06c62d2a-1684x1030.png%3Fauto%3Dformat%26fit%3Dmax%26w%3D1200&w=3840&q=75)
Flex팀이 Helm과 ArgoCD를 활용해 환경별 스크립트 파편화를 해결하고 GitOps를 완성한 방법
이 아티클은 환경마다 제각각인 배포 코드가 유발하는 기술적 위험을 분석하고, 이를 극복하기 위한 '환경 불가지론적(Environment-Agnostic)' 배포 구조를 제시합니다. Helm의 다층 설정 관리와 ArgoCD의 선언적 동기화를 통해 어떻게 배포 생산성과 안정성을 동시에 확보했는지 상세한 노하우를 공유합니다.
배포 환경 간 설정 차이로 고통받거나 GitOps로의 전환을 고민하는 시니어 엔지니어 및 DevOps 담당자에게 이 아티클의 계층형 설정 모델 도입을 권장합니다.
환경별로 분리된 배포 스크립트로 인해 설정 불일치(Drift)가 발생하고, 이는 프로덕션 환경의 마이그레이션 누락이나 배포 사고로 이어지는 원인이 됩니다.
배포 템플릿과 환경별 설정값(Values)을 완전히 분리하고, Helm의 3계층(기본, 환경, 변종) 설정 구조와 ArgoCD의 App-of-Apps 패턴을 도입하여 단일 파이프라인으로 모든 환경을 대응하도록 설계했습니다.
모든 배포 상태가 Git 히스토리에 기록되어 추적이 용이해졌으며, 별도의 도구 없이 Git Revert만으로 안전한 롤백이 가능해졌고 환경 간 설정 불일치 사고를 구조적으로 방지했습니다.
Trade-off
기존 Jenkinsfile에 산재했던 환경별 분기 코드를 리팩토링하는 데 상당한 공수가 투입되었으며, 구조적 무결성을 유지하기 위해 개발자의 엄격한 규율 준수와 코드 리뷰가 필수적으로 요구됩니다.
Helm 차트에서 사용하는 설정값을 기본(Base), 환경(Environment), 변종(Variant)의 세 층으로 나누어 관리하는 전략입니다.
ArgoCD에서 하나의 루트 애플리케이션이 여러 자식 애플리케이션의 생명주기를 관리하도록 설계하는 패턴입니다.
빌드 및 배포 코드가 특정 실행 환경(Dev, Prod 등)을 직접 인지하지 않고 외부 주입 파라미터에 의해서만 동작하는 구조입니다.









