티스토리 뷰

1. Pessimistic Lock (비관적 잠금)

항목 내용
특징 - Pessimistic Concurrency Control(PCC)
- 트랜잭션이 데이터를 수정할 때, 다른 트랜잭션의 접근을 미리 차단하여 충돌을 방지
- DB Built-In Lock :: DB내 내장된 락 메커니즘을 사용 -> 일관성 보장
사용 환경 쓰기 비중이 높고, 데이터 일관성 보장이 중요한 시스템
동시성 제어 방식 선락체크(Preemptive Locking) 방식
장점 - 데이터 일관성 보장
- 높은 신뢰성 제공
단점 - 동시성 감소, 데드락(Deadlock) 발생 위험
- 원인 :: (1)ORM 내 ID 생성을 위한 접속 시, 스레드 부족 + (2)같은 데이터 2개를 순서 / 역순 업데이트
잠금 단위 - Table Lock :: 동시성 감소, 트랜잭션 제어 간단
- Row Lock :: 동시성 증가, 트랜잭션 제어 복잡
범주 - Shared Lock (읽기 잠금) :: 다중 읽기 작업 허용
- Exclusive Lock (쓰기 잠금) :: 읽기 및 쓰기 작업 모두 차단

1.1 Locking 방식 및 종류

  •  Lock-based Concurrency Control
    1. 2PL (2 Phase Locking)
      :: 2단계 잠금 방식을 사용하여 Serializable을 보장
      :: 트랜잭션이 데이터를 잠그고, 잠금을 해제하는 순서에 따라 충돌을 방지

    2. 2PL의 확장
      1) Strict 2PL (S2PL) :: 트랜잭션이 모든 락을 유지, 커밋되기 전까지 락을 해제 X
      2) Rigorous 2PL (SS2PL) :: 트랜잭션이 완전히 완료된 후, 락을 해제하는 방식
잠금 종류 특징
1. 공유 락 / Shared Lock (S-lock) - 데이터 읽기 작업 시 사용
- 여러 트랜잭션이 동시에 읽기 가능, 쓰기 불가
2. 배타적 락 / Exclusive Lock (X-lock) - 데이터 수정 시 사용
- 읽기 및 쓰기 모두 차단, 다른 트랜잭션 접근 불가
3. Lock Release - 트랜잭션이 끝나면 락을 해제하여 다른 트랜잭션이 접근 가능하도록 함

2. Optimistic Lock (낙관적 잠금)

항목 내용
특징 - Non-locking Concurrency Control 혹은 Optimistic Concurrency Control(OCC) 이름이 참 많다...
- 데이터 잠금을 사용하지 않고, 트랜잭션이 종료되기 직전에 충돌 여부를 검사
- 데이터 항목에 버전 번호 부여-> 작업 완료 시 버전 충돌 체크 및 충돌 시 해당 트랜잭션을 롤백 및 재시도
- SW적 Lock (데이터별 Versioning + OptimisticLockException를 직접 설정 필요)
사용 환경 읽기 비중이 높고, 충돌 가능성이 적은 시스템
동시성 제어 방식 선작업 → 후버전체크 방식
장점 - 높은 동시성 제공
- 성능 저하가 적음
단점 - 신뢰성이 낮음 (버전 충돌 시 롤백 필요)
- 버전 관리 및 예외 처리 필요
사용되는 시스템 - Transaction(Lock)이 없는 비관계형 DB에서 자주 사용
- DynamoDB / Redis / Firestore / Elasticsearch
충돌 처리 - 버전 충돌 시 롤백 후 재실행

2.1 Optimistic Lock 기법의 종류

기법 설명
1. Timestamp-based Concurrency Control - 트랜잭션 시작 시, 타임스탬프 부여 -> 타임스탬프에 맞춰 순차적으로 처리
2. Optimistic Concurrency Control (OCC) - 트랜잭션이 읽기만 수행, 변경 작업은 나중에 진행
- 충돌 시 롤백 후 재실행
3. Multiversion Concurrency Control (MVCC) - 여러 버전의 데이터를 동시에 저장 -> 트랜잭션 간의 독립적인 실행을 보장
- 버전을 통해 독립적인 처리를 통해 충돌 회피 

2.2 Optimistic Lock  동작 방식

2.2-1) Optimistic Concurrency Control (OCC)

단계 설명
1. 읽기 - 데이터를 읽고 버전 번호를 기록
2. 수정 시 버전 체크 - 트랜잭션이 데이터를 수정하기 전에 버전 충돌 여부를 확인
3. 충돌 시 처리 - 버전 충돌이 발생하면 롤백 후 재실행
4. 커밋 - 충돌 없이 정상적으로 완료되면, 커밋하여 변경 사항을 반영

2.2-2) Multiversion Concurrency Control (MVCC)

출처 : https://mangkyu.tistory.com/288

A. 데이터베이스 내 다중 버전의 데이터를 저장 B. 최신 버전의 데이터만 데이터베이스에 저장
:: PostgreSQL 에서 사용하는 방식 :: Oracle, MySQL 에서 사용하는 방식
  • Lock 기법만 적용된 DBMS 보다 훨씬 빠르게 동작
  • 사용하지 않는 데이터가 매번 생기므로 데이터를 정리하는 시스템이 필요
  • 데이터 버전이 충돌 시 애플리케이션 영역에서 (소프트웨어적으로) 문제를 해결

 


참고

ASAC 수업자료

 

 

[MySQL] MVCC(다중 버전 동시성 제어)와 데이터베이스가 트랜잭션을 지원하는 방법과 동작 과정

이번에는 데이터베이스가 트랜잭션을 지원하는 방법과 동작 과정에 대해 살펴보도록 하겠습니다. 아래의 내용은 RealMySQL과 MySQL 공식 문서 등을 참고하여 작성한 내용입니다.    1. MVCC(다중 버

mangkyu.tistory.com

 


함께보기 

데드락 발생 원인
1. ORM 내 ID 생성을 위한 접속 시 Thread 부족

 

HikariCP Dead lock에서 벗어나기 (실전편) | 우아한형제들 기술블로그

1부 HikariCP Dead lock에서 벗어나기 (이론편)은 잘 보셨나요? 2부 HikariCP Dead lock에서 벗어나기 (실전편)에서는 실제 장애 사례를 기반으로 장애 원인을 설명하고 해결 사례를 공유하고자 합니다. 그

techblog.woowahan.com

 

 2. 같은 데이터 2개를 순서 / 역순 업데이트

 

데이터베이스 deadlock 해결 후기

안녕하세요, 휴먼스케이프에서 주로 서버 개발을 하고 있는 James입니다.

medium.com


Lock-based Concurrency Control

2PL 을 확장한 더 많은 방법론(Strict 2PL(S2PL), Rigorous 2PL(SS2PL))들 존재

 

2 Phase Locking (2PL)

q  2PL(2 Phase Locking) 정의 -     기본 로킹 규약의 문제를 해결하고 트...

blog.naver.com

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함