문제상황
모든 구매목록을 가져오는 API가 있다.
총 구매목록은 2만여건이지만, 조인된 테이블들의 데이터 가짓수를 합치면 60만여건이 넘었다.
DTO를 활용하여 모든 테이블을 조인하고 테이블별 검색조건을 where절로 한 번에 검색할 수 있는 편리함이 있었지만, 검색을 하지 않아도 되는 상태에서도 모든 테이블을 조인하는 문제가 있었다.
그래서 해당 페이지에 진입하면 모든 구매목록을 가져오기 때문에 15초라는 긴 시간이 소요됐다.
해결방법
- 리스트 페이지는 디테일 정보를 표기할 필요가 없으므로, 필요없는 테이블은 조인에서 제외한다.
- DTO에 따라 검색조건이 들어오면, 필요한 테이블만 조인한다.
- 인덱스를 탈 수 없는 LIKE 검색은 최소화한다.
- 검색조건으로 사용되는 컬럼들은 인덱싱을 설정한다.
사이드 이펙트
- 해당 API에서 사용하는 함수가 공통함수일 경우, 필요한 정보를 가져오는 테이블들이 모두 만족하는지 확인해야한다.
- 검색 조건을 DTO로 넘기고 해당 DTO를 바로 where절에 넘기는 방식이었다면, 정렬과 검색이 제대로 이루어지는지 확인해야한다.
'Server > 성능개선' 카테고리의 다른 글
| 대용량 쿼리 벌크 업데이트 (0) | 2026.02.19 |
|---|---|
| JS & TS) Map으로 시간복잡도 줄이기 (0) | 2025.12.10 |
| MySQL, TypeORM) Lock으로 동시성 문제 해결 (0) | 2025.10.17 |
| NestJS) AWS-S3 효율적인 업로드 방법 (0) | 2025.08.07 |