docs: 구현 진행 문서 최종 업데이트 - 전 단계 완료
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
부모
c92bf0e5ad
커밋
60366816a6
@ -23,59 +23,68 @@
|
||||
|
||||
## Phase 1 — 긴급 안정화
|
||||
|
||||
- [ ] **1.1** 글로벌 동시 쿼리 제한 (Semaphore + Fair Queue)
|
||||
- TrackQueryInterceptor에 Semaphore 기반 글로벌 제한 추가
|
||||
- application-prod.yml에 websocket 설정 외부화
|
||||
- 상태: 대기
|
||||
- [x] **1.1** 글로벌 동시 쿼리 제한 (Semaphore + Fair Queue)
|
||||
- ActiveQueryManager에 Fair Semaphore 기반 글로벌 동시 쿼리 제한 추가 (기본 30개)
|
||||
- @Async 메서드 내에서 슬롯 획득 (인바운드 채널 블로킹 방지 설계)
|
||||
- application-prod.yml에 websocket.query 설정 외부화
|
||||
- 상태: **완료** (2026-02-06)
|
||||
|
||||
- [ ] **1.2** 쿼리 완료 시 리소스 반환 보장
|
||||
- ChunkedTrackStreamingService finally 블록에 releaseQuery() 추가
|
||||
- StompTrackStreamingService finally 블록에 releaseQuery() 추가
|
||||
- 상태: 대기
|
||||
- [x] **1.2** 쿼리 완료 시 리소스 반환 보장
|
||||
- ChunkedTrackStreamingService finally 블록에 releaseQuery() + releaseQuerySlot() 추가
|
||||
- StompTrackStreamingService finally 블록에 releaseQuery() + releaseQuerySlot() 추가
|
||||
- 세션별 쿼리 카운트 감소 누락 수정
|
||||
- 상태: **완료** (2026-02-06)
|
||||
|
||||
- [ ] **1.3** CachedThreadPool → 제한된 ThreadPoolExecutor 교체
|
||||
- CancellableQueryManager의 newCachedThreadPool 교체
|
||||
- 상태: 대기
|
||||
- [x] **1.3** CachedThreadPool → 제한된 ThreadPoolExecutor 교체
|
||||
- CancellableQueryManager: newCachedThreadPool → ThreadPoolExecutor(core:5, max:20, queue:100)
|
||||
- CallerRunsPolicy로 큐 포화 시 자연 백프레셔
|
||||
- 상태: **완료** (2026-02-06)
|
||||
|
||||
- [ ] **1.4** DB 커넥션 풀 재분배 (prod)
|
||||
- application-prod.yml Query/Collect/Batch 풀 사이즈 조정
|
||||
- 상태: 대기
|
||||
- [x] **1.4** DB 커넥션 풀 재분배 (prod)
|
||||
- Query: 60→120(min 20), Collect: 20→80(min 15), Batch: 20→30(min 5)
|
||||
- 총 230/250, 예비 20개
|
||||
- 상태: **완료** (2026-02-06)
|
||||
|
||||
---
|
||||
|
||||
## Phase 2 — 취소 및 정리 로직 완성
|
||||
|
||||
- [ ] **2.1** ChunkedTrackStreamingService 쿼리 취소 구현
|
||||
- AtomicBoolean 취소 플래그 + processTableRange 내 체크포인트
|
||||
- 상태: 대기
|
||||
- [x] **2.1** ChunkedTrackStreamingService 쿼리 취소 구현
|
||||
- queryCancelFlags(ConcurrentHashMap<String, AtomicBoolean>) 추가
|
||||
- streamChunkedTracks 시작 시 등록, 전략별 루프 전 확인, finally에서 정리
|
||||
- cancelQuery()에 실제 플래그 설정 로직 구현 (기존 TODO 해소)
|
||||
- isQueryCancelled()에 취소 플래그 통합 확인
|
||||
- 상태: **완료** (2026-02-06)
|
||||
|
||||
- [ ] **2.2** 쿼리 관리 시스템 통합
|
||||
- ActiveQueryManager를 단일 진실의 원천으로 통합
|
||||
- 상태: 대기
|
||||
- [x] **2.2** 쿼리 관리 시스템 통합
|
||||
- StompTrackController의 중복 completeQuery() 제거
|
||||
- 리소스 정리를 서비스 finally 블록에서 일괄 처리하도록 단일화
|
||||
- 상태: **완료** (2026-02-06)
|
||||
|
||||
---
|
||||
|
||||
## Phase 3 — 백프레셔 고도화
|
||||
|
||||
- [ ] **3.1** 콜백 기반 버퍼 추적
|
||||
- CompletableFuture + Thread.sleep(100) → 즉시 감소 전환
|
||||
- 상태: 대기
|
||||
- [x] **3.1** 콜백 기반 버퍼 추적
|
||||
- CompletableFuture+Thread.sleep(100) → try-finally 즉시 감소로 전환
|
||||
- 상태: **완료** (2026-02-06)
|
||||
|
||||
- [ ] **3.2** 적응형 전송 지연
|
||||
- 버퍼 사용률 기반 동적 지연
|
||||
- 상태: 대기
|
||||
- [x] **3.2** 적응형 전송 지연
|
||||
- ChunkedTrack: 버퍼 사용률(%) 기반 4단계 적응형 지연 (10~200ms)
|
||||
- StompTrack: 큐 사용률 + 데이터 크기 복합 적응형 지연
|
||||
- 상태: **완료** (2026-02-06)
|
||||
|
||||
---
|
||||
|
||||
## Phase 4 — 설정 외부화 및 모니터링
|
||||
|
||||
- [ ] **4.1** WebSocketProperties 설정 클래스
|
||||
- 하드코딩된 설정값을 application.yml로 외부화
|
||||
- 상태: 대기
|
||||
- [x] **4.1** WebSocketProperties 설정 클래스
|
||||
- @ConfigurationProperties(prefix = "websocket")로 query/transport/backpressure 설정 바인딩
|
||||
- 상태: **완료** (2026-02-06)
|
||||
|
||||
- [ ] **4.2** 모니터링 엔드포인트
|
||||
- /api/v1/monitor/websocket/status
|
||||
- 상태: 대기
|
||||
- [x] **4.2** 모니터링 엔드포인트
|
||||
- GET /api/websocket/load-control — 글로벌 동시 제한, 대기 큐, 활성 쿼리 상세, 메모리
|
||||
- 상태: **완료** (2026-02-06)
|
||||
|
||||
---
|
||||
|
||||
@ -83,4 +92,10 @@
|
||||
|
||||
| 날짜 | Phase | 커밋 메시지 | 해시 |
|
||||
|------|-------|------------|------|
|
||||
| | | | |
|
||||
| 2026-02-06 | 1.1+1.2 | feat: 글로벌 동시 쿼리 제한(Semaphore) 및 리소스 반환 보장 | 78ff307 |
|
||||
| 2026-02-06 | 1.3 | fix: CachedThreadPool → 제한된 ThreadPoolExecutor 교체 | 2191671 |
|
||||
| 2026-02-06 | 1.4 | perf: DB 커넥션 풀 재분배 (총 250개, prod) | 122a247 |
|
||||
| 2026-02-06 | 2.1 | feat: ChunkedTrackStreamingService 쿼리 취소 로직 구현 | e073007 |
|
||||
| 2026-02-06 | 2.2 | refactor: 쿼리 생명주기 관리 서비스 finally 블록으로 단일화 | 28908e1 |
|
||||
| 2026-02-06 | 3 | perf: 백프레셔 고도화 - 정확한 버퍼 추적 및 적응형 지연 | 7b7e283 |
|
||||
| 2026-02-06 | 4 | feat: WebSocket 설정 외부화 및 부하 제어 모니터링 엔드포인트 | c92bf0e |
|
||||
|
||||
불러오는 중...
Reference in New Issue
Block a user