새기능 #524
open[성능/데이터] artist_name_norm 정규화 컬럼 + 인덱스 — 아티스트 검색 sargable화 및 오매칭 제거
100%
Description
#521에서 분리. 아티스트 검색의 비-sargable 풀스캔과 부분일치 오매칭을 함께 해결.
배경¶
findArtistChart(ChartMapper.xml:125-141), findArtistByName(143-173)이 UPPER(TRANSLATE(REPLACE(ARTIST_NAME,...)))를 LIKE 양변에 적용 → 인덱스 무력화(풀스캔) + '%..%' 부분일치로 무관 아티스트 오매칭(#519와 연계, 예: 'IU'가 포함문자열 전부 매칭).
목표¶
- ARTIST에 정규화 표현을 가진 인덱스 가능 컬럼 도입(자동 동기화).
- 쿼리를 정확일치/접두(prefix)로 재작성해 sargable화 + 오매칭 제거.
- 성능(검색 레이턴시/DB부하)과 정확도 동시 개선.
진행¶
Design-First: 먼저 설계서 작성(docs/design/<본이슈>-artist-name-norm/README.md) → 리뷰 → 구현.
[AI 등록]
Updated by joungmin ko about 2 months ago
- Status changed from 신규 to 진행
- % Done changed from 0 to 20
설계서 작성 완료(Design-First, Draft): docs/design/524-artist-name-norm/README.md · ADR-0003.
핵심: ARTIST에 가상 생성 컬럼 artist_name_norm + B-tree 인덱스 추가, findArtistChart=정확일치 / findArtistByName=접두 로 재작성 → sargable + 오매칭 제거. 다음: 설계 리뷰 후 마이그레이션·매퍼 구현. [AI]
Updated by joungmin ko about 2 months ago
- Status changed from 진행 to 해결
- % Done changed from 20 to 100
구현 완료(커밋 c7e796f). 설계 리뷰(별도 레인, APPROVE-WITH-CHANGES) 반영 후 구현:
- 마이그레이션 db/migrations/2026-06-27-artist-name-norm.sql (sqlcl 적용): NORM_ARTIST 함수 + 가상컬럼 4개(전체/괄호앞/괄호안/english_name) + 인덱스 4개. 멱등.
- ChartMapper.xml: findArtistChart=정확일치 4컬럼 OR, findArtistByName=접두 4컬럼 OR(+길이가드).
- 리뷰 must-fix 반영: 한글(영문) 형태 매칭 보존(가상 sub-컬럼), 비-sargable OR분기 금지.
- 구현 발견: english_name(#68, 2,647행) 포함 → 로마자 검색('IU'→아이유) 지원.
검증: EXPLAIN PLAN 정확일치 경로 INDEX RANGE SCAN(기존 ARTIST FULL SCAN 제거). 오매칭 제거(Taylor Swift 매칭 아티스트 59→1, BTS 15→1). 라이브 API: /artist?artistName=IU 123곡(기존 빈결과), /artistByName 로마자·대소문자 무관 정상.
잔여(후속 이슈 권장): findSongByName/findFeaturing 동일 개선, 자동완성 접두 인덱스(현 ARTIST 4,601행 풀스캔 무시 가능). [AI 조치]