빠른 응답을 위해 캐시를 썼다가 정합성 문제가 생긴 경험과 조정 과정
팀 프로젝트에서 상품 재고 조회 API에 Redis 캐시를 붙이니 응답이 빨라졌지만, 구매 직후 재고가 아직 있는 것처럼 보이는 문제가 생겼습니다. 캐시 유효 시간이 30초였는데, 그 사이에 실제 재고가 줄어도 화면에 반영되지 않았습니다.
재고 변경 시 캐시를 즉시 무효화(invalidation)하는 방식으로 바꿨습니다. 하지만 캐시 무효화와 DB 업데이트 사이 짧은 간격에 조회가 들어오면 DB를 직접 읽어 부하가 순간적으로 올라가는 문제가 있었습니다. 허용 가능한 지연 시간과 허용 가능한 부하를 놓고 팀과 논의해 TTL을 5초로 줄이는 것으로 타협했습니다.
이 경험에서 응답성과 정합성은 동시에 완벽할 수 없다는 걸 배웠습니다. 어느 쪽을 얼마나 희생할지를 도메인 요구사항 기준으로 명확히 결정하는 것이 기술 선택보다 먼저라는 것이 지금도 제 기준입니다.