모임 참여 로직에 대해 처음엔 synchronized 키워드를 이용하여 동시성 문제를 해결하였다 하지만 아래의 단점들이 존재했다

  1. 모든 참여 요청에 대한 락
  2. 분산 서버 환경을 둘 경우 동시성 문제 발생

동시성 문제를 어플리케이션 상에서 처리하던 것을 DB 에서 처리하도록 변경하였다

비관적 락

트랜잭션이 무조건 충돌이 날 것이라고 예상하여 모든 접근에 대해 락을 건다

하나의 트랜잭션이 테이블의 특정 row 를 점유하고 있으면 다른 트랜잭션이 접근하지 못하도록 막는 방법이다

낙관적 락

트랜잭션이 충돌나지 않을 것이라고 가정한다 버전 관리 필드를 두어 충돌이 날 경우에만 후처리를 진행한다

테이블에 버전 정보를 추가하여 관리한다 정보 수정을 하기 위해 그때 당시의 버전 정보를 조회하고 수정할 당시의 버전을 다시 조회하여 현재 버전이 맞을 경우에만 수정할 수 있다

→ 어플리케이션에서 관리하는 점이 많아진다(롤백 직접 관리)

https://sabarada.tistory.com/m/175

https://jaehoney.tistory.com/159