<aside> ⚠️ 예매 서비스 로직을 만들고 나서 바로 테스트를 했더니 트랜잭션이 50개 정도만 동시에 들어와도 LockAcquisitionException이 발생하고, TicketInfo의 남은 좌석 수가 실제 수치(총 좌석 수 - Reservation에서 count 합산)보다 더 많아 데이터 무결성이 깨지는 문제 발생했습니다.
</aside>
{
"statusCode":400,
"msg":"could not execute statement; SQL [n/a]; nested exception is org.hibernate.exception.LockAcquisitionException"
}
<aside> 💡 동시에 여러 트랜잭션이 TicketInfo Entity를 불러와서 남은 좌석 수 칼럼을 읽고 수정하는 과정에서 트랜잭션끼리 충돌이 발생해 데이터 무결성이 지켜지지 않는다고 판단했습니다.
</aside>
@Transactional(isolation = Isolation.READ_COMMITTED)
@Transactional(isolation = Isolation.REPEATABLE_READ)
@Transactional(isolation = Isolation.SERIALIZABLE)