

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

# 기능 플래그
<a name="feature-flags"></a>

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

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

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

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

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

기능 플래그는 개발자와 제품 소유자 간의 협업을 촉진하기 위한 강력한 도구이지만 코드 베이스가 크게 저하되지 않도록 사람들의 주의를 기울입니다. 여러 기능에서 플래그를 활성 상태로 유지하면 문제 해결 시 복잡성이 증가하고, JavaScript 번들 크기가 증가하며, 궁극적으로 기술 부채가 누적될 수 있습니다. 일반적인 완화 활동은 다음과 같습니다.
+ 플래그 뒤의 각 기능을 유닛 테스트하여 버그 발생 가능성을 줄입니다. 그러면 테스트를 실행하는 자동화된 CI/CD 파이프라인에 더 긴 피드백 루프가 발생할 수 있습니다.
+ 코드 변경 중에 번들 크기 증가를 측정하는 도구 생성, 코드 검토 중에 완화할 수 있음

AWS 는 Amazon CloudFront 함수 또는 Lambda@Edge를 사용하여 엣지에서 A/B 테스트를 최적화하기 위한 다양한 솔루션을 제공합니다. 이러한 접근 방식은 가정을 주장하는 데 사용하는 솔루션 또는 기존 SaaS 제품을 통합하는 복잡성을 줄이는 데 도움이 됩니다. 자세한 내용은 [A/B 테스트를](https://aws.amazon.com/developer/application-security-performance/articles/a-b-testing/) 참조하세요.