문제
한 트랜잭션에서 동일한 쿼리를 여러 번 실행했을 때 첫 번째 실행과 두 번째 실행 사이에 다른 트랜잭션이 새로운 레코드를 삽입하여 두 번째 실행에서 추가적인 행들이 나타나는 현상을 방지할 수 있는 최소한의 격리 수준은 무엇인가?
정답
SERIALIZABLE
SERIALIZABLESerializable시리얼라이저블직렬화 가능
해설
이 문제는 Phantom Read 현상을 방지할 수 있는 격리 수준을 묻고 있습니다. Phantom Read는 동일한 트랜잭션 내에서 같은 범위 쿼리를 반복 실행할 때, 다른 트랜잭션의 INSERT로 인해 새로운 행들이 나타나는 현상입니다. 격리 수준별로 살펴보면: READ UNCOMMITTED와 READ COMMITTED는 Phantom Read를 방지하지 못하고, REPEATABLE READ도 기존 행의 변경은 방지하지만 새로운 행의 삽입(Phantom Read)은 허용합니다. 오직 SERIALIZABLE 격리 수준만이 범위 락(Range Lock)이나 갭 락(Gap Lock)을 통해 Phantom Read를 완전히 방지할 수 있습니다.