[ DB ] 트랜잭션 격리 수준(Transaction Isolation Levels)

이승렬·2023년 8월 5일
0

[DataBase]

목록 보기
4/12
post-thumbnail

1. 정의

트랜잭션 격리 수준(Transaction Isolation Levels)은 데이터베이스 시스템에서 여러 트랜잭션이 동시에 실행될 때 어떻게 격리되는지를 정의하는 개념입니다.

  • 격리 수준은 동시성 제어를 통해 트랜잭션 간의 상호작용을 조절하여 데이터의 일관성과 무결성을 보장합니다.
  • 주로 네 가지 격리 수준이 사용되며, 각 수준은 트랜잭션 간의 가시성 및 영향도를 다르게 설정합니다.

2. Level 별 정리

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 격리 수준은 모든 문제를 방지할 수 있지만, 동시성이 매우 낮아질 수 있고 성능에 영향을 미칠 수 있습니다.

3. 특징

  • 격리 수준은 데이터베이스 시스템의 설정에서 지정할 수 있으며, 트랜잭션 격리 수준은 트레이드오프의 문제가 있습니다.
  • 높은 격리 수준은 데이터 일관성과 정확성을 보장하지만, 동시성과 성능에 영향을 미칠 수 있습니다.
  • 반대로 낮은 격리 수준은 동시성과 성능을 향상시키지만 데이터 일관성에 대한 보장이 떨어질 수 있습니다.
  • 따라서 격리 수준을 선택할 때는 시스템의 요구사항과 우선순위를 고려하여 적절한 격리 수준을 결정해야 합니다.
profile
Backend_Developer

0개의 댓글