검색 API 성능 개선 #1

김지현·2024년 8월 7일
0
post-thumbnail

SearchDocsList API

DB

우선 DB는 MongoDB이며 현재 한 컬렉션에 약 1277만개의 문서가 저장되어 있다. 이 문서들을 검색하는 API를 FastAPI로 구현할 때, 어떻게 하면 빠르게 검색할 수 있는지를 기록해보자.

Failed to load response data

이 API는 문서의 fillingDate 의 범위 검색을 지원하는 API이 이다. start date 날짜와 end date 날짜를 넘겨받으면 fillingDate 값이 해당 기간안에 존재하는 모든 문서를 리스트로 반환한다.

여기서 문제가 발생하는데 리스트 조회의 경우 데이터가 너무 많아서인지 서버는 200을 반환했음에도 웹페이지가 이를 감당하지 못해 response load를 실패했다는 메세지만 나온다.

응답 시간은 3분이 넘게 걸렸다…

페이지네이션 적용

우선 한 번에 너무 많은 데이터를 로드하지 않도록 페이지네이션을 적용하였다. 기본값으로 한 페이지당 10개의 문서를 리턴하도록 한다.

이제 response가 정상적으로 보인다. 약 1200만개의 데이터 중 2376개의 문서 조회에 성공한 것을 확인할 수 있다.

응답시간도 3.3분에서 1.6분정도로 감소하였다.

DB Index

하지만 조회 한 번 하는데 1분이 넘는건 여전히 너무 오래 걸린다. DB에 filing-date로 인덱스를 생성하여 조회 시간이 더 단축되도록 하였다.

db.collection.createIndex({"filing-date":-1})

인덱스를 생성한 뒤 같은 범위의 데이터를 조회하니 응답 시간이 1.6분에서 8ms(0.008초)로 매우 단축되었다. 이제야 정상적인 검색 속도라 할 수 있다.

0개의 댓글