트랜잭션 격리수준 4단계 완전 이해 (READ UNCOMMITTED부터 SERIALIZABLE까지)

2026. 2. 23. 22:15·정보/테크 기술

수만 명이 동시에 같은 데이터를 읽고 쓸 때, 데이터베이스는 어떻게 질서를 유지할까요? 모든 요청을 순차 처리하면 데이터는 완벽하지만 서비스가 느려지고, 제약 없이 접근을 허용하면 성능은 좋지만 데이터 정합성이 낮아집니다.

 

트랜잭션 격리수준은 이 동시성과 일관성 사이의 최적 균형점을 찾는 설정입니다. ANSI SQL 표준에서 4단계로 정의하며, 단계마다 허용하는 이상 현상의 범위가 달라집니다.

트랜잭션 격리수준이란?

ACID의 I(격리성)는 "트랜잭션끼리 서로 영향을 주지 않아야 한다"는 원칙입니다. 이를 현실에서 100% 지키면 성능이 나빠지기 때문에, "어느 정도까지 격리할 것인가"를 단계별로 설정한 것이 트랜잭션 격리수준입니다.

 

격리수준이 높을수록 정합성은 올라가지만 성능은 떨어집니다. 정합성과 성능은 반비례 관계입니다.

격리 수준이 낮으면 생기는 문제들

격리 수준이 낮을 때 세 가지 이상 현상이 발생합니다. 어디까지 허용하고 어디서부터 막을지가 각 격리수준의 핵심입니다.

이상 현상 발생 원인 발생 조건
더티 리드 커밋 전 데이터를 다른 트랜잭션이 읽음 READ UNCOMMITTED
넌 리피터블 리드 반복 조회 중 다른 트랜잭션이 수정·커밋해 값이 달라짐 READ COMMITTED 이하
팬텀 리드 범위 조회 중 새 행이 삽입되어 없던 데이터가 나타남 REPEATABLE READ 이하

4단계 격리수준 상세

READ UNCOMMITTED (Level 0)

커밋하지 않은 데이터까지 읽기를 허용하므로, 사실상 격리를 하지 않는 단계입니다. 트랜잭션 1이 잔액을 50만 원으로 업데이트했지만 미커밋일 때, 트랜잭션 2가 50만 원을 읽고, 나중에 트랜잭션 1이 롤백되면 존재하지 않는 값으로 작업하는 문제가 발생합니다. 실무에서는 거의 사용하지 않습니다.

READ COMMITTED (Level 1)

커밋된 데이터만 읽을 수 있어 더티 리드를 차단합니다. Oracle과 PostgreSQL의 기본 격리수준이며, 일반 온라인 서비스에서 가장 많이 사용됩니다. 다만 같은 트랜잭션 내에서 같은 쿼리를 두 번 조회할 때, 다른 트랜잭션이 수정·커밋하면 값이 달라지는 넌 리피터블 리드가 발생할 수 있습니다.

REPEATABLE READ (Level 2)

트랜잭션 시작 시점의 스냅샷을 유지해 같은 쿼리를 반복해도 같은 값을 보장합니다. MySQL InnoDB의 기본 격리수준이며, 넌 리피터블 리드를 차단합니다. ANSI 표준상 팬텀 리드는 발생할 수 있지만, MySQL은 넥스트키 락으로 실질적으로 방지합니다. 이론과 실무의 차이로, 면접에서도 자주 나옵니다.

SERIALIZABLE (Level 3)

완벽한 격리로, 여러 트랜잭션이 동시에 실행되어도 순차 실행과 동일한 결과를 보장합니다. 세 가지 이상 현상이 모두 차단되지만, 읽기 작업에도 공유 락을 걸어 동시성이 급격히 떨어집니다. 결제 정산, 회계 시스템처럼 정합성이 절대적으로 중요한 경우에만 사용합니다.

MVCC, 락 없이 격리성을 구현하는 방법

락 없이 격리성을 구현하는 방법은 무엇일까요? 정답은 MVCC(Multi-Version Concurrency Control)입니다.

 

데이터 수정 시 기존 값을 바로 덮지 않고 변경 전 값을 언두 로그(Undo Log)에 보관해 하나의 데이터에 여러 버전이 공존합니다. 트랜잭션은 자신의 시작 시점을 기준으로 가시성을 판단해 그 시점의 버전을 읽으므로, 읽기 트랜잭션이 쓰기 트랜잭션을 기다릴 필요가 없습니다. 락 없이 격리성을 보장하면서 성능도 지키는 핵심 기법입니다.

