[TIL] DB Lock | 비관적 락 (Pessimistic Locking) | 낙관적 락 (Optimistic Locking)

2024. 8. 20. 01:35·TIL

DB Lock 이란?

 

데이터베이스에서 여러 트랜잭션이 동시에 같은 데이터에 접근할 때, 데이터의 무결성을 보장하기 위해 사용되는 메커니즘이다.

쉽게 말하면, 작업중인 데이터는 건들 수 없게 만드는 것!!이다. 이를 통해 충돌을 방지하고 데이터의 일관성을 유지 할 수 있다.

 

 

비관적 락 실습

 

비관적 락은 데이터를 읽을 때부터 락을 걸어 다른 트랜잭션이 접근하지 못하도록 하는 방식으로 데이터의 충돌 가능성이 높을 때 유용하다.

 

public interface ItemRepository extends JpaRepository<Item, Long> {
    @Lock(LockModeType.PESSIMISTIC_WRITE)  // 비관적 락 적용
    @Query("select i from Item i where i.id = :id")
    Item findByIdWithLock(Long id);
}

PESSIMISTIC_READ

읽기 락(Shared Lock)을 설정하여 다른 트랜잭션이 해당 데이터를 읽을 수는 있지만, 수정은 할 수 없음

 

PESSIMISTIC_WRITE

쓰기 락(Exclusive Lock)을 설정하여 다른 트랜잭션이 해당 데이터를 읽거나 수정하지 못하도록 함

 

 

낙관적 락 실습

 

낙관적 락은 데이터를 수정하기 전까지 락을 걸지 않고, 수정 시점에만 충돌을 확인하는 방식이다. 

주로 데이터의 버전 번호를 사용하여 동시성 문제를 해결한다.

import jakarta.persistence.*;
import lombok.Data;

@Data
@Entity
public class Product {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;
    private Double price;

    @Version
    private Integer version;  // 버전 필드를 통해 낙관적 락을 구현
}

 

동시에 실행 한 두 트랙잭션에 대해,,

첫 번째 트랙잭션에서 데이터 수정 시 버전이 0에서 1로 올라간다.

두 번째 트랙잭션에서는 버전 0을 찾을 수 없으므로(버전이 올라감) 데이터 수정이 불가능하다.

'TIL' 카테고리의 다른 글

[TIL] Write-Behind 캐싱 구현  (0) 2024.08.21
[TIL] 장애대응  (0) 2024.08.20
[TIL] Session Clustering  (0) 2024.08.17
[TIL] 모니터링  (0) 2024.08.16
[TIL] SAGA Pattern  (0) 2024.08.16
'TIL' 카테고리의 다른 글
  • [TIL] Write-Behind 캐싱 구현
  • [TIL] 장애대응
  • [TIL] Session Clustering
  • [TIL] 모니터링
dev_ajrqkq
dev_ajrqkq
알고리즘 천재가 될 거야
  • dev_ajrqkq
    기록이 자산이다
    dev_ajrqkq
  • 전체
    오늘
    어제
    • 분류 전체보기 (147)
      • Front-end (0)
      • Back-end (11)
        • Spring (1)
        • Java (8)
      • CS (9)
        • 데이터베이스 (5)
        • 네트워크 (4)
      • Algorithm (80)
      • 이것저것 (0)
      • 버그잡기 (1)
      • TIL (37)
      • 후기 (1)
      • 취준 (0)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      항해99
      티스토리챌린지
      Til
      오블완
      TypeScript
      코딩테스트준비
      개발자취업
      99클럽
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.2
    dev_ajrqkq
    [TIL] DB Lock | 비관적 락 (Pessimistic Locking) | 낙관적 락 (Optimistic Locking)
    상단으로

    티스토리툴바