본문 바로가기
CS/Database

[Database] 트랜잭션

by 0xe82de 2022. 5. 10.
반응형

트랜잭션

트랜잭션은 데이터베이스에서 처리되는 작업의 논리적 단위입니다. 삽입, 수정, 삭제 등 데이터 갱신을 위해 복수의 연산를 수행할 때 이러한 연산들을 한 단위로 묶은 것이라고 할 수 있습니다. 트랜잭션은 작업을 마치고 Commit 되거나 Rollback 되어야 합니다.

ACID 특성

트랜잭션은 네 가지 특성으로 정의되며 이를 ACID 특성이라고 합니다.

원자성(Atomicity)

  • 데이터를 갱신하는 복수의 연산이 모두 반영되거나 반영되지 않아야 합니다.
  • 모든 연산은 완벽히 수행되어야 하고 하나라도 오류가 발생하면 모든 연산이 취소되어야 합니다.

eg. 기차표 예매를 예시로 들어보겠습니다. 기차 좌석을 예약하고 결제를 시도합니다. 이 때 결제 승인에 실패하게 되면 결제가 취소되고 기차 좌석 예약도 취소되어야 합니다.

일관성(Consistency)

  • 트랜잭션의 작업 처리 결과는 항상 일관성이 있어야 합니다.
  • 트랜잭션이 진행되는 동안 데이터베이스의 데이터가 변경되더라도 처음 가져온 데이터를 사용하여 트랜잭션이 진행됩니다.

eg. A와 B가 각각 계좌에 1,000원씩 가지고 있을 때 A가 B에게 500원을 송금한다고 상황을 가정해봅니다. 이 때 송금 전 두 계좌의 합이 2,000원이라면 송금 후에도 두 계좌의 합은 2,000원이어야 합니다.

격리성(Isolation)

  • 서로 다른 트랜잭션이 동시에 병렬적으로 수행되는 경우 어느 하나의 트랜잭션 실행 중에 다른 트랜잭션의 연산이 끼어들 수 없습니다.
  • 수행 중인 트랜잭션이 완료될 때까지 다른 트랜잭션에서 수행 결과를 참조할 수 없습니다.

eg. C의 계좌 잔액이 0원인 상태에서 A와 B가 동시에 C에게 500원씩 송금한다고 가정해봅니다. 이 때 A의 트랜잭션이 조금 더 빠르게 시작되었다면 A의 송금 트랜잭션이 완료될 때 까지 B의 트랜잭션은 연산을 마칠 수 없습니다. A의 트랜잭션이 완료되면 C의 계좌 잔액은 500원이 되고 B는 이 데이터를 참조하여 송금 트랜잭션을 완료하게 됩니다. 결과적으로 C의 계좌 잔액은 1,000원이 됩니다.

자속성(Durability)

  • 정상적으로 처리된 트랜잭션의 결과는 시스템이 고장나더라도 영구적으로 반영되어야 합니다.

eg. 트랜잭션이 완료된 후에 데이터베이스에 전원 공급이 끊겨서 시스템이 꺼지더라도 데이터는 보존되어야 합니다.

 

반응형

 

트랜잭션 연산

Commit

image
  • 트랜잭선이 정상적으로 수행되었을 때 수행되는 연산입니다.
  • Commit 연산이 수행되면 데이터베이스에 연산 결과가 반영되고 데이터베이스는 일관성을 유지합니다.

Rollback

image
  • 트랜잭션 연산이 비정상적으로 종료되어 데이터베이스의 일관성이 깨질 수 있습니다. 이 때 트랜잭션의 일부가 정상적으로 처리되었어도 트랜잭션의 원자성을 보장하기 위해 모든 연산을 취소합니다.
  • Rollback 연산을 수행할 때는 트랜잭션을 재시작하거나 폐기할 수 있습니다.
반응형

'CS > Database' 카테고리의 다른 글

[Database] NoSQL  (0) 2022.06.22
[Database] 트랜잭션 격리 수준  (0) 2022.06.07

댓글