피드로 돌아가기
뱅크샐러드 기술블로그DevOps
원문 읽기
하루에 1000번 배포하는 조직 되기
뱅크샐러드가 Git-Flow에서 Lightweight Branching으로 전환하고 배포 자동화를 구축해 일일 배포 횟수를 4배 증대
AI 요약
Context
Git-Flow 기반의 기존 배포 프로세스에서 하나의 기능 배포에 5번의 브랜치 전환, 6번의 Pull Request, 6번의 Code Review가 필요했습니다. 이로 인해 배포가 번거로워져 병합된 변경사항이 배포되지 않은 채 쌓이면서 한 번에 많은 변경사항을 포함한 위험한 배포가 발생했습니다. Tag 기반 배포는 특정 기능의 장애 시 전체 기능을 롤백해야 하는 문제가 있었습니다.
Technical Solution
- Lightweight Branching Model 도입: master 브랜치 단일화, feature/hotfix 모두 master 기반 생성, Squash and merge 방식으로 각 PR을 배포 가능한 단위로 관리
- Commit Hash 기반 배포로 전환: Semantic Versioning 대신 commit hash 사용, 개별 PR 단위 롤백 가능 (Revert Pull Request 기능 활용)
- GitHub Actions 기반 CI/CD 자동화: 모든 PR에 lint, unit test 자동 실행, master 병합 후 자동으로 Docker image 빌드 및 registry 푸시
- Kubernetes Deployment YAML을 Git에 관리: 수동 kubectl 명령 제거, 모든 설정 변경사항을 코드로 추적 가능하게 구성
- in-house experiment platform을 통한 단계적 rollout: deploy(Docker registry 업로드)와 rollout(실제 트래픽 전환)을 분리, 모니터링 기반 점진적 배포
Impact
일일 배포 횟수가 기존 대비 4배 증가했습니다.
Key Takeaway
MSA 기반 조직에서 빈번한 배포가 필요할 때는 버전 관리 중심에서 commit 단위 배포로 전환하고, deploy와 rollout을 명확히 분리해야 합니다. 이를 통해 배포 자체의 횟수는 늘되 실제 위험도는 낮출 수 있습니다.
실천 포인트
Microservice 기반의 팀에서 현재 Git-Flow를 사용 중이라면, master 브랜치 단일화 + Squash merge + commit hash 기반 배포로 전환했을 때 PR당 필요한 리뷰 사이클을 2~3회에서 1회로 단축할 수 있습니다. 추가로 deploy와 rollout을 코드 레벨에서 분리하면 배포 빈도 증가에도 불구하고 장애 영향도를 최소화할 수 있습니다.