데이터베이스는 락(Lock)이라는 장치로 데이터에 접근 제약을 두어

데이터 정합성을 맞추는 다양한 방법을 제공한다.

대표적으로,

비관적 락(Pessmistic Lock)

스크린샷 2025-02-27 오후 4.21.12.png

실제로 테이블 혹은 로우에 락을 걸어서 데이터 접근 제약을 두어 정합성을 맞추는 방법이다

이러한 방식으로 Exclusive Lock을 걸면 다른 트랜잭션에서는 데이터를 가져갈 수 없다.

가장 직관적으로 접근 제약을 둘 수 있지만,

두 개 이상의 스레드가 서로 락을 얻기 위해 무한정 대기하는 데드락에 빠질 수 있다.

낙관적 락(Optimistic Lock)

스크린샷 2025-02-27 오후 4.22.33.png

실제로 데이터 자체에 락을 두는 것이 아니라 데이터의 버전을 이용하여 정합성을 맞추는 방법이다.

데이터를 읽을 때 데이터의 버전을 함께 조회한다.

그리고 업데이트 하기전에 업데이트 하려는 데이터의 버전이 처음 조회했을 당시 버전과 동일한지 확인한다.

스크린샷 2025-02-27 오후 4.23.29.png

만약 버전이 같다면 업데이트에 성공하고, 버전이 다르다면 업데이트에 실패한다.

이 경우 다시 데이터를 조회해서 업데이트를 재수행 해야한다.

ObjectOptimisticLockingFailureException 예외가 발생

네임드 락(Named Lock)