
FF4j는 Feature Toggle 패턴의 구현체입니다.
기능 토글(Feature Toggle): 런타임에 기능을 활성화 및 비활성화합니다. 배포가 필요 없습니다. 코드에서 동적 조건(if/then/else)으로 보호되는 여러 경로를 구현하세요.
역할 기반 토글링(Role-based Toggling): 플래그 값뿐만 아니라 역할(role)과 그룹으로 접근을 제어하여 기능을 활성화할 수 있습니다(카나리 릴리스). Spring Security를 비롯한 다양한 프레임워크를 지원합니다.
전략 기반 토글링(Strategy-based Toggling): 기능 활성화 여부를 평가하는 커스텀 조건(Strategy Pattern)을 구현할 수 있습니다. 기본 제공되는 조건으로는 화이트/블랙리스트, 시간 기반, 표현식 기반 등이 있습니다. Drools 규칙 엔진과 같은 외부 소스를 연결할 수도 있습니다.
AOP 기반 토글링(AOP-driven Toggling): 중첩된 if 문 대신 애너테이션을 사용하여 코드를 깔끔하고 읽기 쉽게 유지하세요. Spring AOP 덕분에 대상 구현체가 런타임에 선택되므로 기능 상태에 따라 동작이 결정됩니다.
기능 모니터링(Features Monitoring): ff4j는 각 기능 실행 시 조건을 평가하므로 이벤트와 메트릭을 수집·기록하여 멋진 대시보드를 만들거나 시간에 따른 기능 사용량 곡선을 그릴 수 있습니다.
감사 추적(Audit Trail): 모든 작업(생성, 수정, 삭제, 토글)을 추적하고 감사 로그에 저장하여 문제 해결에 활용할 수 있습니다. 권한 관리(AuthorizationManager)를 통해 사용자를 식별할 수도 있습니다.
웹 콘솔(Web Console): 웹 UI로 FF4j(기능 및 속성 포함)를 관리할 수 있습니다. 라이브러리에 서블릿으로 포함되어 있어 백엔드 애플리케이션에서 노출할 수 있습니다. 약 10개 언어를 지원합니다.
다양한 데이터베이스 선택(Wide choice of Databases) 자랑스러운 점: 기능, 속성, 이벤트를 저장하기 위해 20개 이상의 데이터베이스 기술을 지원합니다. 동일한 비즈니스 모델에 여러 구현체를 제공합니다. 확장 포인트 덕분에 자체 구현도 쉽습니다.
Spring Boot 스타터(Spring Boot Starter) 마이크로서비스에 ff4j-spring-boot-starter 의존성을 추가하면 웹 콘솔과 REST API를 즉시 사용할 수 있습니다. (백엔드 앱용으로 사용. 현재 Spring Boot 2x 호환: 👉 SAMPLES
REST API 웹 API를 통해 FF4j를 운영할 수 있습니다. 다른 언어, 특히 JavaScript 프론트엔드에서 ff4j를 사용하려면 이 방식을 사용하세요. (또한 FeatureStoreHttp를 활용하면 마이크로서비스가 DB에 직접 연결하지 않아도 됩니다.
속성(Properties, CMDB) 기능 상태뿐만 아니라 모든 속성 값을 저장할 수 있습니다. 런타임에 변경할 수 있는 속성을 생성하세요. Spring, Archaius, commons-config, Consul 등 널리 사용되는 프레임워크와 통합되어 있습니다.
(분산) 캐시(Distributed Cache) 조건 평가는 DB에 부하를 줄 수 있습니다(높은 히트율). ff4j는 이를 완화하기 위해 로컬 및 분산 캐시를 제공합니다. (기능을 수정하면 캐시도 제거됩니다). JSR-107을 활용하여 대부분의 캐시 솔루션을 지원합니다.
명령줄 인터페이스(Command Line Interface) 작업을 자동화하거나 웹 포트가 차단된 경우(아시죠, 프로덕션에서는...) SSH를 통해 당사의 명령줄 인터페이스(CLI), 셸 #devOps를 사용할 수 있습니다. 스토리지와 직접 상호작용합니다.
JMX 및 MBean(JMX and MBeans) JMX를 통해 제한된 작업 집합을 수행할 수 있습니다. ff4j는 외부 도구(Nagios 등)에서 메트릭을 읽거나 기능을 토글할 수 있도록 일부 MBean을 노출합니다. 모든 애플리케이션이 웹 기반인 것은 아닙니다.(배치, 셸, 독립 실행형 등...)
더 자세한 정보는 ff4j.org 또는 위키의 참조 문서(Reference Documentation)에서 확인할 수 있습니다.
홈 페이지
기능
모니터링
이 프로젝트는 기여해 주신 모든 분들 덕분에 존재합니다. [기여하기].
모든 후원자님께 감사드립니다! 🙏 [후원자가 되기]
스폰서가 되어 이 프로젝트를 지원해 주세요. 귀하의 로고가 웹사이트 링크와 함께 여기에 표시됩니다. [스폰서가 되기]