트랜잭션의 격리 수준(Isolation Level)

song4·2023년 7월 28일
0

오잉

목록 보기
1/2
post-thumbnail

트랜잭션의 격리 수준(Isolation Level)은 여러 트랜잭션이 동시에 실행될 때 어느 정도까지 서로에게 영향을 미칠 수 있는지를 정의합니다.

이 수준에 따라 동시성과 데이터 일관성 간의 균형이 결정됩니다.

높은 격리 수준은 데이터의 일관성을 높이지만, 동시에 수행할 수 있는 트랜잭션의 수를 줄입니다.

SQL 표준에서는 네 가지 격리 수준을 정의하고 있습니다:

READ UNCOMMITTED (읽기 미완료)
가장 낮은 수준의 격리성을 제공합니다. 한 트랜잭션이 아직 커밋되지 않은 (즉, 완료되지 않은) 다른 트랜잭션의 변경 내용을 읽을 수 있습니다. 이 수준에서는 "Dirty Read"라는 현상이 발생할 수 있습니다.

Dirty Read란 한 트랜잭션이 다른 트랜잭션의 아직 확정되지 않은 데이터를 읽는 현상을 말합니다.

READ COMMITTED (읽기 완료)
한 트랜잭션이 다른 트랜잭션의 변경 내용을 읽을 수 있는 시점을 그 트랜잭션이 커밋되었을 때로 제한합니다. 이 수준에서는 대부분의 시스템에서 발생할 수 있는 "Non-repeatable Read"라는 현상을 방지할 수 있습니다.

Non-repeatable Read란 한 트랜잭션 내에서 같은 쿼리를 두 번 실행할 때마다 결과가 달라지는 현상을 말합니다.

REPEATABLE READ (반복 가능한 읽기)
이 수준에서는 트랜잭션이 시작된 이후에 커밋된 다른 트랜잭션의 변경 내용을 보지 못하게 합니다. 즉, 한 트랜잭션 내에서 같은 쿼리를 반복해서 실행하면 항상 같은 결과를 보장합니다. 하지만 이 수준에서는 "Phantom Read"라는 현상이 발생할 수 있습니다.

Phantom Read란 한 트랜잭션 내에서 일정 범위의 레코드를 두 번 이상 조회할 때, 첫 번째 쿼리에서 없던 레코드가 두 번째 쿼리에서 나타나는 현상을 말합니다.

SERIALIZABLE (직렬화 가능)
가장 높은 수준의 격리성을 제공합니다. 이 수준에서는 트랜잭션이 완전히 독립적으로 실행되는 것처럼 보이며, 모든 종류의 동시성 문제를 방지할 수 있습니다. 즉, 모든 트랜잭션이 순차적으로 실행되어야 합니다. 이로 인해 동시성이 매우 제한되지만, 데이터의 일관성을 최대한 보장할 수 있습니다.

1개의 댓글

comment-user-thumbnail
2023년 7월 28일

유익한 글이었습니다.

답글 달기