모든 글

동시 요청에서 중복 주문을 막기 위해 검토한 세 가지 방법

유니크 제약, 비관적 잠금, 분산 잠금의 장단점을 비교한 기록입니다.

같은 사용자가 결제 버튼을 여러 번 누르면 거의 동시에 주문 요청이 들어올 수 있습니다. 애플리케이션의 단순한 존재 여부 검사만으로는 두 요청이 모두 통과할 가능성이 있습니다.

후보 비교

유니크 제약

데이터베이스가 마지막 방어선이 됩니다. 규칙이 명확하고 성능 비용도 비교적 작지만, 충돌 예외를 비즈니스 오류로 변환해야 합니다.

비관적 잠금

처리 순서를 확실하게 만들 수 있지만 잠금 범위가 커지면 대기 시간이 길어집니다.

분산 잠금

여러 인스턴스에서 공통으로 사용할 수 있지만 만료 시간과 장애 상황을 세심하게 다뤄야 합니다.

이번 경우에는 주문 키에 유니크 제약을 두고, 중복 요청이 발생하면 기존 주문 결과를 반환하도록 했습니다. 가장 단순한 규칙을 데이터베이스에서 보장하는 방식이 현재 규모에는 적합했습니다.