#DevOps

[인프라를 소프트웨어처럼 3/5] 환경은 브랜치에서 태어난다: Environment Variant

[인프라를 소프트웨어처럼 3/5] 환경은 브랜치에서 태어난다: Environment Variant
01

Summary

"브랜치를 push하면 서버가 뜬다" flex팀이 환경 파편화와 배포 병목을 해결한 방법

ArgoCD와 Git 브랜치를 결합해 7단계의 환경 구축 프로세스를 단 1초로 단축시킨 자동화 여정

본 아티클은 공유 개발 환경의 한계를 극복하기 위해 flex팀이 도입한 'Environment Variant' 개념과 구현 과정을 다룹니다. Git 브랜치의 생명주기에 환경의 생명주기를 완벽하게 일치시킴으로써 개발 생산성을 극대화하고 인프라 관리 부담을 획기적으로 줄인 실무 노하우를 공유합니다.

  • 01공유 dev 환경 점유를 위한 슬랙 공지와 대기 시간을 완전히 제거
  • 02ArgoCD ApplicationSet을 활용한 브랜치 기반 환경 자동 생성 및 회수 메커니즘
  • 03Baseline 위에 필요한 앱만 얹는 얇은 계층 구조로 리소스 효율성 달성
  • 04Istio Gateway를 활용해 호스트별로 variant와 baseline을 가르는 정교한 라우팅 설계
  • 05포털 서비스가 지고 있던 매니페스트 관리 책임을 인프라 코드로 이관하여 복잡도 해소

RECOMMENDATION

마이크로서비스 아키텍처에서 환경 구축 비용 때문에 통합 테스트에 어려움을 겪는 팀에게 강력히 추천합니다. 특히 GitOps를 도입했음에도 불구하고 환경 생성 절차가 수동으로 남아있다면 이 아티클의 브랜치 기반 자동화 패턴이 훌륭한 해답이 될 것입니다.

The Problem

공유 dev 환경 하나를 두고 여러 개발자가 직렬로 점유해야 하는 병목 현상이 발생했으며, 격리된 환경을 구축하는 과정이 7단계에 이를 정도로 복잡하여 방치된 환경들이 전체 시스템의 안정성을 해치는 문제가 있었습니다.

The Solution

ArgoCD ApplicationSet의 SCM Provider Generator를 도입하여 특정 컨벤션의 브랜치를 push하면 자동으로 환경이 생성되고, 삭제 시 회수되는 구조를 설계했습니다. 또한, 전체 환경을 복제하는 대신 기준 환경(Baseline) 위에 변경된 앱만 덮어씌우고 Istio Gateway로 라우팅하는 Environment Variant 방식을 채택했습니다.

The Result

환경 생성 단계가 7단계에서 1단계로 단축되었으며, 매니페스트 변경 책임의 약 70%가 자동화로 대체되었습니다. 30일간 미사용된 브랜치를 자동으로 식별하고 15개의 유휴 환경을 일괄 정리함으로써 인프라 비용 절감과 운영 가시성을 동시에 확보했습니다.

Trade-off

별도의 로드밸런서를 생성하지 않고 공유 ALB와 입구를 사용하기 때문에, 호스트 기반 라우팅 설정이 누락될 경우 환경 접근이 불가능하며 런타임 헤더 기반의 동적 분기가 아닌 빌드 시점의 정적 경로 결정 방식에 의존합니다.

03

Key Concepts

Concept · 01

Environment Variant

기준이 되는 Baseline 환경 위에 개발자가 수정한 특정 애플리케이션만 복제하여 띄우는 격리된 통합 테스트 환경입니다.

  • 전체 클러스터를 복제하지 않아 리소스 소모가 적음
  • 독립적인 전용 주소(host)를 부여받아 독립적인 검증 가능
Concept · 02

ArgoCD ApplicationSet

여러 대상 클러스터나 저장소 브랜치에 대해 ArgoCD Application을 대량으로 자동 생성하고 관리할 수 있게 해주는 컨트롤러입니다.

  • SCM Provider를 통해 특정 패턴의 브랜치를 감시
  • 브랜치 생성/삭제에 따라 환경 앱 묶음을 자동으로 Provisioning/Pruning
Concept · 03

Istio Gateway

서비스 메시 환경에서 클러스터 입구로 들어오는 트래픽을 제어하고 가상 서비스로 라우팅하는 게이트웨이 설정입니다.

  • 호스트 헤더를 식별하여 특정 Variant 환경으로 트래픽 분기
  • Variant에 없는 앱에 대한 요청은 자동으로 Baseline 파드로 연결