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 |