트랜잭션(Transaction) & 트랜잭션 격리성

2024. 11. 18. 09:12·Computer Science/Database
반응형

트랜잭션(Transaction)이란?

DBMS에서 일련의 연산을 논리적인 작업 단위로 묶어 처리하는 개념. 여러 작업을 하나의 단위로 처리.

데이터베이스의 무결성 유지를 위함.

무결성 : 데이터의 정확성, 일관성, 유효성을 유지하는 것
예시) 은행 시스템
계좌 A에서 계좌 B로 돈을 이체할 때, A의 잔고 감소와 B의 잔고 증가가 하나의 트랜잭션으로 처리되어야 한다.
만약 하나라도 실패하면 전체 트랜잭션이 롤백되어야 한다.

 

 

 

 

트랜잭션의 특성 (ACID)

Atomicty / All or nothing (원자성)

  • 트랜잭션의 연산은 모두 성공하거나 모두 실패해야한다.

Consistency (일관성)

  • 트랜잭션이 수행 결과는 항상 일관되어야 한다.

Isolation (고립성/독립성)

  • 트랜잭션이 수행되는 동안 다른 트랜잭션의 작업이 간섭받지 않아야 한다.

Durability (지속성)

  • 트랜잭션이 성공적으로 완료된 경우, 그 결과는 영구적으로 반영되어야 한다.

 

 

 

트랜잭션 연산

BEGIN TRANSACTION

  • 트랜잭션의 시작 선언.
  • 이 시점부터 트랜잭션 연산 추적.

READ/WRITE

  • 데이터베이스를 읽거나 쓰는 연산.

COMMIT

  • 트랜잭션이 성공적으로 완료되었음을 선언.
  • 모든 변경 사항을 데이터베이스에 영구적으로 반영.

ROLLBACK

  • 트랜잭션 실패나 오류 발생을 선언.
  • 모든 변경 사항을 취소하여 데이터베이스를 트랜잭션 시작 전 상태로 복구.
 

 

 

 

트랜잭션의 상태

 

Active (활성 상태)

  • 트랜잭션이 시작되고 연산이 수행되고 있는 상태
  • 아직 완료되지 않은 상태로, 중간 연산이 진행 중이다.

Partially Committed (부분 완료 상태)

  • 트랜잭션의 마지막 연산이 실행된 상태
  • 최종적으로 완료되기 직전의 상태로, 커밋(commit)이 이루어지기 전이다.

Committed (완료 상태)

  • 트랜잭션이 성공적으로 완료되고, 데이터베이스에 변경 사항이 영구적으로 반영된 상태
  • 트랜잭션의 모든 연산이 성공적으로 수행되어 데이터베이스의 일관성이 유지된 상태이다.

Failed (실패 상태)

  • 트랜잭션 실행 중 오류가 발생하여 더 이상 수행할 수 없는 상태
  • 트랜잭션이 실패하면 롤백(rollback)이 수행되어야 한다.

Aborted (철회 상태)

  • 트랜잭션이 실패하여 롤백이 수행된 상태
  • 트랜잭션의 모든 변경 사항이 취소되고 데이터베이스가 트랜잭션 시작 전 상태로 복구된다.

 

 

 

회복 기법

트랜잭션 실패나 시스템 장애가 발생했을 때 데이터베이스를 일관된 상태로 복구하는 기법.

로그 기반 회복 : 트랜잭션의 모든 변경사항을 순차적으로 로그

- BEGIN: 트랜잭션이 시작됨을 기록.
- UPDATE: 트랜잭션이 수행한 데이터의 변경 사항을 기록.
- COMMIT: 트랜잭션이 성공적으로 완료됨을 기록.
- ROLLBACK: 트랜잭션이 실패하여 롤백됨을 기록.

 

 

 

Undo Logging:

  • 트랜잭션이 실패했을 때 이전 상태로 복구
  • 트랜잭션이 변경한 내용을 로그에 기록하고, 실패 시 로그를 역순으로 읽어 복구한다.

Redo Logging:

  • 트랜잭션이 성공적으로 완료된 경우 변경 내용을 재적용하여 복구
  • 커밋된 트랜잭션의 변경 내용을 로그에 기록하고, 시스템 장애 후 로그를 읽어 복구한다.

Undo/Redo Logging:

  • 위의 두 가지 방법을 결합하여 트랜잭션의 상태에 따라 적절히 복구
  • 트랜잭션이 커밋되지 않은 경우 Undo Logging을 사용하고, 커밋된 경우 Redo Logging을 사용한다.

 

 

 

