[Database] 트랜잭션 격리 수준에 대해 간단하게 설명하기

2024. 12. 31. 02:56·[ Computer Science ]/CS study

트랜잭션의 격리 수준이란 동시에 여러 트랜잭션이 실행될 때 한 트랜잭션이 다른 트랜잭션의 연산 영향을 받지 않도록 하는 정도를 의미한다. 격리 수준이 낮을 수록 동시 처리 능력을 높이지만 격리시켜 독립적인 작업을 보장하는 정도가 낮기 때문에 데이터 일관성 문제를 일으킬 수 있다. 반대로 격리 수준이 높다면 데이터 일관성을 보장할 수 있지만 동시에 작업을 처리하는 능력은 낮을 수 있다. 

 

데이터의 정합성과 작업 처리 성능은 함께 보장되기 어려운 반비례 관계이다. 트랜잭션 격리 수준은 개발자가 트랜잭션 격리 수준을 설정할 수 있는 기능을 제공하는 것으로 READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ가 있다.

 

READ UNCOMMITTED는 커밋 되지 않은 트랜잭션의 수정 사항을 다른 트랜잭션이 읽을 수 있게 허용하는 수준이다. 

 

a에서 수정한 내용을 커밋하지 않은 상태에서 b가 수정한 데이터를 읽도록 허용하면 b가 읽은 이후에 a가 롤백했을 때 b가 읽은 데이터는 실제로 존재하지 않는 잘못된 값이 되기 때문에 dirty read 문제가 발생한다. 

 

이 수준에서는 인덱스나 테이블에 대한 락이 적용되지 않는 상황이라 a에서 읽고 있을 때 b에서 쓰거나 지울 수 있다. 그러면 a에서 같은 쿼리문을 첫 번째 실행했을 때와 두 번째 실행했을 때 출력되는 결과가 다른 phantom read가 발생한다. 

 

a가 읽는 동안 b가 수행하면 같은 데이터를 조회하는 시점에 따라 출력 결과가 달라지는 non repeatable read가 발생한다. 

 

 

READ COMMITTED 는 수정 사항 중 커밋된 것만 다른 트랜잭션에서 조회할 수 있도록 허용하기 때문에 특정 트랜잭션이 수행되는 동안 다른 트랜잭션은 접근할 수 없다.

 

그래서 다른 트랜잭션에서 커밋되지 않은 데이터를 읽는 dirty read 문제는 일어나지 않는다. 하지만 read comitted는 트랜잭션이 데이터를 읽을 때마다 가장 최신의 커밋 데이터를 반환하기 때문에 동일한 트랜잭션 내에서 같은 데이터를 두 번 조회할 때 중간에 수정, 커밋되면 이전과 다른 값을 읽는 non repeatable read문제가 발생할 수 있다.

 

또한 read committed는 데이터 조회할 때마다 커밋 데이터 기준으로 조회하기 때문에 트랜잭션 중간에 다른 트랜잭션이 새로운 데이터를 삽입하면 동일한 쿼리문으로 여러 번 수행했을 때 이전에 얻었던 결과 집합과는 다르게 팬텀 행이 등장하는 phantom read 문제가 발생할 수 있다. 

 

REPEATABLE READ는 한 트랜잭션에서 특정한 레코드를 조회할 때 항상 같은 데이터를 응답하도록 보장하는 것이다.

 

하지만 특정 트랜잭션이 사용 중인 테이블의 모든 행을 다른 트랜잭션이 접근할 수 없게 막는 SERIALIZABLE과 다르게 행이 추가되는 걸 막지는 않아서 다른 트랜잭션이 같은 조건을 만족하는 행을 새로 삽입하고 커밋하면 다시 같은 쿼리로 조회할 때 결과 집합에 새로운 행이 추가되기 때문에 phantom read 문제가 발생할 수 있다 

 

