본문 바로가기
CS/DB

[DB] 트랜잭션(Transaction)이란?

by 원만사 2022. 1. 18.
반응형

목차

     

    트랜잭션의 정의

    데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산들

     

    • 데이터베이스 시스템에서 병행 제어 및 회복 작업 시 처리되는 작업의 논리적 단위를 의미한다. 
    • 사용자가 시스템에 대한 서비스 요구 시 시스템이 응답하기 위한 상태 변환 과정의 작업단위이다. 
    • 데이터베이스 연산은 SQL문으로 표현되므로 트랜잭션을 작업 수행에 필요한 SQL문들의 모임으로 이해해도 된다. 
    • 트랜잭션의 모든 명령문이 완벽하게 처리되거나 하나도 처리되지 않아야 데이터베이스는 모순이 없는 일관된 상태를 유지할 수 있다.
    • 데이터베이스에 장애가 발생했을 때 복구작업을 수행하거나, 다수의 사용자가 동시에 사용할 수 있도록 작업을 하는 데 중요한 단위로 사용된다. 

     

    트랜잭션의 성질 (ACID)

    트랜잭션이 성공적으로 처리되어 데이터베이스의 무결성과 일관성을 보장하려면 ACID를 만족해야 한다. 
    ACID는 데이터베이스 내에서 일어나는 하나의 트랜잭션의 안전성을 보장하기 위해 필요한 성질이다.

     

    1. Atomicity (원자성)

    • 시스템에서 한 트랜잭션의 연산들이 모두 성공하거나, 반대로 전부 실패되는 성질을 말한다.
    • 작업이 모두 반영되거나 모두 반영되지 않음으로써 결과를 예측할 수 있어야 한다. 
    • 트랜잭션을 수행하다가 장애가 발생하여 작업을 완료하지 못했다면, 지금까지 실행한 연산들을 모두 취소하고 데이터베이스를 트랜잭션 작업 전의 상태로 되돌려 트랜잭션의 원자성을 보장한다. 
    • 원자성 보장을 위해서는 장애가 발생했을 때 데이터베이스를 원래 상태로 복구하는 회복 기능이 필요하다.

     

    2. Consistency (일관성)

    • 트랜잭션이 성공적으로 수행된 후에도 데이터베이스가 일관성 있는 상태를 유지해야 함을 의미한다. 
    • 트랜잭션이 일어난 이후의 데이터베이스는 데이터베이스 제약이나 규칙을 만족해야 한다는 뜻이다. 

     

    3. Isolation (격리성)

    • 현재 수행 중인 트랜잭션이 완료될 때까지 트랜잭션이 생성한 중간 연산 결과에 다른 트랜잭션들이 접근할 수 없음을 의미한다. 
    • 시스템에서 여러 트랜잭션이 동시에 수행되지만 각 트랜잭션이 독립적으로 수행될 수 있도록 다른 트랜잭션의 중간 연산 결과에 서로 접근하지 못하게 한다.
    • 이를 통해 사용자들은 트랜잭션들이 동시에 수행되는 것처럼 느끼면서도 순서대로 하나씩 수행되는 것처럼 정확하고 일관된 결과를 얻을 수 있게 된다.

     

    4. Durability (지속성)

    • 하나의 트랜잭션이 성공적으로 수행되었다면, 데이터베이스에 반영된 수행 결과는 어떠한 경우에도 손실되지 않고 영구적이어야 함을 의미한다. 
    • 시스템 장애가 발생하더라도 트랜잭션 작업 결과는 없어지지 않고 데이터베이스에 그대로 남아있어야 한다. 
    • 트랜잭션의 지속성을 보장하기 위해서는 시스템에 장애가 발생했을 때 데이터베이스를 원래 상태로 복구하는 회복 기능이 필요하다.

     

    트랜잭션의 연산

    쿼리를 날렸을 때 데이터베이스에 반영되는 시점은 트랜잭션 연산이 성공적으로 완료되는 시점이다. 트랜잭션 연산에는 commit과 rollback이 있다.

     

    Commit 연산

    • 트랜잭션이 성공적으로 완료되었음을 알리는 연산이다.
    • commit 연산이 실행된 후에야 트랜잭션의 수행 결과가 데이터베이스에 반영되어 데이터베이스가 일관된 상태를 지속적으로 유지한다.

     

    Rollback 연산

    • 트랜잭션이 실패했음을 알리는 연산이다.
    • rollback 연산이 실행되면 트랜잭션이 지금까지 실행한 연산의 결과가 취소되고 트랜잭션이 수행되기 이전의 상태로 다시 돌아간다. 
    • 트랜잭션이 수행되는 도중 일부 연산이 처리되지 못한 상황에서는 rollback 연산을 실행하여 트랜잭션의 수행이 실패했음을 선언하고, 데이터베이스가 모순되지 않도록 데이터베이스를 트랜잭션 수행 전의 일관된 상태로 되돌려야 한다. 

     

    트랜잭션의 상태

    트랜잭션에는 크게 5가지 상태가 존재하고 상태 처리 과정은 다음과 같다.

     

    트랜잭션의 상태

    활동 (Active)

    • 트랜잭션이 수행을 시작하여 현재 수행 중인 상태를 의미한다.

     

    부분 완료 상태 (Partially Committed)

    • 연산을 모두 처리한 상태이지만 수행한 최종 결과를 아직 반영하지 않은 상태 
    • 즉, 아직 commit 연산을 하지 않은 상태를 의미한다.

     

    완료 상태 (Committed)

    • 트랜잭션이 성공적으로 완료되어 commit 연산을 수행한 후의 상태를 의미한다. 

     

    실패 상태 (Failed) 

    • 장애가 발생하여 트랜잭션의 수행이 중단된 상태를 의미한다.

     

    철회 상태 (Aborted)

    • 트랜잭션이 비정상적으로 종료되어 rollback 연산을 수행한 상태를 의미한다. 

     

     

     

    References

    - https://hanamon.kr/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98%EC%9D%98-acid-%EC%84%B1%EC%A7%88/

    - https://coding-factory.tistory.com/226

    - https://brunch.co.kr/@skeks463/27

     

    반응형

    댓글