(면접복기)트랜잭션 격리 수준 (Transaction Isolation Levels)

2025. 11. 19. 16:02·면접복기

트랜잭션 격리 수준은 데이터베이스에서 여러 개의 트랜잭션이 동시에 실행될 때, 한 트랜잭션이 다른 트랜잭션의 변경 내용을 얼마나 볼 수 있도록 허용할지를 정의하는 기준입니다.

데이터의 일관성과 동시성 사이의 균형을 맞추기 위해 사용되며, 격리 수준이 높을수록 데이터 일관성은 높아지지만 동시 처리 성능은 낮아집니다.

 

격리 수준의 4가지 단계

SQL 표준은 트랜잭션 격리 수준을 총 4가지로 정의하며, 낮은 단계에서 높은 단계로 갈수록 발생하는 **데이터 부정합 문제(Isolation Problem)**를 하나씩 해결해 나갑니다.

격리 수준 (Level) 발생 가능한 문제 특징 및 설명
0. Read Uncommitted Dirty Read, Non-Repeatable Read, Phantom Read 가장 낮은 수준. 커밋되지 않은 데이터를 읽는 것을 허용합니다.
1. Read Committed Non-Repeatable Read, Phantom Read Dirty Read를 방지합니다. 커밋된 데이터만 읽는 것을 허용합니다.
2. Repeatable Read Phantom Read Dirty Read와 Non-Repeatable Read를 방지합니다. 트랜잭션 내에서 같은 쿼리를 반복해도 항상 같은 결과를 보장합니다.
3. Serializable 없음 가장 높은 수준. Phantom Read까지 방지합니다. 트랜잭션을 완전히 순차적으로 실행하여 완벽한 데이터 일관성을 보장합니다.

격리 수준별 발생 가능한 문제 (3대 부정합 문제)

각 격리 수준이 해결하려는 문제는 다음과 같습니다.

1. Dirty Read (더티 리드)

  • 정의: 한 트랜잭션(T1)이 아직 커밋되지 않은 다른 트랜잭션(T2)의 변경된 데이터를 읽는 현상.
  • 문제: T2가 작업을 롤백(취소)하면, T1은 존재하지 않는 데이터를 기반으로 작업을 수행하게 되어 데이터 일관성이 깨집니다.
  • 해결되는 수준: Read Committed 이상 (T2가 커밋할 때까지 T1은 변경 내용을 볼 수 없음).

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

  • 정의: 한 트랜잭션(T1)이 특정 데이터를 두 번 읽을 때, 그 사이에 다른 트랜잭션(T2)이 그 데이터를 **수정(UPDATE)**하고 커밋하여 두 번째 읽기 결과가 첫 번째와 달라지는 현상.
  • 문제: 트랜잭션 내에서 일관성이 깨집니다.
  • 해결되는 수준: Repeatable Read 이상.

3. Phantom Read (유령 읽기)

  • 정의: 한 트랜잭션(T1)이 특정 조건으로 레코드 집합을 두 번 쿼리할 때, 그 사이에 다른 트랜잭션(T2)이 조건에 맞는 **새로운 레코드를 삽입(INSERT)**하고 커밋하여 두 번째 쿼리 결과에 '유령'처럼 새로운 레코드가 나타나는 현상.
  • Non-Repeatable Read가 기존 레코드의 값이 바뀌는 문제라면, Phantom Read는 레코드의 개수(집합) 자체가 바뀌는 문제입니다.
  • 해결되는 수준: Serializable 이상.

'면접복기' 카테고리의 다른 글

(면접복기)자바 컴파일 과정 완벽 정리: .java → 실행까지  (0) 2026.05.15
(면접복기)자바 기본 타입(Primitive Type) 완벽 정리  (0) 2026.05.15
(면접복기)OCP를 준수하는 결제 시스템 확장하기: 전략패턴을 활용한 유연한 설계  (0) 2026.01.27
(면접복기)쓰레드 풀 vs 커넥션 풀  (0) 2025.11.19
'면접복기' 카테고리의 다른 글
  • (면접복기)자바 컴파일 과정 완벽 정리: .java → 실행까지
  • (면접복기)자바 기본 타입(Primitive Type) 완벽 정리
  • (면접복기)OCP를 준수하는 결제 시스템 확장하기: 전략패턴을 활용한 유연한 설계
  • (면접복기)쓰레드 풀 vs 커넥션 풀
cookiboii
cookiboii
초보 개발자입니다.
  • cookiboii
    Just Do it
    cookiboii
  • 전체
    오늘
    어제
    • 분류 전체보기 (79)
      • 잡소리 (2)
      • vscode꾸미기 (1)
      • 회사공부 (0)
      • 면접복기 (5)
      • 개발취직관련 좋은 글귀 (12)
      • 개발 공부 (58)
        • 백준 (0)
        • web (3)
        • js&ts&react (4)
        • Java-Spring (18)
        • 개발책 리뷰 (0)
        • c++ (0)
        • git (0)
        • code up 문제 (5)
        • 네트워크 (5)
        • 자료구조&알고리즘 (2)
        • ci,cd (1)
        • 프로젝트 (9)
        • sql (4)
        • 컴퓨터구조 (1)
        • 운영체제 (5)
        • python (0)
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

    • 네이버블로그
    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    롤 #리그오브레전드
    코드업 #코딩문제
    깃허브 #깃 #커밋
    프로그래밍
    코딩
    포켓몬 #vscode #vscode꾸미기 #개발
    springai #spring #java
    js #web
    자바 #Java #JPA #개발자 #개발 #초보
    라이엇 #api #롤api
    자바
    ci #개발 #git
    js #제이쿼리 #비동기통신 #코딩 #프로그래밍
    js #예약어 #자바스크랩트
    개발
    사이드프로젝트 #토이프로젝트 #개발 #개발자
    Java
    JVM
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
cookiboii
(면접복기)트랜잭션 격리 수준 (Transaction Isolation Levels)
상단으로

티스토리툴바