Computer Science/Database

[Database] 트랜잭션 격리 수준 (Transaction Isolation Level)

2023. 7. 16. 16:42
목차
  1. Isolation Level
  2. Isolation Level의 필요성
  3. Isolation Level 종류
  4. 선택 시 고려사항

Isolation Level

데이터베이스에서 여러 트랜잭션을 동시에 처리할 때, 특정 트랜잭션에서 수행하는 작업이 다른 트랜잭션에 얼마나 '보이는가'를 결정하는 것이다.

즉, 트랜잭션에서 일관성 없는 데이터를 허용하도록 하는 수준을 말한다.

 

Isolation Level의 필요성

여러 트랜잭션이 동시에 데이터베이스에 접근할 때 발생하는 문제를 해결하기 위해 Isolatino Level이 필요하다.

1. Dirty Read

  • 한 트랜잭션이 아직 커밋되지 않은 다른 트랜잭션의 변경을 읽는 현상
  • 이로 인해 트랜잭션의 실패로 롤백이 발생하더라도 이미 읽혀진 데이터가 원래의 값으로 돌아가지 않는 문제가 생긴다.

2. Non-Repeatable Read

  • 같은 트랜잭션 내에서 같은 쿼리를 두 번 실행했을 때, 그 결과가 다르게 나타나는 현상
  • 이는 한 트랜잭션이 진행 중 일 때, 다른 트랜잭션이 그 트랜잭션의 작업 영역을 변경하고 커밋하기 때문에 발생한다.

3. Phantom Read

  • 한 트랜잭션 내에서 같은 쿼리를 두 번 실행했을 때, 첫 번째 쿼리에서 없던 행이 두 번째 쿼리에서 나타나는 현상
  • 다른 트랜잭션이 새로운 행을 삽입하고 커밋했기 때문에 발생한다.

 

트랜잭션의 Isolation Level은 이러한 동시성 문제를 어느 정도까지 허용할 것인지를 결정한다. 이는 성능과 데이터의 일관성 사이의 균형을 찾는 것으로, 높은 격리 수준은 더 적은 동시성 문제를 발생시키지만, 반대로 성능이 떨어질 수 있다.

 

Isolation Level 종류

1. Read Uncommitted (레벨 0)

SELECT 문장이 수행되는 동안 해당 데이터에 Shared Lock이 걸리지 않는 계층

트랜잭션에서 수행한 변경 사항이 커밋되기 전에 다른 트랜잭션에서 읽을 수 있다. 즉, 'Dirty Reads'가 허용된다.

여러 트랜잭션이 동시에 실행 될 수 있으며, 따라서 동시성 문제가 가장 많이 발생한다.

 

2. Read Committed (레벨 1)

SELECT 문장이 수행되는 동안 해당 데이터에 Shared Lock이 걸리는 계층

커밋된 데이터만 다른 트랜잭션에서 읽을 수 있다. 즉, 'Dirty Reads'는 방지하지만 'Non-Repeatable Reads'와 'Phantom Reads'는 발생할 수 있다.

대부분의 데이터베이스 시스템의 기본 격리 수준이다.

 

3. Repeatable Read (레벨 2)

트랜잭션이 완료될 때까지 SELECT 문장이 사용하는 모든 데이터에 Shared Lock이 걸리는 계층

트랜잭션 동안 같은 데이터를 여러번 읽을 때 항상 동일한 결과를 반환한다. 즉, 'Dirty Reads'와 'Non-Repeatable Reads'는 방지하지만 'Phantom Reads'는 발생할 수 있다.

다른 사용자는 트랜잭션 영역에 해당되는 데이터에 대해 수정할 수 없다.

MySQL에서 기본으로 사용하는 격리 수준이다.

 

4. Serializable (레벨 3)

트랜잭션이 완료될 때까지 SELECT 문장이 사용하는 모든 데이터에 Shared Lock이 걸리는 계층

트랜잭션을 순차적으로 실행하여 동시성 문제를 완전히 제거한다. 그러나 이 레벨은 성능에 부정적인 영향을 미칠 수 있다.

 

선택 시 고려사항

Isolation Level은 동시성과 데이터 무결성에 연관되어 있다.

동시성을 증가시키면 데이터 무결성에 문제가 발생하고, 데이터 무결성을 유지하면 동시성이 떨어지게 된다. 따라서 어플리케이션의 요구사항과 성능 사이의 트레이드오프를 고려해야 한다.

저작자표시 (새창열림)

'Computer Science > Database' 카테고리의 다른 글

[Database] 저장 프로시저 (Stored PROCEDURE)  (0) 2023.07.25
[Database] 레디스 (Redis)  (0) 2023.07.16
[Database] 트랜잭션 (Transaction)  (0) 2023.07.07
[Database] 정규화 (Normalization)  (0) 2023.07.07
[Database] 인덱스 (Index)  (0) 2023.06.30
  1. Isolation Level
  2. Isolation Level의 필요성
  3. Isolation Level 종류
  4. 선택 시 고려사항
'Computer Science/Database' 카테고리의 다른 글
  • [Database] 저장 프로시저 (Stored PROCEDURE)
  • [Database] 레디스 (Redis)
  • [Database] 트랜잭션 (Transaction)
  • [Database] 정규화 (Normalization)
dbssk
dbssk
K.Back-enddbssk 님의 블로그입니다.
dbssk
K.Back-end
dbssk
  • 분류 전체보기 (220)
    • 끄적 (0)
    • TIL (8)
      • Trouble Shooting (1)
    • Programmers (94)
      • Lv.0 (29)
      • Lv.1 (40)
      • Lv.2 (25)
    • 백준 (15)
    • 구름 (0)
    • Computer Science (79)
      • 컴퓨터 구조 (3)
      • Operating System (18)
      • 알고리즘 (9)
      • 자료구조 (11)
      • Database (10)
      • Network (8)
      • Web (12)
      • Design Pattern (8)
    • Spring (2)
    • Languages (13)
      • Java (13)
    • 북 스터디 (9)
      • 스프링 부트 핵심 가이드 (9)
      • 자바 코딩 인터뷰 완벽 가이드 (0)
    • 프론트엔드 (0)

인기 글

최근 글

태그

  • java
  • 개발자이력서
  • stack
  • 배열
  • 백엔드공부
  • hash
  • 프로그래머스
  • 해시
  • Lv.0
  • 백엔드스쿨
  • 개발자포트폴리오
  • spring
  • 자료구조
  • 코딩테스트
  • LV.2
  • 개발자취준
  • LV.1
  • 백준
  • 스택
  • 개발자취업
hELLO · Designed By 정상우.
dbssk
[Database] 트랜잭션 격리 수준 (Transaction Isolation Level)
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.