이번 주는 상품 목록 조회 API의 읽기 성능 개선 작업을 진행했다. 단순히 애플리케이션 로직만 손보는 것만이 아니라 DB 인덱스와 캐시까지 적용하며 병목 지점을 단계별로 확인하고 개선하는 데 집중했다.
먼저 불필요하다고 생각한 로직을 제거해봤지만 응답 속도나 TPS 개선 폭은 미미해서 놀랐었다. 구조 개선도 어느정도 영향을 줄 수 있을줄 알았는데 거의 없다니.. 그래도 이 작업을 통해 병목의 주된 원인이 애플리케이션 로직이 아니라 DB 쿼리 처리 과정에 있음을 확인할 수 있었다. 이후 검색 조건과 정렬 조건을 조합한 복합 인덱스를 적용하자 filesort가 제거되고 쿼리 실행 시간이 약 500ms에서 3ms까지 단축되었다. TPS도 약 2배 상승하고 에러율도 70% 이상 줄었지만, 부하 테스트에서 응답 시간이 여전히 초 단위라는 한계는 남아 있었다.
마지막으로 Redis 캐시를 도입하면서 큰 변화가 있었다. 평균 응답 시간이 7초대에서 20ms대로 줄었고, TPS도 수천 단위까지 증가하며 안정성이 확보됐다. 특히 캐시워밍까지 적용했을 때 초기 요청부터 안정화된 점이 인상적이었다.
이번 과정을 통해 단순 로직 개선만으로는 병목을 해소하기 어렵고 DB 최적화와 캐시가 중요한 해결책이라는 걸 다시금 느꼈다. 또 캐시는 단순히 넣고 끝나는 것이 아니라 TTL, 쓰기 전략, 무효화 정책까지 운영 전략이 뒤따라야 정합성과 성능을 함께 챙길 수 있다는 점도 배웠다.
앞으로는 쓰기 전략을 보완해 조회 성능뿐만 아니라 데이터 정합성까지 만족시키는 구조로 발전시켜 볼 계획이다. 추가로 캐시 스탬피드 현상에 대한 대책도 고민해 적용해보고자 한다.
'Project > 회고' 카테고리의 다른 글
| [Loop:PAK] 마지막 회고 (0) | 2025.09.19 |
|---|---|
| [Loop:PAK] 4주차 회고 (4) | 2025.08.09 |
| [Loop:PAK] 3주차 회고 (0) | 2025.08.01 |
| [Loop:PAK] 2주차 회고 (0) | 2025.07.25 |
| [Loop:PAK] 1주차 회고 (0) | 2025.07.18 |