데이터베이스 트랜잭션 격리 수준 4가지와 특징
한 줄 답변
트랜잭션 격리 수준은 여러 트랜잭션이 동시에 처리될 때 특정 트랜잭션이 다른 트랜잭션에서 변경하거나 조회하는 데이터를 볼 수 있게 허용할지 결정하는 설정으로, 일관성과 성능 사이의 균형을 조절합니다.
핵심 개념 정리
트랜잭션 격리 수준(Isolation Level)은 여러 트랜잭션이 동시에 처리될 때, 특정 트랜잭션이 다른 트랜잭션에서 변경하거나 조회하는 데이터를 볼 수 있게 허용할지 말지를 결정하는 수준입니다. 이는 데이터베이스의 원자성, 일관성, 격리성, 지속성을 뜻하는 ACID 원칙 중 '격리성'을 구현하는 핵심 메커니즘입니다. 격리 수준이 높을수록 데이터 일관성은 엄격하게 보장되지만, 동시 처리 성능은 떨어지는 트레이드오프(Trade-off) 관계를 가집니다.
ANSI/ISO SQL 표준에서는 4가지 격리 수준을 정의하고 있습니다. 가장 낮은 수준인 READ UNCOMMITTED는 커밋되지 않은 데이터까지 읽을 수 있어 Dirty Read라는 심각한 데이터 정합성 문제를 유발하지만 성능은 가장 빠릅니다. 그 위인 READ COMMITTED는 커밋된 데이터만 읽으며 Oracle, PostgreSQL 등 대중적인 RDBMS의 기본값입니다. 하지만 한 트랜잭션 내에서 같은 데이터를 조회했을 때 값이 달라지는 Non-repeatable Read 현상이 발생할 수 있습니다.
REPEATABLE READ는 MySQL InnoDB의 기본 격리 수준으로, 한 트랜잭션 내에서 동일한 데이터를 여러 번 조회해도 항상 같은 결과를 보장합니다. 이는 언두(Undo) 로그를 활용한 MVCC(Multi-Version Concurrency Control)를 통해 구현됩니다. 마지막으로 SERIALIZABLE은 모든 트랜잭션을 순차적으로 실행하는 것처럼 관리하여 Phantom Read를 포함한 모든 이상 현상을 방지하지만, 동시성이 극도로 낮아 실무에서는 특정 목적 외에는 거의 사용되지 않습니다. 인덱스 설계와 락의 범위에 따라 시스템 전체 성능이 좌우되므로 서비스 특성에 맞는 적절한 격리 수준 선택이 필수적입니다.
비교 정리
| 항목 | READ COMMITTED | REPEATABLE READ |
|---|---|---|
| Dirty Read | 발생 안 함 | 발생 안 함 |
| Non-repeatable Read | 발생 가능 | 발생 안 함 |
| Phantom Read | 발생 가능 | InnoDB 기준 발생 안 함 |
| 성능 및 정합성 | 빠름, 정합성 낮음 | 보통, 정합성 높음 |
면접에서 이렇게 답하세요
면접에서는 단순히 4가지 단계를 나열하는 것보다, '왜 특정 격리 수준을 선택해야 하는가'에 집중하세요. 특히 MySQL과 Oracle의 기본 격리 수준 차이(Repeatable Read vs Read Committed)를 언급하고, 발생할 수 있는 이상 현상(Dirty Read 등)을 구체적인 시나리오로 설명하는 것이 좋습니다. 실무에서는 대부분 Read Committed를 사용하며, 특별한 정합성이 필요한 경우에만 쿼리 레벨의 잠금(Lock)을 활용한다는 점을 덧붙이면 좋습니다.
자주 묻는 추가 질문
Q. Dirty Read란 정확히 무엇인가요?
한 트랜잭션이 커밋되지 않은 다른 트랜잭션의 변경 데이터를 조회하는 현상으로, 만약 해당 트랜잭션이 롤백되면 잘못된 데이터를 읽게 되는 문제입니다.
Q. MySQL InnoDB는 Phantom Read를 어떻게 방지하나요?
Next-Key Lock(Record Lock + Gap Lock)을 사용하여 인덱스 레코드와 레코드 사이의 간격을 잠금으로써 새로운 레코드 삽입을 막아 방지합니다.
Q. Serializable을 실무에서 잘 사용하지 않는 이유는?
트랜잭션을 순차적으로 실행하도록 강제하기 때문에 트랜잭션 간 대기 시간이 길어져 동시 처리 성능(Throughput)이 급격히 저하되기 때문입니다.
커뮤니티 하이라이트
“실무에서는 보통 READ COMMITTED를 쓰고, 돈이 오가는 정산 시스템 같은 곳에서만 정교한 Lock이나 REPEATABLE READ를 고려합니다. 기본값의 중요성을 꼭 언급하세요.”
“각 격리 수준에서 발생하는 3가지 이상 현상을 테이블로 그려서 외우면 면접 때 설명하기 훨씬 수월합니다. InnoDB의 특수성도 큰 플러스 요인입니다.”
42명의 개발자가 이 질문에 참여했습니다
관련 면접 질문
앱에서 직접 답변해보세요
매일 3개의 면접 질문에 답변하고,
다른 개발자들의 답변을 비교해보세요.