개발자 노트

Elasticsearch를 사용할 때 신경쓰면 좋은 점

쌔뻑가득한 2025. 11. 3. 22:03

최근 elasticsearch를 사용해서 데이터 조회 결과를 응답하는 서버를 다루게 되었다.

다른 RDS와 달리 검색엔진으로 데이터(document)의 조회를 빠르게 할 수 있기때문에

데이터의 업로드/업데이트 보다 조회가 많은 경우에 사용될텐데, 이번에 다루는 서버가 그렇다.

 

그런데 검색 요청이 많은 경우라고 했지만, 요청 건수가 어느정도 이상이 되면 elasticsearch를 구동하는 서버의 CPU가 95~100%로

동작이 힘들어진다.

내가 본 현상이 맞다면 프로세스가 종료되거나 먹통이 되어 요청 부하가 줄어들어도 정상적인 동작으로 복구되지 않았다.

그럼 응답시간을 짧게하면서도 가용성이 좋게 하려면 CPU부하를 최적화하여 request를 구현해야하는데

 

나는 다음의 2가지를 적용해보았다.

1. 요청 횟수의 최적화

한번에 필요한 데이터를 요청하도록 했다.

기존에는 동일 검색 word를 여러 index에 query를 해서 사용했는데, 동일 검색 word를 사용하는 case에 같은 alias를 적용해서

한번에 search하도록 했다.

회사 데이터라 노출은 못하고 방법만 공유하자면, index A와 index B에 검색어로 search를 할 때,

/indexA/_search, /indexB/_search 이렇게 2회 조회하는 것을 indexA와 indexB에 같은 alias를 적용하고 /alias/_search 로 검색했다.

1회 검색하는 것으로는 체감이 안되지만, 요청 수가 많으면 오버헤드는 줄어들 것을 기대했다.

 

2. q 파라미터보다는 Query DSL의 사용

이 글을 쓰게된 이유인데, url에 q 파라미터로 검색 조건을 넣었더니 CPU 가 high를 찍으면서 문제가 되었다.

혹시나 하는 마음에 Query DSL을 적용하였더니 안정되어 적은 리소스로 서비스를 하고 있다.

아마도 초기에는 q 파라미터가 구현하기 편할텐데, 시간을 들이면 좀 더 최적화 할 수 있으니 참고하면 좋겠다.

 

누군가는 나와 같은 삽질을 하지 않았으면 좋겠다.