TechBridge

트랜잭션 격리 수준 & MVCC — PostgreSQL이 동시성을 지키는 방법

← 목록으로

📋 실습 안내

✏️ CODE EDITOR (JSX)
▶ 실행 버튼을 눌러 코드를 테스트하세요.
👁️ 내 미리보기 내 코드 실행 결과
🎯 완성 미리보기 목표
위 에디터 코드를 수정해서 이 결과물과 똑같이 만들어보세요!
💡 TODO 주석을 채워서 위 결과물처럼 동작하게 만들어보세요
🤖 AI 선생님에게 질문하기 이번 강의 전용
  선생님이 답변 중이에요...
⚠️ 학습 관련 질문만 답변합니다. 관련 없는 질문은 자동으로 학습으로 유도됩니다.
Q1. PostgreSQL의 기본(Default) 트랜잭션 격리 수준은?
💡 PostgreSQL의 기본 격리 수준은 READ COMMITTED입니다. 이 수준에서는 커밋된 데이터만 읽을 수 있어 Dirty Read는 방지되지만, Non-Repeatable Read와 Phantom Read는 발생할 수 있습니다. MySQL InnoDB의 기본값은 REPEATABLE READ로 다릅니다.
Q2. MVCC에서 읽기 작업이 쓰기 작업을 차단하지 않는 이유는?
💡 MVCC는 각 행에 여러 버전을 유지합니다. 읽기 트랜잭션은 자신이 시작될 때의 스냅샷(이전 버전)을 읽고, 쓰기 트랜잭션은 새 버전을 생성합니다. 따라서 읽기와 쓰기가 같은 행에 동시에 접근해도 서로 차단하지 않습니다.
Q3. Non-Repeatable Read 이상 현상을 방지하는 최소 격리 수준은?
💡 Non-Repeatable Read는 같은 트랜잭션 내에서 같은 행을 두 번 SELECT할 때 다른 값이 나오는 현상입니다. REPEATABLE READ 격리 수준은 트랜잭션 시작 시의 스냅샷을 유지해 이를 방지합니다. PostgreSQL의 REPEATABLE READ는 Phantom Read도 추가로 방지합니다.
Q4. SELECT FOR UPDATE SKIP LOCKED의 주요 용도는?
💡 SKIP LOCKED는 이미 잠긴(다른 트랜잭션이 SELECT FOR UPDATE 중인) 행을 건너뛰고 다음 잠금 가능한 행을 반환합니다. 여러 워커가 동시에 작업 큐를 처리할 때, 각 워커가 겹치지 않는 행을 가져가도록 하는 패턴에 활용됩니다.
Q5. DEADLOCK을 예방하는 가장 효과적인 방법은?
💡 데드락은 두 트랜잭션이 서로 상대방의 잠금을 기다릴 때 발생합니다. 모든 트랜잭션이 항상 같은 순서로 리소스에 접근하면(예: id 오름차순으로 잠금), 순환 대기가 발생하지 않아 데드락을 예방할 수 있습니다. PostgreSQL은 데드락을 감지하면 한 트랜잭션을 자동으로 롤백합니다.
🎉

퀴즈 통과!

점수: 0점 — 수고하셨습니다!

다음 강의로 →
😅

아쉽네요!

점수: 0점 — 70점 이상이 되어야 통과합니다.