728x90

Isolation Level(격리 수준)은 데이터베이스에서 트랜잭션들이 서로 간섭하지 않도록 하는 방법을 정의하는 중요한 개념입니다. 트랜잭션이 동시에 수행될 때 발생할 수 있는 문제(예: 일관성 깨짐)를 방지하기 위해, 트랜잭션 간의 격리 수준을 설정해 데이터를 보호할 수 있습니다.

격리 수준은 트랜잭션 간에 얼마나 많은 영향을 허용할지를 결정하며, 각 격리 수준은 서로 다른 수준의 일관성성능 사이에서 균형을 맞추는 방식입니다.

트랜잭션 동시성 문제

Isolation Level은 다음과 같은 동시성 문제를 해결하기 위해 존재합니다:

  1. Dirty Read: 한 트랜잭션이 아직 커밋되지 않은 다른 트랜잭션의 데이터를 읽는 경우.
  2. Non-repeatable Read: 한 트랜잭션 내에서 같은 데이터를 두 번 읽었을 때, 그 사이에 다른 트랜잭션에 의해 데이터가 변경되어 다른 값을 읽는 경우.
  3. Phantom Read: 한 트랜잭션 내에서 조건에 맞는 데이터의 집합을 조회했을 때, 그 사이에 다른 트랜잭션에 의해 새로운 데이터가 추가되거나 삭제되어 조회 결과가 달라지는 경우.

Isolation Level 종류

표준 SQL은 4가지 격리 수준을 정의합니다. 격리 수준이 낮을수록 성능은 좋아지지만, 동시성 문제가 발생할 수 있는 위험이 커집니다.


1. Read Uncommitted (가장 낮은 격리 수준)

  • 설명: 트랜잭션이 커밋되지 않은 데이터를 읽을 수 있습니다. 이 경우 Dirty Read가 발생할 수 있습니다.
  • 문제 해결: 아무 문제도 해결하지 않으며, 가장 낮은 일관성을 보장합니다.
  • 예시: 트랜잭션 A가 데이터를 수정했지만 아직 커밋되지 않은 상태에서, 트랜잭션 B가 수정된 데이터를 읽을 수 있습니다. 나중에 트랜잭션 A가 롤백되면, 트랜잭션 B는 잘못된 데이터를 처리하게 됩니다.
  • 발생 가능 문제:
    • Dirty Read
    • Non-repeatable Read
    • Phantom Read

2. Read Committed (기본적인 격리 수준)

  • 설명: 트랜잭션이 커밋된 데이터만 읽을 수 있습니다. Dirty Read는 방지되지만, Non-repeatable Read는 발생할 수 있습니다.
  • 문제 해결: Dirty Read 방지.
  • 예시: 트랜잭션 A가 데이터를 커밋하기 전까지, 트랜잭션 B는 그 데이터를 읽을 수 없습니다. 그러나 트랜잭션 B가 데이터를 두 번 조회했을 때, 그 사이에 트랜잭션 A가 데이터를 수정하고 커밋했다면, 서로 다른 값을 읽을 수 있습니다.
  • 발생 가능 문제:
    • Non-repeatable Read
    • Phantom Read

3. Repeatable Read (일관성 보장 수준 강화)

  • 설명: 트랜잭션 내에서 읽은 데이터는 트랜잭션이 끝날 때까지 변하지 않도록 보장합니다. Non-repeatable Read는 방지되지만, Phantom Read는 여전히 발생할 수 있습니다.
  • 문제 해결: Dirty Read, Non-repeatable Read 방지.
  • 예시: 트랜잭션 A가 특정 데이터를 읽고, 그 데이터를 다시 조회할 때까지 다른 트랜잭션 B가 그 데이터를 수정할 수 없습니다. 그러나 트랜잭션 B가 새로운 데이터를 삽입하면, 트랜잭션 A는 조건에 따라 조회 결과가 달라질 수 있습니다.
  • 발생 가능 문제:
    • Phantom Read

4. Serializable (가장 높은 격리 수준)

  • 설명: 트랜잭션이 마치 순차적으로 처리되는 것처럼 격리됩니다. Dirty Read, Non-repeatable Read, Phantom Read가 모두 방지됩니다. 가장 높은 일관성을 보장하지만, 성능이 크게 저하될 수 있습니다.
  • 문제 해결: Dirty Read, Non-repeatable Read, Phantom Read 모두 방지.
  • 예시: 트랜잭션 A가 실행되는 동안, 트랜잭션 B는 트랜잭션 A와 충돌할 수 있는 어떤 데이터도 수정하거나 삽입할 수 없습니다. 완벽한 일관성을 보장하지만, 트랜잭션 간의 동시성이 크게 제한됩니다.
728x90

요약

Isolation Level의 문제 해결 능력과 성능 간의 트레이드오프는 다음과 같습니다:

Isolation Level Dirty Read  Non-repeatable Read Phantom Read 성능
Read Uncommitted 발생 가능 발생 가능 발생 가능 매우 높음
Read Committed 방지됨 발생 가능 발생 가능 높음
Repeatable Read 방지됨 방지됨 발생 가능 중간
Serializable 방지됨 방지됨 방지됨 낮음

 

Isolation Level은 데이터베이스에서 성능과 일관성 간의 균형을 맞추는 중요한 설정입니다. 낮은 수준의 격리 설정은 더 나은 성능을 제공할 수 있지만 일관성 문제가 발생할 수 있습니다. 반대로, 높은 격리 수준은 완벽한 일관성을 제공하지만 성능 저하를 초래할 수 있습니다.

따라서, 애플리케이션의 요구 사항에 따라 적절한 격리 수준을 선택이 필요합니다.

728x90
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기
반응형