행 잠금과 멱등성 키로 예약·결제 백엔드 안정성 확보 경험
사이드 프로젝트에서 소규모 스터디 공간 예약 서비스의 예약·결제 백엔드를 개발한 경험이 있습니다. 예약 충돌 방지를 위해 SELECT FOR UPDATE로 행 잠금을 걸고 트랜잭션을 설계했는데, 동시 예약 요청에서 중복이 발생하지 않는지 테스트하는 과정이 가장 까다로웠습니다. 결제 연동에서는 외부 PG사 API가 실패했을 때 DB 상태와 결제 상태가 불일치하는 케이스를 처리하기 위해 멱등성 키를 사용하고 재처리 로직을 설계했습니다.
결제 시스템에서 가장 중요한 건 부분 실패 케이스를 처음부터 설계에 포함하는 것이었는데, 정상 흐름만 구현하면 실제 운영에서 금액 불일치가 생길 수 있다는 걸 배웠습니다. 지금도 결제 관련 코드를 짤 때 실패 시나리오를 먼저 나열하는 방향을 따릅니다.