CS지식/백엔드

DB 트랜잭션 격리수준 정리하기

2024. 12. 30. 09:58
목차
  1. 트랜잭션 격리 수준이란?
  2. 트랜잭션 충돌로 발생할 수 있는 문제
  3. Dirty Read(더티 읽기)
  4. Non-Repeatable Read(반복 불가능 읽기) 
  5. Phantom Read(팬텀 읽기) 
  6. 트랜잭션 격리 수준의 종류
  7. Read Uncommitted(읽기 미완료 허용)
  8. Read Committed(읽기 커밋 허용)
  9. Repeatable Read(반복 가능 읽기)
  10. Serializable(직렬화)
  11. 격리 수준 비교
  12. 결론

cs 로고

 

안녕하세요 인터럽트입니다.
이번 포스팅에서는 DB의 트랜잭션 격리 수준에 대해서 정리해보려고 합니다.
개념은 알고 있지만 미리 정리를 함으로 써 면접 시 좀 더 깔끔한 답변을 할 수 있겠죠?

 

데이터베이스는 트랜잭션이라는 작업 단위로 묶어서 데이터를 처리합니다.
작업도중 문제가 발생하면 모든 작업을 원래 상태로 rollback 할 수 있어서 데이터의 일관성과 신뢰성을 유지할 수 있습니다.
이 과정에서 동시에 여러 트랜잭션이 수행될 때 발생할 수 있는 문제를 제어하기 위해 필요한 개념이  격리수준(Isolation Level)입니다.

반응형

트랜잭션 격리 수준이란?

트랜잭션 격리 수준은 데이터베이스가 동시에 실행되는 여러 트랜잭션 간의 상호작용을 제어하는 방식입니다.
격리 수준에 따라 트랜잭션 간에 발생할 수 있는 읽기오류, 데이터 일관성 문제를 방지하는 정도가 달라집니다.

트랜잭션 충돌로 발생할 수 있는 문제

Dirty Read(더티 읽기)

한 트랜잭션이 커밋되지 않은 데이터를 읽는 경우.

 

Non-Repeatable Read(반복 불가능 읽기) 

한 트랜잭션에서 동일한 데이터를 두 번 읽을 때 값이 달라지는 경우

 

Phantom Read(팬텀 읽기) 

한 트랜잭션에서 동일한 조건으로 조회했을 때 추가되거나 삭제된 행으로 결과가 달라지는 경우

 

 

 

반응형

트랜잭션 격리 수준의 종류

Read Uncommitted(읽기 미완료 허용)

가장 낮은 격리 수준으로 다른 트랜잭션이 커밋하지 않은 데이터도 읽을 수 있습니다.

특징

  • Dirty Read 문제가 발생할 수 있다.
  • 성능은 가장 좋지만 데이터 무결성에 취약하다.

사용이유
데이터 정확성보다 성능이 중요한 경우.

--예제
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
BEGIN TRANSACTION;
SELECT * FROM Orders;

 

Read Committed(읽기 커밋 허용)

트랜잭션이 커밋된 데이터만 읽을 수 있습니다.

 

특징

  • Dirty Read 방지
  • Non-Repeatable Read 가능성 존재.

사용이유
대부분의 애플리케이션에서 기본적으로 사용하는 격리 수준입니다.

--예제
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
BEGIN TRANSACTION;
SELECT * FROM Orders WHERE Status = 'Pending';

 

Repeatable Read(반복 가능 읽기)

트랜잭션이 완료될 때까지 동일한 데이터를 읽을 때 일관성을 보장합니다.

특징

  • Dirty Read와 Non-Repeatable 방지.
  • Phantom Read 가능성 존재

사용이유
금융, 의료 시스템처럼 데이터 일관성이 중요한 경우.

--예제
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
BEGIN TRANSACTION;
SELECT * FROM Products WHERE Category = 'Books';

 

Serializable(직렬화)

가장 높은 격리 수준으로, 트랜잭션이 직렬화된 것처럼 순차적으로 실행됩니다.

특징

  • Dirty Read, Non-Repeatable, Phantom Read 모두 방지.
  • 성능은 가장 낮고, 잠금과 대기 시간이 길어질 수 있음.

사용이유
은행 이체, 재고 관리등 강력한 데이터 무결성이 필요한 경우.

--예제
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
BEGIN TRANSACTION;
SELECT * FROM Accounts WHERE Balance > 1000;

 

반응형

격리 수준 비교

격리수준 Dirty Read Non-Repeatable Read Phantom Read 성능
Read Uncommitted 가능 가능 가능 최고
Read Committed 방지 가능 가능 높음
Repeatable Read 방지 방지 가능 중간
Serializable 방지 방지 방지 낮음

 

결론

트랜잭션 격리 수준은 데이터의 정확성과 성능 사이에서 균형을 맞추는 중요한 개념입니다.
각 애플리케이션의 요구사항에 따라 적절한 격리 수준을 선택하는 게 중요하겠죠

  • Read Uncommitted : 성능 우선 작업.
  • Read Committed : 일반적인 사용 사례에 적합.
  • Repeatable Read : 데이터 일관성이 중요할 때 사용
  • Serializable : 최고 수준의 데이터 무결성이 필요할 때 선택

오늘도 긴 글 읽어주셔서 감사합니다.

  1. 트랜잭션 격리 수준이란?
  2. 트랜잭션 충돌로 발생할 수 있는 문제
  3. Dirty Read(더티 읽기)
  4. Non-Repeatable Read(반복 불가능 읽기) 
  5. Phantom Read(팬텀 읽기) 
  6. 트랜잭션 격리 수준의 종류
  7. Read Uncommitted(읽기 미완료 허용)
  8. Read Committed(읽기 커밋 허용)
  9. Repeatable Read(반복 가능 읽기)
  10. Serializable(직렬화)
  11. 격리 수준 비교
  12. 결론
'CS지식/백엔드' 카테고리의 다른 글
  • TDD란 무엇인가?
  • 웹서버(Web Server)와 WAS(Web Application Server)의 차이점
  • 단위테스트와 통합테스트의 차이점 정리
Interrrupt
Interrrupt
프로그래밍, 개발, IT, 일상
Interrrupt
일상의 인터럽트
Interrrupt
전체
오늘
어제
반응형
  • 분류 전체보기 (78)
    • Programing (26)
      • C# (12)
      • WPF-FrameWork (5)
      • JavaScript (7)
      • React-FrameWork (2)
    • DB (14)
      • 오라클 (14)
    • ETC (5)
      • 기타 (4)
      • 자료구조 (1)
      • 마크업 (1)
    • Tools (4)
    • 토이프로젝트 (4)
      • C# WPF로 자동매매프로그램 만들기 (4)
    • OS (2)
      • 리눅스 (1)
      • Window11 (1)
    • CS지식 (8)
      • 프론트엔드 (4)
      • 백엔드 (4)
    • 일상 (12)
      • 취미 (3)
      • 맛집 (9)
hELLO · Designed By 정상우.
Interrrupt
DB 트랜잭션 격리수준 정리하기
상단으로

티스토리툴바

개인정보

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

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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