앞으로 여러 글을 통해 트랜잭션에 대해 정리하고자합니다. 본격적으로 알아보기 전에 트랜잭션이 무엇인지, 트랜잭션은 어떤 상태를 갖는지에 대해 알아봅시다.

트랜잭션이란?

Untitled.png

트랜잭션을 정의하는 방법은 트랜잭션을 바라보는 관점에 따라 다릅니다. 주로 사용자 측면과 시스템 측면으로 구분할 수 있는데요. 각 관점에 따른 정의는 다음과 같습니다.

  • 사용자 관점: 논리적인 작업의 단위
  • 시스템 관점: 동시성 제어와 회복의 단위

그러나 일반적으로 트랜잭션은 사용자 관점에서 의미로 사용됩니다.

트랜잭션 ACID 속성

트랜잭션은 4가지 속성을 가지고 있습니다. 각 속성의 앞글자를 따 ACID라고 부르는데요. 요약하면 다음과 같습니다.

  • 원자성(Atomicity): 트랜잭션은 원자적으로 수행되어야한다.
  • 일관성(Consistency): 트랜잭션 전후로 데이터베이스 일관성이 유지되어야한다.
  • 고립성(Isolation): 트랜잭션은 다른 트랜잭션에 영향을 주지 않고 독립적으로 실행되어야한다.
  • 영구성(Durability): 트랜잭션의 결과는 영구적으로 저장되어야한다.

각 속성에 대해 자세히 알아보고 이를 지원하기 위한 데이터베이스의 기술에 대해 간단히 알아보겠습니다.

원자성(Atomicity)

원자성은 트랜잭션의 작업들이 모두 성공하거나 실패해야한다는 것을 말합니다. 예를 들어, 다음과 같은 트랜잭션 작업들이 있다고 가정해보겠습니다.

  1. A의 잔고에서 1,000원을 출금한다.
  2. B의 잔고에 1,000원을 입금한다.

이때 두 작업 중 하나만 성공하는 경우는 없습니다. 송금 중 오류가 발생하여 실패했다면 트랜잭션 시작 이전 상태로 되돌아가야합니다. 또, 트랜잭션이 성공했다면 두 작업 모두 실행되어야합니다.

데이터베이스 시스템에서는 원자성을 만족하기 위하여 트랜잭션의 모든 데이터 변경 작업을 하나의 논리적인 단위로 묶습니다. 이를 위해 트랜잭션 상태와 커밋, 롤백을 지원합니다.

일관성(Consistentcy)

일관성은 트랜잭션이 전후로 일관된 상태를 유지해야함을 말합니다. 예를 들어, 데이터베이스에 다음과 같은 조건이 있다고 가정해보겠습니다.

  • 계좌 테이블의 잔액은 항상 0보다 커야한다.

이때 송금 트랜잭션이 실행된다면 트랜잭션 전후로 계좌 테이블의 잔액은 0보다 커야합니다.

데이터베이스 시스템에서는 일관성을 만족하기 위해 트랜잭션 실행 전후로 규칙을 지킬 수 있도록 보장합니다. 이를 위해 데이터베이스 무결성 제약 조건을 지원합니다.

고립성(Isolation)

고립성은 여러 트랜잭션이 함께 수행되더라도 서로 영향을 주지 않고 실행되어야함을 말합니다. 예를 들어, 다음과 같은 두 트랜잭션이 있다고 가정해보겠습니다.

  • Transaction A: 계좌에 1,000원 입금
  • Transaction B: 계좌에서 1,000원 출금

이때 각 트랜잭션은 서로에게 영향을 주어선 안됩니다. A가 완료되기 전에 B가 영향을 받아선 안되고 B가 완료되기 전에는 A가 영향을 받아선 안됩니다.

데이터베이스 시스템에서는 고립성을 만족하기 위해 트랜잭션을 독립적으로 실행하고 실행중인 다른 트랜잭션의 결과를 볼 수 없도록 합니다. 이를 위해 트랜잭션 격리 수준(transaction isolation level)과 락(lock)을 지원합니다.

영구성(Durability)

트랜잭션에서 발생한 변경 사항은 전원 공급 문제 등의 예상치 못한 문제가 발생하더라도 영구적으로 저장되어야합니다.

데이터베이스 시스템에서는 영구성을 만족하기 위해 트랜잭션이 커밋되면 변경 사항을 영구적으로 디스크에 저장해야합니다. 이를 위해 트랜잭션 로그와 회복 시스템을 지원합니다.

트랜잭션의 상태

이번에는 트랜잭션의 상태에 대해 알아보도록 하겠습니다. 트랜잭션이 실행될 때부터 종료될 때까지 상태와 상태 전이 그래프는 아래와 같습니다.

Untitled.png

  • Active: 트랜잭션이 실행됨
  • Partially commited: 트랜잭션이 성공적으로 완료되었지만 데이터베이스에 변경 사항이 반영되지 않음
  • Commited: 모든 변경 사항이 데이터베이스에 영구적으로 저장되어 다른 트랜잭션에서 접근 가능함
  • Failed: 트랜잭션 실행 중 하드웨어 오류, 무결성 제약 위반 등으로 오류가 발생하여 완료되지 못함
  • Aborted: 트랜잭션이 실패한 후 롤백되어 이전 상태로 되돌아감

마무리하며

이번 글에서는 관점에 따른 트랜잭션의 정의와 트랜잭션의 ACID 속성에 대해 알아보았습니다. 또한, ACID 속성을 만족하기 위하여 데이터베이스 차원에서 지원하는 기술에 대해 간단히 알아보았습니다. 마지막으로 트랜잭션 상태에 알아보고 상태 전이 그래프를 통해 상황마다 상태가 변하는 과정에 대해 알아보았습니다.

이번 글이 앞으로의 트랜잭션을 이해하는데 도움이 되길 바랍니다. 🤗

댓글남기기