Notice
Recent Posts
Recent Comments
Link
SeouliteLab
[JPA] 낙관적 락(Optimistic Lock)과 비관적 락(Pessimistic Lock) 본문
JPA(Java Persistence API)에서는 동시에 여러 사용자가 데이터를 읽고 수정하는 상황에서 데이터 일관성을 유지하기 위해 락(Lock)을 사용한다. 이때 주로 사용되는 락의 종류에는 낙관적 락(Optimistic Lock)과 비관적 락(Pessimistic Lock)이 있다.
낙관적 락 (Optimistic Lock):
- 낙관적 락은 데이터를 읽을 때 락을 획득하지 않고, 데이터를 수정할 때 충돌을 감지하는 방식이다.
- JPA에서는 버전(Version) 정보를 사용하여 낙관적 락을 구현한다. 버전 필드는 엔티티 클래스에 추가되어야 하며, @Version 어노테이션을 사용하여 지정된다.
@Entity
public class Product {
@Id
private Long id;
@Version
private int version;
// 다른 필드 및 메서드 생략
}
비관적 락 (Pessimistic Lock):
- 비관적 락은 데이터를 읽을 때 미리 락을 획득하여 다른 사용자가 데이터를 수정하는 것을 막는 방식이다.
- JPA에서는 EntityManager의 find 또는 query 메서드를 호출할 때 LockModeType을 설정하여 비관적 락을 적용할 수 있다.
Product product = entityManager.find(Product.class, productId, LockModeType.PESSIMISTIC_WRITE);
낙관적 락과 비관적 락은 각각의 상황에 따라 적절하게 선택하여 사용해야 한다. 낙관적 락은 충돌이 적은 환경에서 성능을 향상시키는 데 유용하며, 비관적 락은 데이터의 일관성을 유지해야 하는 환경에서 사용된다.
'프로그래밍' 카테고리의 다른 글
[Java] 람다 표현식(Lambda Expression) (0) | 2024.02.27 |
---|---|
[Java] static(정적) 변수와 메모리 관리 (0) | 2024.02.27 |
[JS/JavaScript] 뒤로가기 버튼에서 발생하는 캐시: BF캐시 (BFCache)에 대해 알아보기 (0) | 2024.02.27 |
[JS/JavaScript] 따옴표와 백틱: 문자열 표기의 다양성 (0) | 2024.02.27 |
[JS/JavaScript] 이벤트 버블링과 이벤트 캡처링: 이벤트 전파의 이해 (0) | 2024.02.27 |