Feature Flag
App Config는 AWS가 제공하는 Feature Flag 서비스이다.
Feature Toggle이라고 불리기도 하는 Feature Flag는 Code를 업데이트 하거나 재배포 하지 않고도 기능을 관리할 수 있다.
Application 배포 시점과 사용자에게 기능을 배포하는 시점을 분리해서 제공할 수 있다고도 표현한다.
단순히 기능을 On/Off 하는것 뿐 아니라 다음과 같은 작업도 할 수 있다.
•
Application에서 일부 기능을 먼저 Open 하는 등의 점진적 배포
•
특정 환경에 관리자가 원하는 기능을 제공 (e.g. 미국 사용자에게만 다른 UI 제공)
•
일부 사용자에게 실험적으로 기능을 테스트하고 낮은 Risk로 Feature의 영향도를 평가
•
특정 기능에 문제 발생시 즉시 비활성화 가능
가장 중요한 것은 이 모든 작업이 Application의 재배포 없이 가능하다는 것이다.
CI/CD 과정에서 소요되는 시간, Side Effect 등을 고려할 때 CI/CD Pipeline이 구축되어 있다고 하더라도 배포를 너무 잦은 빈도로 하는것이 좋지는 않다고 생각한다.
기능 하나를 추가하거나 빼는 간단한 테스트를 위해서 매번 CI/CD를 기다리지 않고 Feature Flag 적절히 활용할 수 있을 것 같다.
이제 App Config를 사용해보면서 Feature Flag를 찍먹해보자
App Config를 사용한 Feature Flag 실습
Prerequsite
실습 개요
실습 - 환경 구축
실습 - Feature Flag 테스트
결론 & 느낀점
•
리소스 삭제는 리소스 생성의 역순으로 진행한다. Application을 바로 삭제하고 싶어도 Configuration Profile의 버전을 수동으로 모두 지워야 삭제가 가능하다.
•
Code를 작성할 때 Feature Flag를 염두하고 SDK를 추가해서 코딩을 해야 한다는 단점이 있지만, 귀찮음보단 얻는 이점이 더욱 큰 기능이라고 생각한다.
•
App Config는 Unleash, LaunchDarkly와 같은 전문 서비스에 비해 아직 기능적으로 많이 부족한 것 같다. LaunchDarkly는 국가별, 사용기기별 기능 제어와 같은 세세한 설정도 가능하다고 한다.
•
단순히 Feature On/Off 기능만 제공하는 것이 아니라, 일부 대상에게만 Feature 제공, 일부 환경에만 특정 Feature 제공 등과 같이 기능에 대한 전반적인 관리를 Feature Flag에서 하도록 구성하면 좋지 않을까 싶다.
•
트래픽이 발생할 때 마다 Application이 AWS App Config와 통신해서 변경된 Deploy가 있는지 확인하고, 있으면 업데이트 하는 것 같은데 이 과정에서 Resource 낭비나 성능 저하가 없는지 확인해볼 필요가 있을 것 같다.