Encar- Backend Engineer

 

Feature Toggles (= Feature Flags)

 

소스 코드 상 특정 기능의 분기 설정을 유지 및 관리

런타임 시간 동안 특정 기능의 활성 및 비활성

테스트를 통한 점진적 릴리스 방법

 

New Feature -> Feature Toggle -> ON : 사용자에게 제공

                                                            OFF : 사용자에게 제공 X

 

'설정 값'의 관리

 

Local Store (properties, xml, yml 등)

-> 설정 값 변경 시 매번 배포 필요 (static)

Database

-> 설정 값 조회 시 매번 DB에 대한 조회 발생 (성능, 부하 이슈)

Remote Store

-> 여러 서버들의 설정 값을 하나의 원격 저장소에서 통합 관리

-> 설정 값 변경 시 배포 없이 빠르게 적용 가능 (dynamic)

-> 장애 발생 시 전체 장애로 이어질 수 있음 (H/A 구성 필수)

 

Consul

DNS 기반 서비스 디스커버리를 위해 2014년 출시된 소프트웨어이며 '분산 키-값 저장소', 세그멘테이션, 구성을 제공한다.

등록된 서비스와 노드들은 http 인터페이스나 dns 인터페이스를 사용하여 조회할 수 있다.

 

Clients -> Order System -> Feature Toggle (Consul) -> ON : New Java API

                                                                                               OFF : PL-SQL

 

레거시인 PL-SQL과 새로 만든 서버인 New Java API 서버가 있어.

그런데 새로 만든 서버가 갑자기 장애가 생겨.

그러면 Toggle OFF를 해서 거의 실시간에 가깝게 사용차의 요청을 레거시인 PL-SQL로 보낼 수 있는거야.

그 사이에 New Java API를 fix하고 Toggle ON을 하면 실시간/동적으로 New Java API 서버로 다시 요청을 흘려 보낼 수 있다.

 

이러한 과정을 거치면서, 테스트를 거치면서, 점진적으로 서비스를 배포할 수 있다.

 

Consul + Spring 상에서 구축

 

경험 공유

 

이 경우 추천:

- 레거시 개선, 중요 로직 수정 등 부담되는 작업의 점진적 배포

- 미완성 특정 기능의 빠른 적용 및 롤백

- 간단한 설정 정보 관리 (toggle, ratio, timeout, retry, ...)

- Consul 운영 시 H/A 구성, UI 비활성, 접속 제한

 

신기술 적용시 '인내와 끈기'는 필수!

안정성이 뛰어나고 Key/Value Store, Service Discovery, Service Mesh등을 지원하는 'Consul'을 개인적으로 추천!

 

 

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기