DatabaseTransaction

트랜잭션 격리 수준

동시에 실행되는 트랜잭션 간 데이터 가시성을 제어하는 4가지 격리 수준을 학습합니다.

한눈에 보기

격리 수준Dirty ReadNon-Repeatable ReadPhantom Read
READ UNCOMMITTEDOOO
READ COMMITTEDXOO
REPEATABLE READXXO
SERIALIZABLEXXX

이상 현상이란?

Dirty Read

다른 트랜잭션이 커밋하지 않은 데이터를 읽습니다. 해당 트랜잭션이 롤백하면, 존재하지 않는 데이터를 읽은 셈이 됩니다.

Non-Repeatable Read

같은 트랜잭션에서 같은 쿼리를 두 번 실행했을 때 결과가 다릅니다. 다른 트랜잭션이 중간에 데이터를 수정하고 커밋했기 때문입니다.

Phantom Read

같은 조건으로 조회했을 때 이전에 없던 행이 나타납니다. 다른 트랜잭션이 새 행을 삽입하고 커밋했기 때문입니다.

격리 수준 상세

READ UNCOMMITTED

가장 낮은 격리 수준입니다. 커밋되지 않은 데이터도 읽을 수 있어 모든 이상 현상이 발생할 수 있습니다.

실무 사용: 거의 사용하지 않습니다.

READ COMMITTED

커밋된 데이터만 읽습니다. Dirty Read는 방지하지만, 같은 쿼리를 반복 실행하면 다른 결과가 나올 수 있습니다.

기본값: PostgreSQL, Oracle, SQL Server

REPEATABLE READ

트랜잭션 시작 시점의 스냅샷을 기준으로 읽습니다. 같은 쿼리는 항상 같은 결과를 반환합니다.

기본값: MySQL InnoDB

SERIALIZABLE

가장 높은 격리 수준입니다. 트랜잭션이 순차적으로 실행되는 것처럼 동작합니다. 모든 이상 현상을 방지하지만 동시성이 크게 떨어집니다.

실무 사용: 금융 거래 등 정확성이 중요한 경우

직접 체험하기

격리 수준과 시나리오를 선택하고 단계별로 실행하세요. 각 이상 현상이 어떻게 발생하는지 확인할 수 있습니다.

Transaction Isolation Lab
현재 DB 상태
accounts 테이블
namebalance
Alice1000
Bob500
Transaction AIDLE
BEGIN
SELECT
SELECT
COMMIT
Transaction BIDLE
BEGIN
UPDATE
ROLLBACK
0 / 7
Transaction A 시작

격리 수준별 이상 현상

격리 수준Dirty ReadNon-RepeatablePhantom
READ_UNCOMMITTEDOOO
READ_COMMITTEDXOO
REPEATABLE_READXXO
SERIALIZABLEXXX