기술적 튜닝보다 먼저 사용자의 목소리에서 해답을 찾은 채널톡의 고객 중심 성능 최적화 전략
백오피스 서비스의 고질적인 대용량 데이터 검색 성능 문제를 해결하기 위해, 기술적 접근에 앞서 사용자 인터뷰로 실제 활용 패턴을 도출했습니다. 인덱스 무력화의 주범인 대소문자 무시 쿼리를 개선하고, 인덱스 히트를 보장하는 IndexedDAO 패턴을 설계하여 서비스 안정성과 성능을 획기적으로 개선한 여정을 담고 있습니다.
대용량 RDB 환경에서 동적 쿼리 사용으로 인해 인덱스 효율이 떨어져 고민하는 백엔드 개발자들에게 강력히 추천합니다. 특히 JOOQ나 Querydsl 같은 ORM 환경에서 인덱스를 안전하게 타는 추상화 레이어를 고민할 때 좋은 참고가 될 것입니다.
biz-crm 백오피스 서비스에서 대용량 테이블(1,000만 건 이상) 검색 시, JOOQ의 대소문자 무시 검색 기능이 LOWER() 함수를 컬럼에 적용하여 인덱스를 무력화하고 Full Table Scan을 유발함으로써 6초 이상의 응답 지연과 타임아웃을 발생시켰다.
사용자 인터뷰를 통해 복잡한 범용 필터 대신 특정 채널 ID 기반의 단순 검색이 주된 패턴임을 파악하고, 특정 인덱스 활용을 강제하도록 쿼리 생성 책임을 분리한 'IndexedDAO' 패턴과 SearchRequest DTO 구조를 도입했다.
8초 이상 소요되던 특정 쿼리의 응답 시간을 200ms 수준으로 단축하였으며, 인덱스 히트를 보장하는 추상화된 DAO 레이어를 구축하여 다른 대용량 테이블에도 적용 가능한 재사용성 높은 아키텍처를 확보했다.
Trade-off
성능 최적화를 위해 기존의 유연한 범용 다중 필터 기능을 일부 제한하고 특정 조회 조건 사용을 강제했으며, 새로운 검색 기능 추가 시마다 전용 DTO와 DAO를 정의해야 하는 추가적인 구현 공수가 발생한다.
인덱스를 사용하지 못하고 테이블의 모든 레코드를 처음부터 끝까지 조회하여 결과를 찾는 방식으로, 데이터가 많아질수록 성능이 급격히 저하된다.
성능이 중요한 대용량 테이블 조회 시, 인덱스를 타는 특정 필드만을 검색 조건으로 사용하도록 강제하고 추상화한 데이터 접근 패턴이다.
단순히 요청된 기능을 개발하는 것을 넘어, 사용자가 제품을 실제로 사용하는 방식과 맥락을 파악하여 문제 해결의 본질적인 단서를 찾는 태도이다.