우리는 동시성 문제에 대해서 여러가지 해법을 가질 수 있다. 내가 여태까지 알아온 방식은 ThreadLocal을 사용하여 동시성을 해결하는 방법이었다.다른 방식으로는 어떻게 해결할까? JPA에서도 동시성 문제를 해결할 수 있다.
낙관적 락은 동시성 문제가 발생하지 않을 것이라고 가정하고 , 충돌이 일어났을 시 대처하는 락이다.
@Version
private Integer quantity;
비관적 락은 동시성 문제가 발생할것이라고 미리 가정하고, 실제 데이터 엑세스 전 락을 걸어서 충돌을 예방하는 방식이다.
🐶 여기서 잠깐! 데이터베이스의 락 두가지를 알아보자.
트랜잭션에서 변경, 쓰기 작업이 끝난 이후에 다른 트랜잭션이 해당 데이터에 접근할 수 있다.
처리방법 : entityManager를 활용하여 메소드를 호출 할때 LockModeType.PESSIMISTIC_WRITE 을 걸어줄 수 있다.
em.find(User.class, id, LockModeType.PESSIMISTIC_WRITE);