반면 트랜잭션이 시작할 때 읽은 행에 대해서는 읽기 잠금 shared lock을 유지하기 때문에 실행되는 동안 다른 트랜잭션이 그 데이터를 수정하거나 삭제할 수 없어서 동일한 데이터를 조회하면 항상 같은 값을 리턴할 수 있어서 non repeatable read문제가 일어나지 않는다. 

 

방금 언급된 SERIALIZABLE 에서 높은 데이터 정합성을 제공할 수 있는 이유는 테이블 전체에 대해 range lock을 적용시키기 때문에 새로운 행을 추가하거나 기존에 있던 데이터를 수정하는 모든 행위가 불가해서 phantom read 문제를 방지할 수 있는 것이다. 

 

하지만 range lock 특성상 단순한 select 쿼리더라도 전체 테이블 범위 모두 적용되는 것이라 동시성을 제한하고 다른 트랜잭션에 접근하려고 할 때 기다려야 해서 읽기나 쓰기가 많이 동시에 발생하는 환경이면 보틀넥이 발생하기 쉽다. 

 

 

728x90

'[ Computer Science ] > CS study' 카테고리의 다른 글

[CS/Linear Algebra] 딥러닝을 위한 선형대수학 개요  (0) 2025.02.18
[CS] CI/CD란 간단하게 설명하기  (1) 2025.02.14
[Server] WAS와 웹 서버의 차이점 간단하게 설명하기  (2) 2025.01.05
[JavaScript] 자바스크립트 호이스팅에 대해 간단하게 설명하기  (0) 2024.12.31
[Database] 데이터베이스 시스템에서 동시성을 제어하는 방법에 대해 간단하게 설명하기  (1) 2024.12.31
[Data Structure] 스택에 대해 간단하게 설명하기  (3) 2024.12.31
'[ Computer Science ]/CS study' 카테고리의 다른 글
  • [Server] WAS와 웹 서버의 차이점 간단하게 설명하기
  • [JavaScript] 자바스크립트 호이스팅에 대해 간단하게 설명하기
  • [Database] 데이터베이스 시스템에서 동시성을 제어하는 방법에 대해 간단하게 설명하기
  • [Data Structure] 스택에 대해 간단하게 설명하기
dev charlotte
dev charlotte
주 - 컴퓨터공학 / 복수 - 산업 보안
    250x250
  • dev charlotte
    int main() {
    dev charlotte
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • [ Laboratory ] N
        • Paper review
        • Advanced Operating System N
        • System Software & Storage
        • Lab etc
      • [ Computer Science ]
        • Algorithm_C++
        • Operating System
        • Information Retrieval
        • Database_sql
        • SW Engineering
        • Computer Network
        • JavaScript
        • Python
        • Data Structure
        • CS study
        • Distributed systems
      • [ Computer Security ]
        • Convergence Security
        • Web Security
        • PIMS
        • Network Security
        • Digital Finance
      • [ Artificial Intelligence ]
        • Trend
        • Seminar
      • [ 미래, 같이, LG ]
      • [ Development ]
        • [ Front-end ]
        • [ Back-end ] Spring 기본
        • [ Back-end ] Node.js
      • etc
        • 현대오토에버 스마트 모빌리티 공학 체험 교육
      • It's me
  • 블로그 메뉴

    • 링크

      • GitHub
    • 공지사항

    • 인기 글

    • 태그

      자바스크립트
      소프트웨어 공학
      대학생 대외활동
      hotstorage
      프로그래머스 입문
      비전공자 코딩
      티스토리챌린지
      스마트모빌리티공학체험교육
      현대오토에버 스마트모빌리티
      코드잇
      공대생 대외활동
      코딩 인강
      프로그래머스 c++
      오블완
      ACM
      데이터베이스
      현대오토에버
      SSAFY
      ssafy 13기
      프로그래머스 코테
      싸피
      프로그래밍 언어론
      싸피 13기
      코딩 교육
      MySQL
      SQL
      프로그래머스
      현대오토에버 스마트 모빌리티
      백준
      spdk
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.4
    dev charlotte
    [Database] 트랜잭션 격리 수준에 대해 간단하게 설명하기
    상단으로

    티스토리툴바