
데이터베이스
[MySQL] 동시성 문제 해결 - 비관적 락 ( Pessimistic Lock )
🐳문제상황 시험 응시원서 시스템을 만드는 과정에서 접수번호( 시험번호 + 순차 증가하는 번호 ) 생성 로직에서 문제가 발생했다. 접수번호 생성 로직은 아래와 같다. 1. 현재 원서 중 가장 큰 접수번호를 조회한다. 2. 가장 큰 접수번호에 + 1을 하여 원서 접수 번호를 생성한다. 위의 로직에서 여러 원서를 동시에 접수할 경우 같은 접수번호를 가진 데이터 입력을 시도하게 되었고 접수번호 + 시험ID 값은 Unique 한 값이기에 에러가 발생했다. 이 문제는 여러 원서가 한 개의 원서 자원에 접근하여 발생한 동시성 문제이다. 만약 DB에 접수번호에 Unique를 설정해 주지 않았다면 같은 접수번호를 가진 원서가 발생해 큰 문제를 야기했을 것이다. 이 문제를 해결해보자 ! 🐳Database 의 Lock 기능..