logo

[Spring] JPA 낙관적 락 & 비관적 락

* 관련 기술 스택이 없습니다
emoji

• 트랜잭션 격리 수준을 SERIALIZABLE로 설정하면 데드락이 발생할 수 있으며, 두 번의 갱신 분실 문제를 해결할 수 없어, 데이터 동시성 제어를 위해선 Lock 사용이 필요하다.
• JPA에서는 @Version 어노테이션을 통해 엔티티의 버전 관리를 하며, @Lock 어노테이션과 LockModeType을 사용하여 데이터의 동시 접근을 제어할 수 있다.
• 낙관적 락은 데이터 충돌이 적을 때 사용하며, 트랜잭션 커밋 시 버전 정보를 체크하여 데이터의 논리적 변경이 있을 경우 버전을 강제로 증가시키는 방식으로 동시성을 관리한다. 하지만 충돌이 빈번할 경우 재시도 로직으로 인한 데이터베이스 부하가 발생할 수 있다.
• 비관적 락은 데이터 충돌이 자주 발생하는 상황에서 사용하며, 데이터베이스 락을 활용해 다른 트랜잭션이 데이터를 변경하지 못하도록 하여 데이터의 일관성을 보장하고, 요청이 완료될 때까지 다른 요청은 대기하는 방식으로 동시성을 제어한다.

thumbnail
북마크
공유하기
신고하기
10분 분량
조회수 173
profile-image강민성
일 년 전
Copyright © 2025. Codenary All Rights Reserved.