목록Lock (6)
변수의 기록
Repeatable Read에서 Write Skew가 발생하는 이유와 DBMS별 대응 전략 트랜잭션의 일관성을 보장하기 위한 격리 수준 중 하나인 `Repeatable Read`는 이름만 보면 마치 모든 데이터를 고정된 스냅샷으로 보장해줄 것처럼 보입니다. 하지만 실제로는 **Write Skew**와 같은 정합성 오류가 발생할 수 있는 여지가 있습니다. 이 글에서는 `Repeatable Read` 격리 수준에서 발생할 수 있는 Write Skew 현상을 설명하고, 이를 방지하기 위한 전략으로 **Locking Read (SELECT ... FOR UPDATE)** 나 **Serializable 격리 수준**을 사용하는 이유를 정리합니다. 또한, **Oracle, MySQL(InnoDB), PostgreS..
MVCC와 Isolation Level – Oracle 예제1. MVCC란?**MVCC (다중 버전 동시성 제어)**는 동시성을 높이기 위해 트랜잭션마다 **자신만의 일관된 데이터 시점(snapshot)**을 제공하는 방식이다.MVCC를 사용하는 데이터베이스는 읽기와 쓰기 간의 충돌(Blocking)을 제거하고, 성능과 일관성을 동시에 추구한다.2. MVCC의 핵심 개념 구분설명읽기(read)특정 트랜잭션이 시작될 때의 "시점" 기준으로 commit된 데이터만 읽는다쓰기(write)기존 데이터를 직접 수정하지 않고, 새로운 버전의 데이터를 생성커밋 후 노출다른 트랜잭션은 오직 commit된 버전만 읽을 수 있다비차단 (non-blocking)읽기와 쓰기 작업은 서로 Lock을 걸지 않음 3. MVCC와..
데이터베이스 Lock과 2PL, 데드락까지 완벽 정리동시성을 제어하는 건 단순히 commit을 잘하는 걸 넘어서, **일관성, 격리성(ACID 중 I)**을 유지하는 핵심 기술입니다. 이 포스팅에선 Read/Write Lock, 2PL, 데드락, 그리고 MVCC까지 단계적으로 정리해봅니다.📌 1. Lock 호환성 (Lock Compatibility)DB는 트랜잭션 간의 충돌을 막기 위해 Lock을 사용합니다. read-lockwrite-lockread-lock✅ 가능❌ 불가능write-lock❌ 불가능❌ 불가능 read-lock (공유 잠금):다른 트랜잭션이 읽는 것은 가능, 쓰는 것은 불가여러 트랜잭션이 동시에 읽는 것 가능write-lock (배타 잠금):읽기/쓰기 둘 다 막음오직 단일 트랜잭션만..
데이터베이스 트랜잭션과 ACID 완전 정리 (Oracle 중심 + Java 예제 포함)트랜잭션(Transaction)이란?트랜잭션은 하나의 논리적 작업 단위 (logical unit of work) 를 의미합니다.일반적으로 여러 SQL 문장을 하나의 트랜잭션으로 묶어, 전부 성공하거나 전부 실패하게 만들어야 합니다.예를 들어, 계좌이체는 출금과 입금이 동시에 성공하거나 동시에 실패해야 합니다.핵심 특징트랜잭션에 포함된 SQL 일부만 실행되어 반영되는 일은 절대 없어야 합니다.데이터 정합성과 일관성을 유지하기 위해 필수적인 개념입니다.Oracle의 트랜잭션 처리 방식트랜잭션의 시작과 종료Oracle에서는 INSERT, UPDATE, DELETE 같은 DML 문이 실행되면 트랜잭션이 자동으로 시작됩니다.트랜..

1. 모니터(Monitor)란?정의: 모니터는 **상호배제(Mutual Exclusion)**와 **조건 동기화(Conditional Synchronization)**를 제공하는 고수준 동기화 추상화.주요 구성 요소:뮤텍스 락(Mutex Lock): 임계 구역(Critical Section)에 동시에 하나의 스레드만 들어갈 수 있도록 함.엔트리 큐(Entry Queue): 락을 얻기 위해 대기 중인 스레드들이 대기.컨디션 변수(Condition Variable): 특정 조건을 기다리는 스레드들이 대기하는 공간.웨이팅 큐(Waiting Queue): 컨디션 변수를 통해 조건을 기다리는 스레드들이 들어감. 상황 1 - producer 에서 item을 넣어주고 consumer에서는 꺼내 씀조건 - 1. bu..
2025년 04월 7일LOCK 동기화 공부 ✅ 1. 레이스 컨디션 (Race Condition)여러 스레드(또는 프로세스)가 동시에 공유 자원에 접근할 때,실행 순서에 따라 결과가 달라지는 예측 불가능한 상황📌 예시 (공유 변수 증가):int counter = 0; Thread A: counter++;Thread B: counter++; 두 스레드가 거의 동시에 counter++를 실행하면,실제 결과는 1이 될 수도 있음 (정상은 2여야 함)➡ 데이터의 일관성, 정확성이 깨짐✅ 2. 동기화 (Synchronization)여러 스레드나 프로세스가 공유 자원에 올바른 순서로 접근하도록 제어하는 것레이스 컨디션을 방지하기 위한 필수 메커니즘올바른 동기화 없이는 공유 자원 보호 불가능➡ 락(lock), 세마포..