트랜잭션 격리 수준(Transaction Isolation Levels)은 데이터베이스 시스템에서 여러 트랜잭션이 동시에 실행될 때 어떻게 격리되는지를 정의하는 개념입니다.
Read Uncommitted (레벨 0):
가장 낮은 격리 수준으로, 트랜잭션에서 변경된 데이터가 커밋되지 않아도 다른 트랜잭션에서 해당 데이터를 읽을 수 있습니다. 이로 인해 "Dirty Read"와 "Non-Repeatable Read"와 같은 문제가 발생할 수 있으며, 데이터의 일관성과 정확성이 보장되지 않습니다.
Read Committed (레벨 1):
Read Committed 격리 수준에서는 트랜잭션이 커밋된 데이터만 읽을 수 있습니다. 다른 트랜잭션이 아직 커밋되지 않은 데이터를 읽을 수 없기 때문에 "Dirty Read"는 발생하지 않지만, "Non-Repeatable Read"는 여전히 발생할 수 있습니다.
Repeatable Read (레벨 2):
Repeatable Read 격리 수준에서는 트랜잭션이 시작된 후에 다른 트랜잭션에서 데이터를 수정할 수 없습니다. 이로 인해 "Dirty Read"와 "Non-Repeatable Read"가 발생하지 않습니다. 하지만 동일한 쿼리를 실행해도 항상 동일한 결과를 보장하지 않아 "Phantom Read" 문제가 발생할 수 있습니다.
Serializable (레벨 3):
가장 높은 격리 수준으로, 트랜잭션이 완료될 때까지 해당 트랜잭션에서 사용한 데이터를 다른 트랜잭션이 변경할 수 없습니다. Serializable 격리 수준은 모든 문제를 방지할 수 있지만, 동시성이 매우 낮아질 수 있고 성능에 영향을 미칠 수 있습니다.