[데이터베이스] 트랜잭션 - Transaction

이은재·2021년 9월 20일
0

데이터베이스

목록 보기
1/1

트랜잭션 (Transaction)

A라는 사람이 B라는 사람의 계좌에 5천원을 입금하는 기능을 구현할 때 개발자가 주의해야할 점이 있다. 입금이라는 하나의 논리적 기능은 여러 가지 작업의 단위를 포함하고 있다. 다음은 입금이라는 논리적 기능을 하기 위한 대표적인 작업 단위를 보여준다.

  1. A의 계좌가 유효하며 출금을 할 돈이 있는 지 데이터베이스에서 불러와 확인
  2. 불러온 A의 계좌의 데이터 값에서 5천원을 감소
  3. B의 계좌가 유효하며 계좌의 데이터 값을 데이터베이스에서 불러와 확인
  4. 불러온 B의 계좌의 데이터 값에서 5천원을 증가
  5. A와 B의 계좌의 데이터 값을 데이터베이스에 저장

입금이라는 기능은 위에 나온 작업들이 모두 성공적으로 완료되었을 때에만 동작해야 한다. 예를 들어,A의 계좌에서 5천원을 감소했지만 그 이후의 작업들에서 문제가 발생했을 시에는 다시 A의 계좌에서 감소시킨 5천원을 원래의 상태로 되돌려놔야 한다. 이처럼 하나의 논리적 기능을 한 꺼번에 수행해야 할 때 사용하는 것이 트랜잭션이다.

트랜잭션(Transaction)은 데이터베이스의 상태를 변환하는 하나의 논리적 기능을 하기 위한 작업의 단위, 또는 한꺼번에 모두 수행되어야 할 일련의 연산들이다.

트랜잭션의 성질 (ACID)

  • 원자성 (Atomicity)
    - 트랜잭션의 작업들은 모두 수행되거나 아예 실행되지 않아야 한다.

    • 부분적으로 실행된 트랜잭션은 데이터베이스에 반영되지 않아야 한다.
  • 일관성 (Consistency)
    - 트랜잭션의 과정에서는 데이터베이스가 일관적이지 않을 수 있지만, 트랜잭션이 성공적으로 완료되면 데이터베이스는 일관성 있는 상태로 변환한다.

    • 시스템 내의 고정 요소는 트랜잭션 실행 전과 후에 동일해야 한다.
  • 독립성 (Isolation)
    - 하나의 트랜잭션 실행도중 다른 트랜잭션이 개입할 수 없다.

    • 진행중인 트랜잭션은 완료되기 전까지는 다른 트랜잭션에서 트랜잭션 결과를 참조할 수 없다.
  • 영속성 (Durability)
    - 성공적으로 완료된 트랜잭션의 결과는 시스템이 문제가 발생하더라도 영구적으로 반영되어야 한다.

커밋 연산 (commit)

  • 커밋 연산은 하나의 논리적 단위(트랜잭션)에 대한 작업이 성공적으로 완료되어 데이터베이스가 다시 일관된 상태에 있을 때 연산이 성공적으로 완료되었다는 것을 트랜잭션 관리자에게 알려주는 연산이다.

롤백 연산 (rollback)

  • 롤백 연산은 하나의 논리적 단위(트랜잭션)에 대한 작업 중에 문제가 발생하여 비정상적으로 종료되어 데이터베이스의 일관성을 깨뜨렸을 때 발생한다. 롤백 연산을 통해 트랜잭션의 일부가 정상적으로 처리되었더라도 트랜잭션의 원자성을 구현하기 위해 이 트랜잭션이 행한 모든 연산을 원래의 상태로 되돌아간다.

  • 롤백 연산이 수행될 때 해당 트랜잭션을 재시작하거나 폐기한다.

트랜잭션의 상태

  • 활동(Active) : 트랜잭션이 실행중인 상태

  • 실패(Failed) : 트랜잭션 실행에 오류가 발생하여 중단된 상태

  • 철회(Aborted) : 트랜잭션이 비정상적으로 종료되어 롤백 연산을 수행한 상태

  • 부분 완료(Partially Committed) : 트랜잭션의 마지막 연산까지 실행했지만, Commit 연산이 실행되기 직전의 상태

  • 완료(Committed) : 트랜잭션이 성공적으로 종료되어 Commit 연산을 실행한 후의 상태

0개의 댓글