Server/성능개선

평균 15s API 응답속도 2s로 줄이기

Juzdalua 2025. 10. 17. 11:43

문제상황

모든 구매목록을 가져오는 API가 있다.

총 구매목록은 2만여건이지만, 조인된 테이블들의 데이터 가짓수를 합치면 60만여건이 넘었다.

DTO를 활용하여 모든 테이블을 조인하고 테이블별 검색조건을 where절로 한 번에 검색할 수 있는 편리함이 있었지만, 검색을 하지 않아도 되는 상태에서도 모든 테이블을 조인하는 문제가 있었다.

그래서 해당 페이지에 진입하면 모든 구매목록을 가져오기 때문에 15초라는 긴 시간이 소요됐다.

 

해결방법

  • 리스트 페이지는 디테일 정보를 표기할 필요가 없으므로, 필요없는 테이블은 조인에서 제외한다.
  • DTO에 따라 검색조건이 들어오면, 필요한 테이블만 조인한다.
  • 인덱스를 탈 수 없는 LIKE 검색은 최소화한다.
  • 검색조건으로 사용되는 컬럼들은 인덱싱을 설정한다.

 

사이드 이펙트

  • 해당 API에서 사용하는 함수가 공통함수일 경우, 필요한 정보를 가져오는 테이블들이 모두 만족하는지 확인해야한다.
  • 검색 조건을 DTO로 넘기고 해당 DTO를 바로 where절에 넘기는 방식이었다면, 정렬과 검색이 제대로 이루어지는지 확인해야한다.