cs/ODOQ

[ODOQ] 트랜잭션 격리수준

icodesiuuuu 2024. 11. 29. 20:02

[One Day One Question]

DB에서 인덱스에 대해 설명해 주세요.


트랜잭션 격리 수준(Transaction Isolation Level)은 데이터베이스에서 여러 트랜잭션이 동시에 실행될 때, 각 트랜잭션이 다른 트랜잭션으로부터 얼마나 고립(isolated)되어 있는지를 정의하는 기준입니다. 이는 데이터 무결성을 유지하면서 동시에 데이터베이스 성능을 최적화하기 위해 설계되었습니다.

 

1. READ UNCOMMITTED (읽기 미완료 허용)

  • 특징:
    • 다른 트랜잭션이 아직 커밋하지 않은 데이터를 읽을 수 있음.
    • 가장 낮은 격리 수준으로, 데이터 일관성이 깨질 가능성이 높음.
  • 문제점:
    • Dirty Read: 커밋되지 않은 데이터를 읽음으로써, 이후 롤백되면 잘못된 데이터를 읽은 문제가 발생.

 

2. READ COMMITTED (읽기 완료만 허용)

  • 특징:
    • 다른 트랜잭션에서 커밋한 데이터만 읽을 수 있음.
    • 데이터의 일관성을 어느 정도 보장.
  • 문제점:
    • Non-Repeatable Read: 같은 트랜잭션에서 동일한 데이터를 두 번 조회했을 때 결과가 다를 수 있음.

 

3. REPEATABLE READ (반복 읽기 보장)

  • 특징:
    • 트랜잭션이 시작된 이후, 다른 트랜잭션이 해당 데이터에 대해 수정하지 못하도록 보장.
    • 동일 트랜잭션 내에서 동일 쿼리는 항상 같은 결과를 반환.
  • 문제점:
    • Phantom Read: 트랜잭션 중간에 다른 트랜잭션이 데이터를 삽입하여, 결과 집합이 달라질 수 있음.

 

4. SERIALIZABLE (직렬화)

  • 특징:
    • 가장 높은 격리 수준.
    • 모든 트랜잭션을 순차적으로 실행하는 것처럼 동작.
    • 데이터에 대한 읽기 및 쓰기 작업에 완전한 고립성을 보장.
  • 문제점:
    • 성능 저하: 동시에 실행 가능한 트랜잭션 수가 크게 줄어듦.

 

트랜잭션 격리 수준 선택 기준

  • READ UNCOMMITTED: 성능이 가장 중요하고 데이터 정확성에 민감하지 않은 경우.
  • READ COMMITTED: 일반적인 애플리케이션에서 사용, 대부분의 RDBMS의 기본 설정 (예: Oracle).
  • REPEATABLE READ: 은행, 금융 등 데이터 일관성이 중요한 경우.
  • SERIALIZABLE: 데이터 무결성이 최우선인 경우(성능 저하 감수).

 

꼬리 질문

트랜잭션 격리 수준과 관련된 문제는 무엇이 있을까요?


트랜잭션 격리 수준과 관련된 문제

  1. Dirty Read: 커밋되지 않은 데이터를 읽는 문제.
  2. Non-Repeatable Read: 동일 트랜잭션 내에서 동일 데이터를 여러 번 읽을 때 값이 달라지는 문제.
  3. Phantom Read: 동일 트랜잭션 내에서 실행된 쿼리의 결과 집합이 달라지는 문제.

'cs > ODOQ' 카테고리의 다른 글

[ODOQ] 로그와 메트릭  (1) 2024.12.03
[ODOQ] 얕은 복사 깊은 복사  (0) 2024.12.02
[ODOQ] DB 인덱스(Index)  (0) 2024.11.28
[ODOQ] 일급 컬렉션  (0) 2024.11.27
[ODOQ] Checked Exception, Unchecked Exception  (0) 2024.11.26