트래픽 증가로 인한 DB 부하를 캐싱으로 해결한 경험
졸업 프로젝트로 만든 커머스 서비스를 학교 행사 때 공개했는데, 갑자기 200명이 동시 접속하면서 DB가 다운되었습니다. 그때 처음으로 트래픽이 실제로 어떻게 시스템을 망가뜨리는지 경험했습니다.
원인 분석해보니 상품 목록 조회가 매 요청마다 DB 풀스캔을 하고 있었습니다. Redis 캐싱을 도입하여 자주 조회되는 목록은 5분간 캐시로 서빙하도록 변경하였습니다. 코드 수정 후 같은 규모의 트래픽에서 DB 쿼리가 90% 줄었고 응답 시간도 800ms에서 120ms로 감소하였습니다.
그 경험을 통해 배운 것은 트래픽 문제는 코드보다 설계에서 온다는 것입니다. 처음부터 읽기 중심 엔드포인트에 캐시를 고려했더라면 그 장애가 없었을 텐데, 나중에 끼워 넣는 것이 훨씬 어렵다는 것을 직접 느꼈습니다. 지금은 서비스 설계할 때 조회 패턴부터 먼저 생각하는 습관이 생겼습니다.
그 장애가 오히려 성능 설계를 배우는 계기가 되었습니다.