기능은 정상 동작했지만 후속 hotfix가 화면은 그대로 둔 채 logging만 깨뜨려 24일간 click·impression log가 조용히 누락되고 추천 성과 분석이 훼손된 사고가 출발점이다. 외부 보고·장기 지표는 사후 보정도 어렵다는 점에서, UI event부터 API payload까지 보호하는 log regression test를 구축한 과정을 소개한다.
핵심 포인트- 수백 개 logging path를 사람이 배포마다 확인할 수 없으므로, component를 render하고 Testing Library로 click을·IntersectionObserver로 impression을 일으키는 자동 test flow를 구성
- MSW가 실제 log API 경계에서 request를 가로채 payload를 추출·snapshot 비교해, 내부 module 구현이 바뀌어도 사용자 행동에서 전송 데이터까지의 contract를 검증하고 CI에서 merge 전 실패시킴
- 첫 구현의 'n번째 payload' 방식은 rendering·useEffect·network timing에 따라 impression 순서가 흔들려 flaky했는데, 호출 순서 index를 각 log의 unique ID 검색으로 교체해 비동기 경쟁 조건에서도 신뢰성 확보
- 전체 329개 log 중 285개(86.6%)를 보호하고, test 하나당 수동 검수 3분 가정 시 release마다 약 14시간을 절감 — 완벽한 100%보다 핵심 business data의 지속 보호를 강조
왜 읽나기능은 멀쩡한데 log가 조용히 깨지는 blind spot을 겪는 팀에게, 사용자 행동→payload contract를 snapshot·CI로 자동 검증하는 실전 구축기.