낙관적 락과는 반대로 트랜잭션 간의 충돌이 발생할 가능성이 높다고 가정하고
트랜잭션이 데이터를 읽기/수정하기 전에 미리 락을 걸어 다른 트랜잭션의 접근을 락을 통해 제한하는 방식이다.
아래는 두 개의 트랜잭션이 동시에 같은 데이터를 수정하려고 할 때의 흐름이다.

Transaction 1:
게시글 1번의 좋아요 정보를 SELECT ... FOR UPDATE 로 조회
→ 게시글 1번의 좋아요 정보에 대해 Exclusive Lock(X-Lock) 획득
Transaction 2:
같은 게시글(1번)에 좋아요 요청을 보내며 SELECT ... FOR UPDATE 실행 시도
→ T1이 X-Lock을 보유 중이므로 즉시 처리되지 않고 락이 해제될 때까지 대기(블로킹)
Transaction 1:
좋아요 카운트를 +1로 업데이트한 뒤 COMMIT
→ COMMIT과 함께 X-Lock 해제
Transaction 2:
대기하던 락을 획득하여 게시글 1번의 좋아요 정보를 SELECT ... FOR UPDATE 로 조회
→ 이후 좋아요 카운트를 +1 업데이트 진행
Transaction 2:
업데이트 후 COMMIT
→ X-Lock 해제
1. 좋아요 증가 로직에서 Post에 비관적 락 적용
@Lock(LockModeType.PESSIMISTIC_WRITE)를 사용하여 Post의 좋아요 정보를 조회할 때 X-Lock을 획득하도록 설정
2. 좋아요 증가 시 사용되는 조회 메서드 변경
findById (락 없음)findByWithPessimisticLock
3. 실행결과
