Project

General

Profile

Actions

새기능 #521

open

[성능/비용][P2] 묶음

Added by joungmin ko about 2 months ago. Updated about 2 months ago.

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 등록]

Actions #1

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 조치]

Actions #2

Updated by joungmin ko about 2 months ago

보류 항목 중 'artist_name_norm 컬럼 + 인덱스'는 #524로 분리(Design-First, 설계서 작성 완료). 본 묶음에선 제외. [AI]

Actions

Also available in: Atom PDF