페이지

2026년 4월 1일 수요일

데이터베이스 트랜잭션 격리 수준(Transaction Isolation Level)과 이상현상

 

1. 데이터베이스 트랜잭션 동시성 제어의 핵심, 격리 수준의 개요

**데이터베이스 트랜잭션 격리 수준(Transaction Isolation Level)**이란 다중 사용자 환경에서 여러 트랜잭션이 동시에 실행될 때, 특정 트랜잭션이 다른 트랜잭션에서 변경하거나 조회하는 데이터를 볼 수 있도록 허용할지 여부를 결정하는 수준(Level)입니다.

트랜잭션의 ACID 특성 중 **격리성(Isolation)**을 보장하기 위한 수단으로, 데이터의 **일관성(Consistency)**과 시스템의 동시성(Concurrency) 사이의 트레이드오프(Trade-off)를 조율하는 핵심 메커니즘입니다.


2. 가. 데이터베이스 트랜잭션 격리 수준 4가지

ANSI/ISO SQL 표준(SQL-92)에서는 트랜잭션 격리 수준을 크게 4가지 단계로 정의하고 있으며, 레벨이 높아질수록 격리성은 강해지지만 동시 처리 성능은 저하됩니다.

레벨격리 수준 명칭설명특징
Level 0

Read Uncommitted


(커밋 전 읽기)

다른 트랜잭션의 변경 내용이 커밋(Commit)되지 않아도 읽을 수 있는 가장 낮은 격리 수준데이터 정합성 문제가 커 실무에서 거의 사용하지 않음
Level 1

Read Committed


(커밋 후 읽기)

트랜잭션의 변경 내용이 커밋된 후에만 다른 트랜잭션에서 읽을 수 있는 수준Oracle, PostgreSQL 등 다수의 DBMS에서 기본값(Default)으로 채택
Level 2

Repeatable Read


(반복 가능 읽기)

트랜잭션이 시작되기 전에 커밋된 내용에 대해서만 조회할 수 있는 수준한 트랜잭션 내에서 동일한 쿼리는 항상 같은 결과를 보장. MySQL(InnoDB)의 기본값
Level 3

Serializable


(직렬화 가능)

가장 엄격한 격리 수준으로, 읽기 작업 시에도 공유 잠금(Shared Lock)을 획득하여 동시 접근을 차단하는 수준완벽한 데이터 일관성을 보장하지만, 동시성이 가장 떨어져 데드락 발생 가능성 높음

3. 나. 데이터베이스 트랜잭션 격리 수준에 따라 발생할 수 있는 이상현상

격리 수준이 낮을수록 다른 트랜잭션의 간섭을 받아 데이터 무결성이 훼손되는 이상현상(Anomaly)이 발생할 수 있습니다. 대표적인 이상현상은 다음과 같습니다.

1) 이상현상의 종류 및 개념

  • Dirty Read (오류 읽기): 다른 트랜잭션이 데이터를 수정하고 아직 커밋하지 않은 상태(Uncommitted)의 데이터를 읽는 현상입니다. 만약 데이터를 수정한 트랜잭션이 롤백(Rollback)되면, 이 데이터를 읽고 작업을 수행한 트랜잭션은 잘못된 데이터를 기반으로 처리하게 되어 심각한 무결성 훼손이 발생합니다.

  • Non-Repeatable Read (반복 불가능한 읽기): 한 트랜잭션 내에서 동일한 쿼리를 두 번 수행할 때, 그 사이에 다른 트랜잭션이 해당 데이터를 수정(Update) 또는 삭제(Delete)하고 커밋하여 두 쿼리의 결과가 다르게 나타나는 현상입니다. (UPDATE/DELETE 연산에 의해 발생)

  • Phantom Read (유령 읽기): 한 트랜잭션 내에서 동일한 조건으로 여러 레코드를 두 번 조회할 때, 첫 번째 조회에는 없던 레코드가 두 번째 조회에 나타나는 현상입니다. 다른 트랜잭션이 조건에 맞는 새로운 레코드를 삽입(Insert)하고 커밋하여 발생합니다. (INSERT 연산에 의해 발생)

2) 격리 수준과 이상현상 발생 매트릭스

격리 수준에 따라 통제 가능한 이상현상은 아래 표와 같습니다.

격리 수준 (Isolation Level)Dirty ReadNon-Repeatable ReadPhantom Read
Read Uncommitted (Lv.0)발생발생발생
Read Committed (Lv.1)방지됨발생발생
Repeatable Read (Lv.2)방지됨방지됨발생 (*1)
Serializable (Lv.3)방지됨방지됨방지됨

*(※ 1: MySQL InnoDB의 경우 Repeatable Read 레벨에서도 갭 락(Gap Lock)과 넥스트 키 락(Next-Key Lock)을 활용하여 Phantom Read를 방지합니다.)


4. 결론 및 실무 적용 시 고려사항

트랜잭션 격리 수준은 **"데이터 정합성(무결성)"**과 **"성능(동시성 처리량)"**의 반비례 관계를 갖습니다. 따라서 완벽한 데이터 정합성을 위해 무조건 Serializable을 선택하기보다는, 시스템의 비즈니스 요건에 맞춰 적절한 타협점을 찾아야 합니다.

최근의 상용 및 오픈소스 DBMS(Oracle, MySQL, PostgreSQL 등)는 단순히 Lock 기반으로 동시성을 제어하는 것의 한계를 극복하기 위해, MVCC(다중 버전 동시성 제어, Multi-Version Concurrency Control) 기술을 도입하였습니다. MVCC는 데이터의 변경 이력(Undo Log)을 유지하여 읽기 작업 시 Lock을 사용하지 않고도 일관된 읽기를 제공함으로써, 높은 수준의 격리성(Read Committed 이상)을 유지하면서도 동시 처리 성능을 극대화하고 있습니다. 따라서 아키텍트 및 DBA는 도입하는 DBMS의 내부 동작 원리(특히 MVCC 구현 방식)를 명확히 이해하고 아키텍처를 설계해야 합니다.

댓글 없음: