DB

트랜잭션 / ACID

국자집사 2024. 12. 26. 16:30

[ 목차 ]

     

    트랜잭션(Transaction)

    - 트랜잭션이란 데이터베이스에서 데이터를 처리하는 논리적인 작업 단위를 의미한다.

    - 하나의 작업을 위해 더이상 분할될 수 없는 명령들의 모음으로 즉, 한꺼번에 수행되어야 할 일련의 연산모음을 의미한다.

    • 주요 역할 : 
      1. 데이터베이스의 일관성(Consistency)을 유지
      2. 동시성 제어(Concurrency Control)를 통해 여러 사용자나 프로세스가 데이터에 동시에 접근할 때 발생할 수 있는 문제 방지
      3. 장애 발생 시 데이터베이스의 복구(Recovery)를 지원

     

    ACID 속성

    트랜잭션은 데이터 무결성과 안정성을 보장하기 위해 ACID라는 네 가지 핵심 속성을 따른다.

    1. 원자성(Atomicity)
      • 트랜잭션 내의 모든 작업이 완전히 실행되거나, 전혀 실행되지 않아야 함을 보장한다.
      • 중간에 오류가 발생하면 트랜잭션 실행 이전 상태로 복구(롤백).
      예시:
      • 은행 계좌 이체에서 A 계좌에서 돈을 출금한 뒤 B 계좌로 입금하는 두 작업이 하나의 트랜잭션으로 처리된다. 한 작업이라도 실패하면 전체 트랜잭션이 취소되어 데이터의 불일치가 발생하지 않는다.
    2. 일관성(Consistency)
      • 트랜잭션 실행 전후에 데이터베이스가 일관된 상태를 유지해야 한다.
      • 데이터 무결성 제약 조건(예: Primary Key, Foreign Key)이 항상 만족되어야 함.
      예시:
      • 상품의 재고는 음수가 될 수 없다. 트랜잭션이 실행되기 전과 후에도 이 조건은 항상 충족되어야 한다.
    3. 고립성(Isolation)
      • 각 트랜잭션은 다른 트랜잭션으로부터 독립적으로 실행되어야 힌다.
      • 동시 실행 중인 트랜잭션은 서로 간섭하지 않아야 하며, 그 결과는 순차적으로 실행된 것과 동일해야 한다.
      예시:
      • A 사용자가 재고를 수정하는 동안 B 사용자는 동일한 재고를 조회하거나 수정할 수 없다.
    4. 지속성(Durability)
      • 트랜잭션이 성공적으로 완료되면 그 결과는 영구적으로 저장되어야 한다.
      • 시스템 장애나 오류가 발생해도 데이터는 손실되지 않는다.
      예시:
      • 온라인 쇼핑몰에서 결제 완료 후 서버 장애가 발생해도, 주문 정보는 데이터베이스에 영구적으로 저장된다.


    트랜잭션 제어 및 문법

    트랜잭션의 작업을 제어하기 위해 데이터베이스는 다음과 같은 명령을 제공한다.

     

    1. Commit : 트랜잭션이 성공적으로 완료되었음을 데이터베이스에 알리고, 변경 내용을 영구적으로 저장.

        예시 :

     

    2. Rollback : 트랜잭션 중 문제가 발생하면 모든 변경 사항을 취소하고 이전 상태로 복구.

        예시 :

     

    3. Savepoint : 트랜잭션 내 특정 지점을 저장하여 필요 시 해당 지점으로 롤백 가능.

        예시 :

     


    ※트랜잭션 예외

    모든 명령어에 대하영 트랜잭션의 롤백 명령이 적용되는 것은 아니다.

    DDL문(CREATE, DROP,ALTER, RENAME, TRUNCATE)는 트랜잭션의 롤백 대상이 아니다.


    트랜잭션 상태

    1. 활성(Active) : 트랜잭션이 실행 중인 상태로, 작업이 진행되고 있는 단계.
      • 트랜잭션이 시작되면, 해당 트랜잭션의 상태는 활동 상태가 된다. 이는 설계자가 설계한 대로 연산들이 정상적으로 실행중인 상태를 의미한다.
    2. 부분 완료(Partially Committed) : 트랜잭션이 마지막 명령을 실행했지만, 아직 커밋되지 않은 상태.
    3. 완료(Committed) : 트랜잭션이 성공적으로 완료되고, 변경 사항이 영구적으로 저장된 상태.
      • 설계된 트랜잭션대로 명령을 성공적으로 수행하면 그 다음 상태는 부분적 완료(Partially Committed) 상태가 된다.설계된 작업대로 작업이 성공해도 무조건 반영하는 것이 아니라, 설계자의 최종 승인(Commit)이 있을 때까지 실제 대이터 베이스에 작업 내용을 반영하지 안고 기다리는 상태이다.
      • 설계자가 작업 결과에 대해 반영을 승인(Commit)한다면 트랜잭션이 성공적으로 종료되고 이를 완료(Commited) 상태라고 한다.
    4. 실패(Failed) : 트랜잭션 실행 중 오류가 발생한 상태.
    5. 철회(Aborted) : 트랜잭션이 실패하여 이전 상태로 복구된 상태.
      • 트랜잭션을 수행하는 중간에 모종의 원인으로 인해 오류가 발생하여 실행이 중단된 상태를 실패(Failed) 상태라고 한다.
      • 이때, 트랜잭션이 비정상적으로 종료되었으니, 설계되어있는 트랜잭션 내부의 작업을 다시 수행 이전의 상태로 돌리는 롤백 연산을 수행하면 그 상태를 철회(Aborted)라고 한다.

     


    트랜잭션의 중요성

    트랜잭션은 데이터베이스의 안정성과 신뢰성을 유지하는 핵심 요소로, 다음과 같은 이유로 중요하다.

    1. 데이터 무결성 보장:
      • 시스템 오류나 장애가 발생하더라도 데이터를 일관된 상태로 유지.
    2. 복구 및 재처리 용이성:
      • 실패한 작업을 롤백하거나 커밋을 통해 변경 사항을 쉽게 관리.
    3. 동시성 문제 해결:
      • 다중 사용자 환경에서 데이터 충돌을 방지.

     


    - 트랜잭션은 DB가 안정적이고 신뢰성있게 동작하도록 돕는 중요한 메커니즘이다. ACID 속성을 충족해 데이터의 일관성과 안전성을 보장할 수 있다. 트랜잭션 제어를 잘한다면 실무에서 다양한 데이터 처리 요구사항을 효과적으로 관리할 수 있을 것이다. 기본부터 튼튼하게 쌓아나가자!

     

    출처

    https://inpa.tistory.com/entry/MYSQL-%F0%9F%93%9A-%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98Transaction-%EC%9D%B4%EB%9E%80-%F0%9F%92%AF-%EC%A0%95%EB%A6%AC

     

    [MYSQL] 📚 트랜잭션(Transaction) 개념 & 사용 💯 완벽 정리

    트랜잭션(Transaction) 이란? 트랜잭션(Transaction)의 사전적 의미는 거래이고, 컴퓨터 과학 분야에서의 트랜잭션(Transaction)은 "더이상 분할이 불가능한 업무처리의 단위"를 의미한다. 이것은 하나의

    inpa.tistory.com

    https://velog.io/@ksk5401/DDL-DML-DCL-%EC%9D%B4%EB%9E%80

     

    DDL, DML, DCL 이란?

    DDL(Data Definition Language) 데이터 정의어란? 데이터베이스를 정의하는 언어이며, 데이터를 생성, 수정, 삭제하는 등의 데이터의 전체의 골격을 결정하는 역할을 하는 언어이다.ALTERDROPTRUNCATE

    velog.io

    https://velog.io/@shasha/Database-%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98-%EC%A0%95%EB%A6%AC

     

    [Database] 트랜잭션 정리

    트랜잭션 총 정리

    velog.io

     

    'DB' 카테고리의 다른 글

    MVCC  (0) 2024.12.27
    트랜잭션 격리 수준 & 동시성 제어  (0) 2024.12.26
    클러스터링 / 레플리케이션  (2) 2024.12.06
    정규화 / 반정규화  (0) 2024.11.28
    DB 인덱스  (1) 2024.11.09