WEBBOOK CHAPTER

Next.js 16.3, 서비스로 완성하기: 37장. 장애 훈련 — 예약은 됐는데 화면이 실패했다

37장. 장애 훈련 — 예약은 됐는데 화면이 실패했다

DB commit 직후 응답 전에 process가 죽으면 사용자는 실패 화면을 보고 다시 누른다. 운영자는 correlation id와 idempotency key로 Booking을 조회하고, 같은 key의 저장 응답과 outbox를 확인한다. 새 예약을 수동 insert하지 않는다. 사용자에게는 “예약 상태 확인” 경로를 제공한다.

재현 실습은 commit 뒤 응답 전 예외를 주입한다. 첫 요청은 network error, 두 번째 같은 key 요청은 기존 booking을 반환해야 한다. 좌석은 한 번만 줄고 mail event도 한 개여야 한다. test는 API status만 아니라 네 table의 count와 금액을 검증한다.

runbook에는 탐지 신호, 영향 범위 query, 안전한 재처리 명령, 금지 명령, 담당자, 사용자 공지 문안을 둔다. 장애가 끝난 뒤 timeout을 늘리는 것으로 마치지 않고 commit-unknown을 관측하고 자동 복구하는 설계를 개선한다.