운영 구조
MySQL과 Elasticsearch를 PostgreSQL로 통합했습니다
해결하려던 문제
두 저장소를 함께 운영하면서 메모리를 관리하고, 양쪽의 변경 내용을 맞추고 검색용 데이터를 다시 만드는 작업도 필요했습니다.
변경과 결과
업무 정보, 글 검색과 사진 비교에 필요한 데이터를 PostgreSQL로 모아 관리할 저장소를 줄였습니다.
선택 이유와 검증 과정
기존 선택
초기에는 한국어를 분석해 관련성이 높은 결과를 찾으려고 업무 정보는 MySQL에, 검색용 데이터는 Elasticsearch에 저장했습니다. 대신 양쪽의 정보를 맞추고 검색용 데이터를 다시 만드는 작업까지 관리해야 했습니다.
전환 이유
Elasticsearch의 모든 기능을 대체하는 것이 아니라 서비스에 필요한 검색을 유지하면서 운영 대상을 줄이는 선택이었습니다. Redis와 Kafka는 유지했습니다.
검색 구조
전환하면서 동물의 품종과 특징에서 검색할 단어를 추출해 PostgreSQL 안의 별도 테이블에 저장했습니다. 동물 정보와 키워드 검색용 데이터는 구분하되, 같은 DB에서 함께 관리하도록 바꿨습니다. 사진 비교용 벡터는 확장 기능인 pgvector로 저장했습니다.
확인한 변화
전환 전후 운영 구간에서 클러스터 내 DB 평균 메모리는 약 2.76GiB에서 1.29GiB로 관측됐습니다. 요청량이 달랐으므로 동일 부하에서의 절감률이나 실제 요금 절감으로 표현하지 않습니다.
고려한 점
통합 후에도 동물 정보의 변경이 키워드 검색용 데이터에 반영됐는지 확인해야 합니다. 여러 작업이 한 DB의 자원을 나눠 쓰므로 장애 영향도 집중됩니다. 이어지는 검색 응답 개선은 DB 교체 자체가 아니라 전환 후 반복 검사를 줄인 결과입니다.