트랜잭션 격리성(Transaction Isolation)이란?

각 트랜잭션이 다른 트랜잭션의 중간 상태를 볼 수 없도록 보장하는 성질을 의미. 

다양한 수준의 격리성이 제공되며, 트랜잭션 간 간섭을 얼마나 엄격하게 제어할지를 정의.

 

격리성이 높으면 데이터의 일관성을 더 잘 유지할 수 있음.

하지만, 성능 저하나 병행 실행에 제한이 있을 수 있음.

격리성 ⬆️ 일관성 ⬆️ 동시성 ⬇️

 

 

 

트랜잭션 격리 수준

 

READ UNCOMMITTED (미완료 읽기 허용)

  • 가장 낮은 격리 수준. 트랜잭션이 커밋되지 않은 데이터를 읽을 수 있다.

READ COMMITTED (커밋 읽기 허용)

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

REPEATABLE READ (반복 가능 읽기)

  • 트랜잭션이 시작된 후에 읽은 데이터는 다른 트랜잭션에 의해 변경될 수 없다.

SERIALIZABLE (직렬화 가능)

  • 가장 높은 격리 수준으로, 트랜잭션이 직렬적으로 실행되는 것처럼 보이도록 보장한다.
  • 성능 저하가 있을 수 있지만, 데이터의 일관성을 가장 잘 유지한다.

 

 

 

트랜잭션 이상 현상

동시에 여러 트랜잭션이 실행될 때 발생할 수 있는 문제들

 

 

Dirty Read (더티 리드)

  • 커밋되지 않은 변경사항 읽어버리는 현상

트랜잭션1이 업데이트 이후 롤백을 할 수 있음에도 트랜잭션2는 업데이트 된 데이터를 읽음. 이후 롤백되어 데이터가 변경되면 데이터의 무결성을 해치게 됨.

 

 

Non-Repeatable Read (반복되지 않는 읽기)

  • 같은 데이터에 두번 이상 접근하는데 그 값이 다른 현상.

트랜잭션 2가 같은 데이터를 두 번 읽을 때, 두 읽기 사이에 다른 트랜잭션 1이 데이터를 변경함.

 

 

Phantom Read (팬텀 리드)

  • 같은 쿼리를 두 번 실행하는데 결과가 다른 현상.

트랜잭션1이 같은 쿼리를 두 번 실행할 때,두 쿼리 사이에 다른 트랜잭션2가 데이터를 추가하여 쿼리 결과가 달라짐

 

 

 

 

 

 

격리 수준 별 발생할 수 있는 이상현상

격리수준 \ 이상현상 Dirty Read Non-Repeatable Read Phantom Read
READ UNCOMMITTED O O O
READ COMMITTED X O O
REPEATABLE READ X X O
SERIALIZABLE X X X
728x90
반응형

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

SQL과 NoSQL  (3) 2024.11.24
SQL injection 종류와 방지  (0) 2024.11.23
조인(JOIN) - ANSI SQL, MySQL, Oracle 예  (0) 2024.11.22
키(Key)  (0) 2024.11.11
Database와 DBMS  (0) 2024.11.11
'Computer Science/Database' 카테고리의 다른 글
  • SQL injection 종류와 방지
  • 조인(JOIN) - ANSI SQL, MySQL, Oracle 예
  • 키(Key)
  • Database와 DBMS
settong
settong
    250x250
  • settong
    개 발 자 국
    settong
  • 전체
    오늘
    어제
    • 전체보기 (202)
      • Computer Science (50)
        • Network (7)
        • Operating System (18)
        • Data Structure (9)
        • Database (11)
        • Algorithm (5)
      • Language (17)
        • Java (17)
        • Javascript (0)
        • Python (0)
      • Devops (20)
        • AWS (0)
        • Naver Cloud (16)
        • CICD (3)
        • 웹 서버 관리 (1)
      • Front (0)
        • React (0)
      • Backend (5)
        • Spring (5)
      • 코딩 테스트 정복기 (110)
        • 백준 (51)
        • 프로그래머스 (53)
        • 기타 (6)
      • etc (0)
      • 경제 상식 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    프로그래머스
    백준
    ncp
    다이나믹프로그래밍
    백트래킹
    ncp202
    완전탐색
    다익스트라
    Spring Boot
    Network
    lcs
    벨만포드
    집합
    ncp200
    BFS
    CI/CD
    해시
    github actions
    DFS
    분할정복
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
settong
트랜잭션(Transaction) & 트랜잭션 격리성
상단으로

티스토리툴바