Design Checklist

동시성 버그는 재현보다 설계 단계 예방이 싸다

타이밍에 의존하는 버그는 운영에서만 터지기 쉽다. 경합 경로를 미리 식별하고 쓰기 방식과 재시도 정책을 정한다.

1 경합 데이터 식별

재고, 잔액, 좌석, 쿠폰, 카운터를 먼저 표시한다.

2 R-M-W 제거

읽고 계산하고 절대값 쓰는 패턴을 줄인다.

3 원자적 쓰기

조건부 UPDATE와 영향받은 행 수 확인을 기본으로 둔다.

4 재시도 설계

낙관적 충돌, deadlock, serialization failure에 backoff를 둔다.

5 부하 테스트

같은 키에 동시 요청을 몰아 주요 경로를 검증한다.

원칙: “언젠가 충돌한다”를 전제로 성공 조건, 실패 조건, 재시도 조건을 코드로 표현한다.