[BE-10] 통합 와이어업 + 데모 게이팅 E2E (통합 티켓)

작업 내용 (설계 의도)

변경 사항

공통 파일 수정(Single Writer 통합) + 전체 시나리오 E2E. 근거 TDD: ../TDD.md Testing Plan(scenario)·Release Scenario·Success Metrics. 공통 파일은 이 티켓 단독으로 수정해 wave 내 머지 충돌을 방지.

  • SecurityConfig.kt#configureAuthorization/feature-demo/** permitAll 1줄 추가(데모는 X-User-Id 기반, AUTH-04 관례). 관리 API /admin/feature-flags는 기존 /admin/** hasRole ADMIN가 커버 — 추가 불필요.
  • 필요 시 application.yml에 pub/sub 관련 설정 확인(별도 신규 키 없으면 생략).
  • 데모 게이팅 E2E 시나리오 테스트(scenario 레이어, Testcontainers MySQL+Redis): 관리 API로 플래그 생성/전이 → 데모 엔드포인트 동작 검증.
  • 롤백: SecurityConfig 변경은 permitAll 1줄 제거로 역전.

의존

  • BE-08 (관리 API), BE-09 (데모 엔드포인트) — 최종 통합
  • BE-12 (Observability 지표 — SM3 다중인스턴스 검증 시 전파 지연 지표 활용)

다이어그램

처리 흐름 (E2E)

sequenceDiagram
    participant T as E2E 테스트
    participant A as AdminApi
    participant Demo as DemoApi
    T->>A: POST 플래그 ON 생성
    T->>Demo: GET /feature-demo/hello (200)
    T->>A: POST archive
    T->>Demo: GET (503, 재배포 없이)
    T->>A: POST activate
    T->>Demo: GET (수 초 내 200)

테스트 케이스 (scenario E2E)

  • 플래그 ON 생성 후 데모 엔드포인트가 200을 반환한다
  • 플래그 archive(OFF) 후 데모 엔드포인트가 재배포 없이 503을 반환한다
  • 재활성(ON) 후 수 초 내 데모 엔드포인트가 200으로 복구된다(전파)
  • PercentageRollout 10→50→100 단계에서 이미 노출된 userId는 계속 노출된다(sticky·단조 증가)
  • ARCHIVED 플래그는 목록 조회의 활성 필터에서 제외되고 평가 시 기본값을 반환한다
  • 관리 변경 성공 건수와 감사 로그 적재 건수가 일치한다(커버리지 100%)
  • Redis 중단 후에도 로컬 스냅샷으로 평가가 지속된다(폴백)
  • 다중 인스턴스 킬스위치 전파(SM3): 같은 Redis에 붙은 2개 구독자(compose 스케일아웃 2 인스턴스 또는 2 Spring 컨텍스트/2 구독자)에서 플래그 변경 후 양쪽 로컬 반영이 3초 이내임을 시각차로 검증한다(20000TPS 부하 실측은 형제 과제 위임 — 경계)