경험 중심 — 풀스캔으로 쿼리가 20분 걸리던 문제 해결
졸업 프로젝트에서 웹 서버 로그 약 8천만 건을 분석하는 작업을 맡았습니다. 처음에 MySQL에 데이터를 단순히 넣고 집계 쿼리를 실행했더니 단순 GROUP BY 쿼리 하나가 20분 이상 걸렸습니다.
인덱스가 하나도 없었고, 매 쿼리마다 풀스캔을 하고 있었습니다. 자주 사용하는 집계 기준인 timestamp와 user_id에 복합 인덱스를 추가하니 같은 쿼리가 40초로 줄어들었습니다. 그러나 여전히 느려서 데이터를 일별로 파티셔닝하고, 오래된 데이터는 Parquet으로 변환하여 S3에 업로드하는 구조로 변경하였습니다.
최종적으로 최근 30일 데이터 집계는 5초 이내로 처리할 수 있었습니다. 처음 20분에서 5초까지 줄이는 과정이 생각보다 여러 단계가 필요했고, 데이터가 많아지면 저장 구조 설계가 쿼리 성능에 직결된다는 것을 직접 체감하였습니다.