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)' 옵션 제거
- 저장 완료 후 리스트 화면 이동 제거