biz-crm IndexedDAO 적용기
백엔드
biz-crm IndexedDAO 적용기
두줄요약
내부 백오피스 검색 지연 문제를 고객 사용 방식 인터뷰로 먼저 확인했습니다. IndexedDAO를 도입해 인덱스 히트를 보장하고 8초 쿼리를 200ms대로 개선했습니다.
문제 상황
- biz-crm 내부 백오피스에서 특정 페이지 검색이 지연되거나 표시되지 않는 문제
- 1000만 건 이상 대용량 테이블에서 범용 Expression 필터 사용 시 Full Table Scan과 타임아웃 발생
원인 분석
LOWER(col)기반 대소문자 무시 검색이 기존 인덱스를 무력화equalIgnoreCase,containsIgnoreCase같은 JOOQ 메서드가 인덱스 미활용 패턴 생성- 실제 사용자 사용 패턴과 달리 범용 필터가 과도하게 설계된 상태
해결 방법
- 사용자 인터뷰로 실제 조회 패턴을 확인하고 필요한 조건만 남기는 방향으로 재정의
- 큰 테이블에 한해 IndexedDAO 패턴을 도입해 SearchRequest 단위로 검색 로직 분리
- 기존 Expression Filter는 유지하되, 성능 중요한 조회는 인덱스 히트를 보장하는 DAO로 전환
트레이드오프
- DB 함수 기반 인덱스는 코드 수정이 적지만, 사용하지 않는 조건까지 인덱스를 늘려야 하는 부담
- LOWER 제거는 단순하지만 기존 범용 필터 전반에 영향이 커 사이드이펙트 위험
- IndexedDAO는 별도 추상화 비용이 있지만 실제 사용 패턴에 맞춘 확장성과 재사용성 확보
