9.6 KiB
title, source_type, url, archive_url, related_branches, related_projects, tags, status, confidence, created, last_reviewed
| title | source_type | url | archive_url | related_branches | related_projects | tags | status | confidence | created | last_reviewed | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Togglz · FF4J — Java feature toggle library 비교 (adapter on/off 대안) | company-tech-blog | https://www.togglz.org/ |
|
|
|
raw | medium | 2026-05-22 | 2026-05-27 |
Togglz · FF4J — Java feature toggle 라이브러리
Layer:
raw/company-tech-blogs/— OSS feature toggle 라이브러리 자체 소개 페이지 (Togglztogglz.org, FF4Jff4j.github.io) verbatim. ca-tmplfeature-integration-adapter-templatesbranch 의 대안 5 (runtime-time feature toggle library) 비교 근거. 검증된 요약은/ingest후wiki/concepts/에 별도 작성.
Parent / 활용 branch (필수)
| Branch | 이 자료가 정당화하는 결정 |
|---|---|
| raw/branch-notes/feature-integration-adapter-templates | adapter on/off 의 startup-time toggle 채택 시, runtime-time feature toggle 라이브러리 (Togglz/FF4J) 와의 시맨틱 차이 명시 — adapter 자체 on/off ≠ adapter 내부 분기 |
| raw/branch-notes/feature-env-driven-runtime-configuration | env-driven runtime configuration (startup env flag) 가 default 인 이유: 외부 상태 저장 (DB/Redis/JCache) 의존 회피 |
| raw/project-notes/ca-skeleton-operational-contract | Group I — Integration adapter templates 대안 비교 매트릭스 |
컨텍스트 / 왜 저장했는지
ca-tmpl feature-integration-adapter-templates branch의 대안 5. branch는 @ConditionalOnProperty 기반 startup-time toggle을 채택했음. Togglz / FF4J는 runtime-time toggle 라이브러리 → adapter 자체의 on/off가 아니라 adapter 호출 시점에 동적 분기가 필요할 때의 대안. 두 영역의 경계를 명확히 보존.
출처 / Source
- 원본 URL (Togglz): https://www.togglz.org/
- 원본 URL (FF4J): https://ff4j.github.io/
- 아카이브 URL: (미수집)
- 저자 / 조직: Togglz (Christian Kaltepoth, Apache 2.0 OSS) / FF4J (Cedrick Lunven 외, Apache 2.0 OSS)
- 발행일: rolling (라이브러리 공식 페이지)
- 마지막 확인일: 2026-05-27
- 신뢰도 주의: OSS 라이브러리 자체 소개 페이지로 자기 제품 마케팅 포함. 공식 best practice 로 인용 금지.
핵심 인용 / Key quotes (verbatim)
(Togglz togglz.org 메인 페이지)
[§Togglz intro] "Togglz is an implementation of the Feature Toggles pattern for Java."
[§Togglz intro] "Feature Toggles are a very common agile development practices in the context of continuous deployment and delivery."
[§Togglz intro] "This allows you to enable or disable these features at application runtime, even for individual users."
(FF4J ff4j.github.io 메인 페이지)
[§FF4J tagline] "Feature Flags for Java made Easy"
[§FF4J runtime] "Enable. and disable features at runtime - no deployments. In your code implement multiple paths protected by dynamic predicates"
[§FF4J strategies] "Implement custom predicates (Strategy Pattern) to evaluate if a feature is enabled."
[§FF4J strategies] "Some are provided out of the box: White/Black lists ,Time based, Expression based."
[§FF4J spring-boot] "Import ff4j-spring-boot-starter dependency in your microservices to get the web console and rest api working immediately."
Claims Extracted / 추출된 주장
| Claim ID | Claim (이 자료가 직접 말하는 것) | Evidence quote | Strength | Applies to | Does not prove |
|---|---|---|---|---|---|
| TOGGLZ-FF4J-C1 | Togglz 는 Java 용 Feature Toggles 패턴 구현체 | [§Togglz intro] "Togglz is an implementation of the Feature Toggles pattern for Java." | company-case-study |
Java 애플리케이션의 feature toggle 도입 시 후보 라이브러리 | feature toggle 패턴 자체의 정의가 Togglz 만의 것이라는 뜻은 아님 (Fowler 의 일반 패턴) |
| TOGGLZ-FF4J-C2 | Togglz 는 application runtime 에서 feature 활성/비활성, 개별 user 단위 활성도 지원 | [§Togglz intro] "This allows you to enable or disable these features at application runtime, even for individual users." | company-case-study |
runtime 동적 toggle 이 필요한 시나리오 | 개별 user 매칭 메커니즘 (username/role/percentage) 의 정확한 구현은 본 인용에 없음 — 별도 docs 확인 필요 |
| TOGGLZ-FF4J-C3 | FF4J 는 deployment 없이 runtime 에서 feature 활성/비활성 가능, dynamic predicate 로 다중 경로 보호 | [§FF4J runtime] "Enable. and disable features at runtime - no deployments. In your code implement multiple paths protected by dynamic predicates" | company-case-study |
FF4J 도입 시 코드 안에 분기 경로 작성 | "no deployments" 가 모든 backend store 구성에서 보장된다는 뜻은 아님 — feature store 변경 자체는 별도 |
| TOGGLZ-FF4J-C4 | FF4J 는 Strategy Pattern 기반 custom predicate 를 지원하며 기본 제공 strategy 는 White/Black list, Time based, Expression based | [§FF4J strategies] "Implement custom predicates (Strategy Pattern) to evaluate if a feature is enabled." + "Some are provided out of the box: White/Black lists ,Time based, Expression based." | company-case-study |
FF4J activation strategy 선택 시 | 위 3개 외 strategy (예: percentage rollout, geographic) 가 기본 제공되는지는 인용 범위 밖 |
| TOGGLZ-FF4J-C5 | FF4J 는 Spring Boot starter (ff4j-spring-boot-starter) 를 제공하며 import 시 web console + REST API 가 즉시 동작 |
[§FF4J spring-boot] "Import ff4j-spring-boot-starter dependency in your microservices to get the web console and rest api working immediately." | company-case-study |
Spring Boot 마이크로서비스에 FF4J 통합 시 | console/REST API 의 인증·인가 default 정책은 본 인용에 없음 — 운영 환경 노출 전 별도 확인 필요 |
| TOGGLZ-FF4J-C6 | (부재) Togglz 의 Spring Boot starter / activation strategy 상세는 메인 페이지 인용 범위 내에 명시 없음 | (부재 자체가 claim) | needs-confirmation |
Togglz Spring Boot starter / activation strategy 정확한 동작 | Togglz 가 Spring Boot 를 지원 안 한다는 뜻 아님 — nav 메뉴에 "Spring Boot Starter" 링크는 존재하나 본 페이지 본문 인용 불가 |
Usage Boundaries / 적용 경계
- 이 자료가 직접 증명하는 것:
TOGGLZ-FF4J-C1~C5: Togglz/FF4J 의 자체 마케팅 문구 — Java runtime toggle, dynamic predicate, Spring Boot starter 존재
- 이 자료가 증명하지 않는 것:
TOGGLZ-FF4J-C6: Togglz 의 activation strategy 상세 / Spring Boot starter 동작- Togglz/FF4J 의 실제 production 운영 사례 (사용자 자체 마케팅이라 self-attestation)
- Togglz/FF4J 가 LaunchDarkly / Unleash 보다 우수하다는 비교 결론
- ca-tmpl 의
@ConditionalOnProperty가 Togglz/FF4J 보다 적합하다는 일반적 결론 (시맨틱 차이의 사례에만 한정)
- 내 프로젝트에 적용하려면 추가 확인이 필요한 것:
- ca-tmpl 의
env-keys.yamlregistry +owner_branchgovernance 를 Togglz/FF4J 의 enum/annotation 정의 모델과 어떻게 연결할지 - Togglz/FF4J 의 외부 feature store (DB/Redis/JCache) 가 ca-tmpl 의 "disabled adapter = bean 미등록" 원칙과 양립 가능한지
- ca-tmpl 의
메모 / Notes (내 프로젝트 해석)
검증되지 않은 내 추론은 여기에 두지 말 것 — wiki source-summary 단계에서.
- 적용 시나리오: 같은 adapter는 항상 enabled이지만 그 안의 특정 동작 경로만 user / role / percentage 기반으로 분기해야 할 때.
- 장점:
- Spring Boot Starter 제공 (
togglz-spring-boot-starter,ff4j-spring-boot-starter). - runtime UI / REST console → product team이 backend 배포 없이 toggle 조작.
- activation strategy (Username, GradualActivation, ScheduleActivation, Custom predicate).
- role-based access (FF4J).
- Spring Boot Starter 제공 (
- 단점 / ca-tmpl 적용 시 한계:
- adapter 자체 on/off에는 over-engineering: branch는 disabled adapter가 ApplicationContext에 bean으로조차 등록되지 않는 것을 요구. Togglz/FF4J는 bean은 있고 호출 시 분기. 시맨틱이 다름.
- 외부 상태 저장 의존: feature state를 DB / Redis / JCache에 저장 → adapter 비활성 시 의존성 늘어남 (모순).
- registry governance 부재: branch는
env-keys.yamlregistry +owner_branch강제. Togglz/FF4J는 toggle 정의가 enum/annotation + console에 분산. governance 레이어를 별도로 만들어야 함. - LaunchDarkly/Unleash와 같은 "deploy ≠ release" 문제 영역. adapter 통합 자체보다는 product feature flag 영역.
- ca-tmpl 결정과의 매핑:
- branch Layer 1-2-3: adapter 자체의 on/off (startup-time decision). Togglz/FF4J의 영역 아님.
- 만약 adapter는 항상 on이고 그 안의 분기만 runtime toggle해야 한다면, Togglz/FF4J 또는 LaunchDarkly/Unleash가 후보. 단 ca-tmpl baseline에 포함시키지 않는 게 branch 결정과 정합 (registry/owner governance가 없으면 forbidden).
- 채택 시점 후보: 50+ active toggle, 또는 product team이 console UI로 직접 toggle을 운영해야 할 때. infra adapter on/off에는 부적합.
Related / 관련
- 같은 주제 다른 raw: (미수집 — LaunchDarkly / Unleash 비교 자료 후보)
- 인용하는 branch:
- 인용하는 project:
- 인용한 wiki 요약: (미작성)