- makeBucketUsingInflowVO: 어댑터/인터페이스 단일 버킷 threshold 리필을 greedy → intervally 변경
- makeGroupBucket: 그룹 threshold 버킷 동일하게 수정
- DualInflowControlManagerMakeBucketTest: 버킷 생성 로직 직접 검증 테스트 추가
- InflowControlManagerTest: @BeforeEach reload + spike/burst 경계 케이스 테스트 추가
- SQL 픽스처: MIN 단위 TEST_ADAPTER/TEST_INTERFACE/test-group-quota 항목 추가
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- InflowType 열거형 추가 (ADAPTER/INTERFACE/CLIENT 타입 코드 캡슐화)
- InflowControlDAO: InflowType 기반 범용 메서드 추가, 기존 메서드 위임
- RequestProcessor: private→protected 전환, 클라이언트/어댑터/인터페이스
유량제어 훅 메서드 5개 추가 (checkClientInflow 등)
- dual 패키지 신규 추가
· DualCustomBucket: perSecond/threshold 이중 버킷, 차단 원인 구분
· DualBucket: isAdapterPassDetail 등 차단 원인 반환 인터페이스
· DualInflowControlManager: 그룹 메트릭 카운팅(TargetMetrics), 리로드 연동
· DualRequestProcessor: 클라이언트 유량제어 + 상세 오류 메시지 훅 구현
- 단위 테스트 5종 추가 (DualCustomBucket, Manager, Metrics, RequestProcessor, Concurrency)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1. 맵 5개를 volatile + ConcurrentHashMap으로 변경
- 비동기 읽기(isGroupPass 등) 중 HashMap 구조 변경으로 발생하던 race condition 제거
2. initAdapter/Interface/Group()에서 빌드-완성 후 원자적 교체 패턴 적용
- 신규 맵을 완전히 구성한 뒤 this.field = newMap으로 한 번에 교체
- 구→신 전환 중 불완전 상태가 외부에 노출되던 문제 제거
3. removeAdapter/Interface/Group()에 synchronized 추가
- 락 없이 맵을 수정하던 메서드와 reload 사이의 race condition 방지
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
groupBucketList private 필드에 리플렉션 없이 접근할 수 있도록
getGroupBucket(String groupId) public 메서드 제공.
그룹 테이블 테스트 픽스처 SQL 추가 및 InflowControlManagerTest에
getGroupBucket() 동작 검증 테스트 케이스 2개 추가.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- CustomGroupBucket 클래스 신규 생성: 초당/추가 임계치를 별도 LocalBucket으로 분리하여 개별 토큰 조회 가능
- InflowControlManager 수정: groupBucketList 타입을 CustomGroupBucket으로 변경, makeGroupBucket() 메서드 추가
- InflowGroupBucketService 단순화: 복잡한 리플렉션 로직 제거, CustomGroupBucket 직접 메서드 사용
- 현황 탭에 전체 인스턴스 합산 요약 추가 (활성 인스턴스 수, 초당/추가 임계치 합산)
- 추가 임계치 시간단위에서 '초(SEC)' 옵션 제거
- 저장 완료 후 리스트 화면 이동 제거