afterCommit이면 충분하지 않나? — Cache-Aside 레이스 컨디션을 발견하고 재설계한 이야기TL;DRCache-Aside + afterCommit DELETE면 캐시 무효화는 끝이라고 생각했다. 근데 "DB 읽기와 캐시 SET 사이의 시간 간격"이라는 구조적 허점을 발견했다. 3가지 대응 전략을 비교했고, 완벽한 해결(캐시 버전)이 오히려 스탬피드라는 새로운 폭탄을 만든다는 걸 확인한 뒤, Delayed Double Delete로 재설계했다.캐시가 필요한 이유: 속도가 아니라 DB 보호인덱스 최적화 + Cursor 페이지네이션까지 적용하고 나니, 상품 목록 쿼리가 3ms대로 내려왔다. 솔직히 이 시점에서 "캐시가 필요한가?" 싶었다.근데 1,000명이 동시에 조회하면 얘기가 달라진다. 쿼리..