쿠팡 출신 개발자의 장애 리스크 없이 배포하는 방법
배포를 두려워 하는 이유
- 영향도
- 콜백
따라서 영향도 최소화 및 쉽고 빠른 롤백을 구축해놓는게 중요하다.
기능 플래그
- 점진적 전달
- 기능 플래그
- 배포와 출시의 분리
- 데이터 측정
- 사례
점진적 전달(Progressive Delivery)
- 기능 출시를 제어
- 일부 사용자들한테만 먼저 기능을 출시
- 주요 지표를 측정
- 지표에 문제가 있으면 롤백
사용자 기준
기능 플래그(Feature Flag)
- on / off 스위치
- Rollout
- Targeting
배포 전략
블루 그린 배포
v1이 있을 때 v2를 배포하고, 로드밸런서로 v2를 가리키게해서 다운 없이 배포를 할 수 있다.
카나리 배포
하나 혹은 일부 서버에만 v2를 배포하고, 나머지는 기존버전으로 로드밸런싱 해놓고, 점차 늘려가는 방식.
코드배포와 기능출시가 한번에 이루어짐. 고객기준이 아닌 서버기준
기능 플래그
배포를 한 이후, 신규 기능은 적용하지 않는다. 모두 배포된 상태에서 기능을 배포할 수 있는 것이다.
배포와 출시의 분리
- 코드를 배포해도 기능 출시는 되지 않음
- 운영환경에서 쉽게 테스트
- 점진적 출시를 통한 영향도 최소화
데이터 측정
- 코드 배포(기능출시 X)
- 일부 사용자 출시(버그 체크)
- 측정(서비스 영향도 확인)
- 점진적 출시
- 출시
배포 없이 기능을 키고, 끌 수 있다.
A/B 테스트
사용자 그룹을 A, B로 나눠서 대조를 하면서 테스트 하는 방법.
기능 플래그 + A/B 테스트
- 배포와 출시의 분리
- 적은 트래픽으로도 영향도를 확인 할 수 있음
- 출시한 기능의 영향도를 파악 할 수 있다.
- 언제든지 롤백 가능
SQS를 Kafka로 전환 하는것을 테스트 할 때 WAS에서 보내는 것을 기능 플래그를 사용하면 간단하게 변경 가능하다. 극소량만 신규로 보내서 모니터링을하고, 문제가 없다면 점진적으로 늘려나가는 것이다.
Coupang, Netflix, Uber 등 여러 회사들이 기능플래그와 A/B 테스트를 사용한다.
사용자 식별자와 기능플래그를 분류해서 사용자에게는 일관성있게 서비스한다.
Q&A
서버단에서 기능 플래그는 구현하는건가요? 프론트단에서 한다면 사용자가 조작해서 사용이 가능할것같은데 이런것에 대한 대응법은 어떤것이있나요?
모바일 또는 브라우저에서도 동작이 가능한데, 코드에서 보여줬듯이 분기문을 통해서 이미 랜더링 된 후에 사용자에게 노출되므로 관련이 없고, 분기 이후에 Api호출을 막아서 사용자가 접근하지 못하게 한다. 조심해야함.
서버의 배포룰 경우를 따지면 DB배포가 포함되는 경우는 on/off 기능을 적용하기 애해한 부분이 많습니다. 특히 DB이중화 를 이용하는 경우에는 어떻게 하나요?
DB에도 Feature flag를 달 수 있다. DB이중화를 이용해도 가능함.