트랜잭션

정승현·2024년 10월 17일
post-thumbnail

DB의 상태를 변경시키는 작업의 단위
여러 개의 명령어를 하나의 논리적 단위로 묶어 작업의 일부만 적용되는 현상을 방지하여
작업의 완전성을 보장해줌

💡트랜잭션의 특징 (ACID)

트랜잭션의 ACID 는 4가지 주요 특징의 첫글자를 따서 만들어졌다.

특성의미예시
Atomicity
(원자성)
트랜잭션의 모든 연산이 완전히 수행되거나 전혀 수행되지 않아야 함계좌 이체 시 출금과 입금이 모두 성공하거나 둘 다 실패해야 함
Consistency
(일관성)
트랜잭션 실행 전후의 데이터베이스 상태가 일관되어야 함계좌 간 이체 후 총 잔액의 합은 이체 전과 동일해야 함
Isolation
(격리성)
동시에 실행되는 트랜잭션들이 서로 영향을 미치지 않아야 함동시에 여러 계좌 이체가 일어나도 각 거래는 독립적으로 처리됨
Durability
(지속성)
성공적으로 완료된 트랜잭션의 결과는 영구적으로 반영되어야 함이체 완료 후 시스템 장애가 발생해도 거래 내역은 보존됨

✍️트랜잭션 격리수준(Transaction Isolation Level)
동시에 여러 트랜잭션이 처리될 때, 트랜잭션끼리 얼마나 서로 고립되어 있는지를 나타냄

  • Read Uncommitted (가장 낮은 격리수준)
    • 다른 트랜잭션에 의해 커밋되지 않은 데이터를 읽을 수 있음
    • Dirty Read, Non-Repeatable Read, Phantom Read 모두 발생 가능
    • 성능은 가장 좋지만, 데이터 일관성이 가장 낮음
  • Read Committed
    • 커밋된 데이터만 읽을 수 있음
    • Dirty Read 방지, 하지만 Non-Repeatable Read와 Phantom Read는 여전히 발생 가능
    • 대부분의 데이터베이스 시스템의 기본 격리수준
  • Repeatable Read
    • 트랜잭션이 시작되기 전에 커밋된 내용에 대해서만 조회 가능
    • Dirty Read, Non-Repeatable Read 방지, 하지만 Phantom Read는 여전히 발생 가능
    • 동일한 쿼리를 실행했을 때 항상 같은 결과를 보장
  • Serializable (가장 높은 격리수준)
    • 가장 엄격한 격리수준으로, 완벽한 읽기 일관성 제공
    • Dirty Read, Non-Repeatable Read, Phantom Read 모두 방지
    • 성능은 가장 낮지만, 데이터 일관성이 가장 높음

  • Dirty Read: 커밋되지 않은 데이터를 읽는 현상
  • Non-Repeatable Read: 같은 쿼리를 여러 번 실행했을 때 결과가 다른 현상
  • Phantom Read: 같은 쿼리를 여러 번 실행했을 때 이전에 없던 레코드가 나타나는 현상
Isolation LevelDirty ReadNon-Repeatable ReadPhantom Read
Read Uncommitted
Consistency-
Isolation--
Durability---

💡트랜잭션의 상태

트랜잭션 상태

  1. 활동 상태 : 트랜잭션이 수행되기 시작하여 현재 수행 중인 상태
  2. 부분 완료 상태 : 트랜잭션의 마지막 연산이 실행된 직후 상태
    • 아직 commit 연산 실행 전 상태
    • 다른 트랜잭션에서는 이 변경사항을 볼 수 없음
  3. 완료 상태 : 트랜잭션이 성공적으로 완료된 상태
    • 트랜잭션이 성공적으로 완료, commit 연산이 성공적으로 수행된 상태
  4. 실패 상태 : 하드웨어나 솦트웨어의 문제, 트랜잭션 내부의 오류 등 여러 이유로 인해 장애가 발생하여 트랜잭션의 수행이 중단된 상태
  5. 철회 상태 : 트랜잭션이 실패하여 rollback 연산을 실행한 상태

✍️ 트랜잭션의 연산

  • commit 연산 : 트랜잭션의 모든 변경사항을 영구적으로 데이터베이스에 반영하는 연산
  • rollback 연산 : 트랜잭션의 모든 변경사항을 취소하고 트랜잭션 시작 전 상태로 되돌리는 연산

🫶 회복을 위한 연산

연산설명
redo
(재실행)
가장 최근에 저장한 데이터베이스 복사본을 가져온 후 로그를 이용해 복사본이 만들어진 이후에 실행된 모든 변경 연산을 재실행하여 장애가 발생하기 직전의 데이터베이스 상태로 복구
(전반적으로 손상된 경우에 주로 사용)
undo
(취소)
로그를 이용해 지금까지 실행된 모든 변경 연산을 취소하여 데이터베이스를 원래의 상태로 복구
(변경 중이었거나 이미 변경된 내용만 신뢰성을 잃은 경우에 주로 사용)

Reference

  • [한빛미디어] 데이터베이스 개론
profile
게시글 업로드중..⌛

0개의 댓글