IT/DB

[DB] 낙관적 락(Optimistic Lock) vs. 비관적 락(Pessimistic Lock)

어린이개발자 2025. 10. 3. 16:03

DB 에서 락(Lock) 은 동시에 여러 트랜잭션이 같은 데이터를 다룰 때 충돌을 막기 위한 제어 기법이다.

그 중 낙관적 락과 비관적 락에 대해 비교하는 글을 작성하고자 한다.

 

1. 개념

- 낙관적 락

  > 동시에 데이터 접근이 드물 것이라 낙관적으로 보고, 실제 충돌이 생기면 처리하는 방식

- 비관적 락

  > 다른 트랜잭션이 내 트랜잭션에 접근할 수 있다고 비관적으로 보고, 미리 락을 걸어 충돌을 원천 차단하는 방식

 

2. 방법
- 낙관적 락

  > 보통 버전(version) 컬럼 이나 타임 스태프를 두고, 업데이트 시점에 버전이 같은지 비교

- 비관적 락

  > 데이터 조회 시점에 DB 차원에서 락을 걸어, 다른 트랜잭션이 읽거나 수정하지 못하게 막음

 

3. 특징

- 낙관적 락

  > 충돌 가능성이 낮은 환경에서 유리

  > DB 락을 잡지 않아 동시성, 성능이 좋음

  > 충돌 시 재시도 로직이 필요함

- 비관적 락

  > 충돌 가능성이 높은 환경에서 유리

  > 동시성이 떨어질 수 있음 (대기 시간, 데드락 발생 가능)

  > 락 유지 시간이 길어지면 성능 저하

 

4. 사용 예시

- 낙관적 락

  > 게시글 수정, 프로필 변경(동시 변경 가능성이 낮음)

- 비관적 락

  > 은행 계좌 이체, 재고 감소(수량이 제한적이고 동시에 많이 발생하는 경우)

'IT > DB' 카테고리의 다른 글

[DB] Optimizer  (2) 2025.01.20
[DB] SQL vs. NoSQL  (4) 2025.01.20
[DB] Sharding  (2) 2025.01.15
[MySQL] GROUP BY 사용법  (2) 2024.03.09
[MySQL] JSON_TABLE  (1) 2023.09.14