기능 플래그 - AWS 권장 가이드

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

기능 플래그

기능 플래그는 마이크로 프런트엔드에서 구현하여 여러 환경에서 기능을 테스트하고 릴리스하는 조정을 용이하게 할 수 있습니다. 기능 플래그 기법은 부울 기반 저장소에서 결정을 중앙 집중화하고 이를 기반으로 동작을 유도하는 것으로 구성됩니다. 특정 시점까지 숨길 수 있는 변경 사항을 자동으로 전파하는 동시에 차단될 수 있는 새 기능에 대한 새 릴리스를 잠금 해제하여 팀 속도를 줄이는 데 자주 사용됩니다.

특정 날짜에 시작될 마이크로 프런트엔드 기능을 작업하는 팀의 예를 생각해 보세요. 기능은 준비되었지만 독립적으로 릴리스된 다른 마이크로 프런트엔드의 변경 사항과 함께 릴리스해야 합니다. 두 마이크로 프론트엔드의 릴리스를 차단하면 안티 패턴으로 간주되며 배포 시 위험이 증가합니다.

대신 팀은 렌더링 시간(공유 특성 플래그 API에 대한 HTTP 호출을 통해) 동안 둘 다 사용하는 부울 특성 플래그를 데이터베이스에 생성할 수 있습니다. 팀은 프로덕션으로 시작하기 전에 프로젝트 간 기능 및 비기능 요구 사항을 확인하기 True 위해 부울 값이 로 설정된 테스트 환경에서 변경 사항을 릴리스할 수도 있습니다.

기능 플래그 사용의 또 다른 예는 QueryString 파라미터를 통해 특정 값을 설정하거나 쿠키에 특정 테스트 문자열을 저장하여 플래그 값을 재정의하는 메커니즘을 구현하는 것입니다. 제품 소유자는 시작 날짜까지 다른 기능의 릴리스 또는 버그 수정을 차단하지 않고 기능을 반복할 수 있습니다. 지정된 날짜에 데이터베이스의 플래그 값을 변경하면 팀 간 조정 릴리스 없이 프로덕션 환경에서 변경 사항을 즉시 볼 수 있습니다. 기능이 릴리스되면 개발 팀은 코드를 정리하여 이전 동작을 제거합니다.

다른 사용 사례에는 컨텍스트 기반 기능 플래그 시스템 릴리스가 포함됩니다. 예를 들어 단일 웹 사이트가 여러 언어로 고객에게 서비스를 제공하는 경우 특정 국가의 방문자만 기능을 사용할 수 있습니다. 기능 플래그 시스템은 국가 컨텍스트를 보내는 소비자에 따라 달라질 수 있으며(예: Accept-Language HTTP 헤더 사용) 해당 컨텍스트에 따라 다른 동작이 있을 수 있습니다.

기능 플래그는 개발자와 제품 소유자 간의 협업을 촉진하기 위한 강력한 도구이지만 코드 베이스가 크게 저하되지 않도록 사람들의 주의를 기울입니다. 여러 기능에서 플래그를 활성 상태로 유지하면 문제 해결 시 복잡성이 증가하고, JavaScript 번들 크기가 증가하며, 궁극적으로 기술 부채가 누적될 수 있습니다. 일반적인 완화 활동은 다음과 같습니다.

  • 플래그 뒤의 각 기능을 유닛 테스트하여 버그 발생 가능성을 줄입니다. 그러면 테스트를 실행하는 자동화된 CI/CD 파이프라인에 더 긴 피드백 루프가 발생할 수 있습니다.

  • 코드 변경 중에 번들 크기 증가를 측정하는 도구 생성, 코드 검토 중에 완화할 수 있음

AWS 는 Amazon CloudFront 함수 또는 Lambda@Edge를 사용하여 엣지에서 A/B 테스트를 최적화하기 위한 다양한 솔루션을 제공합니다. 이러한 접근 방식은 가정을 주장하는 데 사용하는 솔루션 또는 기존 SaaS 제품을 통합하는 복잡성을 줄이는 데 도움이 됩니다. 자세한 내용은 A/B 테스트를 참조하세요.