행 지향 DB에서 컬럼형 OLAP으로 전환해 분석 성능을 높인 경험
졸업 작품에서 일간 판매 분석 쿼리가 데이터가 늘수록 느려졌습니다. MySQL에서 전체 기간 집계를 하면 5만 건 기준으로 8초가 넘었습니다. 분석 쿼리에 행 지향 DB가 맞지 않는다는 걸 그때 처음 알았습니다.
DuckDB를 사이드 프로젝트에서 써봤던 경험이 있어서 도입해 봤습니다. 같은 데이터에 대해 집계 쿼리를 실행했더니 400ms로 줄었습니다. 컬럼형 저장 방식이 집계 연산에 얼마나 유리한지 직접 체감했습니다.
실패 경험도 있었습니다. DuckDB는 인-메모리 기반이라 서버 재시작 시 데이터를 다시 로드해야 했고, 운영 환경에서 메모리 예산을 초과하는 문제가 생겼습니다. 자주 조회되는 집계 결과는 미리 계산해 별도 테이블에 캐싱하는 방식을 추가해 해결했습니다.
분석 성능은 DB 선택부터 시작된다는 걸 그때 처음 배웠습니다.