실무에서는 어떤 격리수준을 선택해야 할까?

정답은 없지만, 선택 기준은 분명합니다. SNS나 커머스 같은 일반 온라인 서비스는 READ COMMITTED를 선택하고, 정산이나 회계 시스템은 REPEATABLE READ에 비관적 락을 조합하는 것이 현실적입니다.

DBMS 기본 격리수준
MySQL InnoDB REPEATABLE READ
Oracle READ COMMITTED
PostgreSQL READ COMMITTED

성능과 정합성의 균형을 비즈니스 요구에 맞게 찾는 것이 핵심입니다.

 

트랜잭션 격리 레벨은 올라갈수록 더티 리드, 넌 리피터블 리드, 팬텀 리드를 순서대로 차단합니다. 면접에서 이 흐름과 실무 선택 기준을 함께 설명하면 깊이 있는 답변이 될 수 있습니다. Oracle이 READ COMMITTED를, MySQL이 REPEATABLE READ를 기본값으로 선택한 이유는 각 DBMS의 MVCC 구현 방식의 차이에 있으며, 이를 이해하면 데이터베이스 동시성 제어가 더 명확해질 겁니다.

'정보 > 테크 기술' 카테고리의 다른 글

오픈클로 보안 위험, 이것만 알고 사용하세요  (0) 2026.03.15
Next.js 성능 최적화 완벽 가이드 (초보도 이해하는)  (0) 2026.02.13
Solid Cache란? Redis 비용 1/10으로 줄이는 Rails 8 캐싱  (0) 2026.02.12
OLED vs QLED 차이 비교 - 뭐가 좋을까 쉽게 알려드림  (0) 2026.02.11
QLED OLED 차이 완벽 비교, 2025년 TV 구매 전 꼭 알아야 할 핵심 포인트  (1) 2026.01.23
'정보/테크 기술' 카테고리의 다른 글
  • 오픈클로 보안 위험, 이것만 알고 사용하세요
  • Next.js 성능 최적화 완벽 가이드 (초보도 이해하는)
  • Solid Cache란? Redis 비용 1/10으로 줄이는 Rails 8 캐싱
  • OLED vs QLED 차이 비교 - 뭐가 좋을까 쉽게 알려드림
우리 픽마스터
우리 픽마스터
IT, AI 관련 소식 빠르게 전달 해드려요
  • 우리 픽마스터
    우리 픽스노트
    우리 픽마스터
    • 분류 전체보기 (195)
      • AI (73)
        • Claude (27)
        • GPT (6)
      • 코딩 (2)
        • Android (2)
      • 정보 (30)
        • 테크 기술 (6)
        • 금융 (4)
        • 부동산 (1)
        • 자동차 (3)
        • 심리학 (3)
        • 잡다한 지식 (13)
      • 네이버 클라우드 (8)
      • 제품 (69)
        • 가전.디지털 (42)
        • PC.노트북 (3)
        • PC 주변기기 (2)
        • 음향가전 (2)
        • 다이어리 (2)
        • 공구 (4)
        • 자동차 (8)
        • 홈인테리어 (3)
        • 패션잡화 (0)
        • 해외여행 (2)
        • 식품 (1)
      • 기타 (13)
  • 인기 글

  • 태그

    AI 자동화
    AI 에이전트
    엔진코팅제
    AI코딩
    ChatGPT 5.4
    ai 개발 도구
    claude code
    환율전망
    클로드코드 사용법
    클로드코드
    생성형AI
    AI활용법
    프롬프트 엔지니어링
    클로드ai
    AI에이전트
    Computer Use
    AI프롬프트
    Claude Code 사용법
    클로드 코드 사용방법
    엔진오일첨가제
    오픈클로
    네이버클라우드
    ai개발도구
    AI 코딩
    에이전트 자동화
    프롬프트엔지니어링
    ai코딩도구
    1M 토큰 컨텍스트
    바이브코딩
    ai 코딩 도구
  • 전체
    오늘
    어제
  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
우리 픽마스터
트랜잭션 격리수준 4단계 완전 이해 (READ UNCOMMITTED부터 SERIALIZABLE까지)
상단으로

티스토리툴바