SQL - 트랜잭션 격리수준

CODE0227·2025년 4월 10일

SQL

목록 보기
6/6

1️⃣ 트랜잭션 격리수준

Transaction Isolation Level은 데이터베이스 트랜잭션 간의 상호작용을 제어하여 데이터 일관성과 동시성을 조절하는 설정이다. 격리 수준은 트랜잭션이 다른 트랜잭션의 작업에 얼마나 영향을 받는지, 그리고 어떤 이상 현성이 발생할 수 있는지를 정의한다.

2️⃣ 정의/목적

정의

트랜잭션이 다른 트랜잭션의 변경 사항을 어디까지 볼 수 있는지, 그리고 데이터 일관성을 어느 정도 보장할지를 결정하는 수준

목적

  • 데이터 일관성: 트랜잭션이 서로 간섭하지 않도록 보장
  • 동시성: 여러 트랜잭션이 동시에 실행될 수 있도록 허용

trade-off:격리 수준이 높을수록 일관성은 강화되지만 동시성이 낮아지고, 반대로 격리 수준이 낮을수록 동시성은 높아지지만 일관성 문제가 발생할 수 있음

3️⃣ 이상 현상

격리 수준에서 발생할 수 있는 이상현상

1. Dirty Read (더티 리드)

  • 한 트랜잭션이 커밋되지 않은 변경 사항(Dirty Data)을 다른 트랜잭션이 읽는 경우
  • 예: T1이 데이터를 수정 중인데 T2가 이를 읽고, T1이 롤백되면 T2가 잘못된 데이터를 읽음

2. Non-Repeatable Read (반복 불가능 읽기)

  • 한 트랜잭션 내에서 동일한 데이터를 두 번 읽었을 때, 다른 트랜잭션의 변경으로 값이 달라지는 경우
  • 예: T1이 데이터를 읽은 후 T2가 수정하고 커밋, T1이 다시 읽으면 다른 값

3. Phantom Read (팬텀 리드)

  • 한 트랜잭션 내에서 동일한 조건으로 쿼리를 실행했을 때, 다른 트랜잭션의 삽입/삭제로 결과 행 수가 달라지는 경우
  • 예: T1이 SELECT로 5행을 조회한 후, T2가 새 행을 추가하고 커밋, T1이 다시 조회하면 6행

4️⃣ 종류

SQL 표준(ANSI/ISO)에서 정의한 4가지 격리 수준과 각 수준에서 방지되는 이상 현상

1. Read Uncommitted (읽기 비커밋)

  • 설명: 커밋되지 않은 데이터(Dirty Data)를 읽을 수 있음
  • 방지되는 이상: 없음
  • 발생 가능 문제: Dirty Read, Non-Repeatable Read, Phantom Read
  • 특징: 가장 낮은 격리 수준, 동시성 극대화, 일관성 최소화
  • 사용 예: 데이터 일관성이 덜 중요한 로그 시스템

(2) Read Committed (읽기 커밋)

  • 설명: 커밋된 데이터만 읽을 수 있음. Dirty Read 방지
  • 방지되는 이상: Dirty Read
  • 발생 가능 문제: Non-Repeatable Read, Phantom Read
  • 특징: 대부분의 DBMS에서 기본 설정. 동시성과 일관성의 균형
  • 사용 예: 일반적인 웹 애플리케이션

(3) Repeatable Read (반복 가능 읽기)

  • 설명: 트랜잭션 내에서 동일한 데이터를 반복 읽을 때 항상 같은 값을 보장. 데이터 수정 방지
  • 방지되는 이상: Dirty Read, Non-Repeatable Read
  • 발생 가능 문제: Phantom Read
  • 특징: 트랜잭션 동안 읽은 데이터의 일관성 보장
  • 사용 예: 금융 시스템에서 데이터 변경 방지 필요 시

(4) Serializable (직렬화 가능)

  • 설명: 트랜잭션이 완전히 격리되어 순차적으로 실행된 것처럼 동작. 모든 이상 방지
  • 방지되는 이상: Dirty Read, Non-Repeatable Read, Phantom Read
  • 발생 가능 문제: 없음
  • 특징: 최고 수준의 격리, 동시성 낮음, 성능 저하 가능
  • 사용 예: 데이터 일관성이 매우 중요한 경우 (예: 은행 이체)

격리 수준과 Lock

  • Read Uncommitted: 거의 락 없음
  • Read Committed: 쓰기 락만 사용, 읽기 시 커밋된 데이터만 확인
  • Repeatable Read: 읽기 락 추가로 동일 데이터 유지
  • Serializable: 범위 락(Range Lock)으로 모든 간섭 방지

5️⃣ 사용 가이드

  • Read Uncommitted: 데이터 일관성보다 성능이 중요한 로그/분석 시스템
  • Read Committed: 대부분의 일반 애플리케이션에 적합 (기본값)
  • Repeatable Read: 데이터 수정 방지가 중요한 금융/재고 관리
  • Serializable: 데이터 무결성이 최우선인 극히 민감한 작업

6️⃣ 결론

  • 트랜잭션 격리 수준은 동시성과 일관성의 균형을 조절하는 핵심 설정
  • 리케이션 요구사항(성능 vs 정확성)에 따라 적절히 선택해야 하며, DBMS의 기본 설정과 구현 방식(MVCC 와 Lock)을 이해하는 것이 중요
profile
CODE0227

0개의 댓글