Actions
새기능 #521
open[성능/비용][P2] 묶음
Status:
진행
Priority:
보통
Assignee:
-
Start date:
06/27/2026
Due date:
% Done:
70%
Estimated time:
Description
성능·비용 개선:
- 전역 LLM cap이 요청당 1회 카운트(실제 호출 ~10배) + 인메모리 → 호출 단위 계수 + Redis 백업 (main.py:96-115).
- async SSE 제너레이터의 blocking time.sleep/sync requests → 배치 중 백오피스 전체 멈춤. asyncio.sleep/to_thread (lyrics_fetcher:459, lyrics_translator:880).
- 차트 집계 TTL 1h → 과거(불변) 데이터 매시간 재계산. 과거 TTL 상향/사전계산.
- /songByName,/month,/day 미캐싱 + 비sargable LIKE. 캐싱+디바운스.
- fuzzy TRANSLATE/LIKE 풀스캔 → artist_name_norm 컬럼 + FBI.
- genre 배치 루프 내 N+1(장르 참조 테이블 매 항목 재조회) → 루프 전 1회 로드.
- oracledb pool max=5 빠듯 → 상향. MusicBrainz 배치 wall-clock 무제한+중복 sleep → 재시작 가능화.
— 6-페르소나 코드리뷰(2026-06-27)에서 도출. 소스 검증 완료. [AI 등록]
Updated by joungmin ko about 2 months ago
- Status changed from 신규 to 진행
- % Done changed from 0 to 70
커밋 c46184e. 안전·고가치 항목 처리 완료(빌드·재기동·라이브 검증):
[x] 차트 캐시 TTL 계층화 — 빈결과 60s(스테일 빈-캐시 #515 근본 해결), 비-빈결과 24h(시간당 재집계 제거). Redis TTL 확인.
[x] 미캐싱 엔드포인트 /month·/day·/songByName 캐싱 추가.
[x] 전역 LLM cap 실제 호출당 계수(요청당→호출당, ~10배 미달 수정) — 공용 llm_budget 모듈.
[x] 배치 async event-loop 블로킹 제거 — time.sleep→asyncio.sleep, search_lyrics→to_thread.
[x] genre 배치 N+1 제거 — 참조테이블 런당 1회 로드.
[x] oracledb 풀 1/5→2/10.
보류(스키마/대형, 별도 진행 필요):
[ ] artist_name_norm 컬럼 + 함수기반인덱스(비-sargable LIKE 풀스캔) — 스키마 마이그레이션.
[ ] LLM cap Redis 백업(멀티워커/재시작 내구성).
[ ] MusicBrainz 배치 재시작 가능화(진행상태 영속).
[AI 조치]
Updated by joungmin ko about 2 months ago
보류 항목 중 'artist_name_norm 컬럼 + 인덱스'는 #524로 분리(Design-First, 설계서 작성 완료). 본 묶음에선 제외. [AI]
Actions