Spring

[Spring] 스프링 데이터베이스(4) - 트랜잭션

재담 2022. 4. 25. 23:44

트랜잭션이란

인터넷 서점 사이트에서 도서를 구매할 경우 다음과 같은 순서로 작업이 진행될 것이다.

  1. 결제를 수행한다.
  2. 결재 내역을 저장한다.
  3. 구매 내역을 저장한다.

 

위의 과정은 도서 구매 시 반드시 모두 성공적으로 이루어져야 한다. 하나라도 실패할 경우 반드시 모든 과정이 취소되어야 한다. 예를 들어, 결제 내역 저장까지는 성공했는데, 구매 내역을 저장하는 과정이 실패했다고 하자. 이때, 전 과정이 취소되지 않는다면 구매자는 결제만 하고 구매는 하지 않는 것처럼 될 것이다.

 

트랜잭션은 여러 과정을 하나의 행위로 묶을 때 사용된다. 트랜잭션은 트랜잭션 범위 내에 있는 처리 과정 중 한 가지라도 실패할 경우 전체 과정을 취소시킴으로써 데이터의 무결성을 보장한다. 즉 트랜잭션은 모두 반영하거나 모두 반영하지 않는 (All or Nothing) 방식을 취한다.

 

ACID

트랜잭션을 설명할 때 보통 4가지 특징인 ACID를 이용한다. ACID는 다음과 같다.

 

원자성(Atomicity)

트랜잭션은 1개 이상의 동작을 논리적으로 1개의 작업 단위로 묶는다. 원자성은 트랜잭션 범위에 있는 모든 동작이 모두 실행되거나 또는 모두 실행이 취소됨을 보장한다. 모든 동작이 성공적으로 실행되면 트랜잭션은 성공한다. 만약 하나라도 실패하면 트랜잭션은 실패하고 모든 과정을 롤백한다.

 

일관성(Consistency)

트랜잭션이 종료되면, 시스템은 비즈니스에서 기대하는 상태가 된다. 예를 들어, 서적 구매 트랜잭션이 성공적으로 실행되면 결제 내역, 구매 내역, 잔고 정보가 비즈니스에 맞게 저장되고 변경된다.

 

고립성(Isolation)

트랜잭션은 다른 트랜잭션과 독립적으로 실행되어야 하며, 서로 다른 트랜잭션이 동일한 데이터에 동시에 접근할 경우 알맞게 동시 접근을 제어해야 한다. (동시 접근 제어는 설정한 격리 레벨에 따라 달라진다.)

 

지속성(Durability)

트랜잭션이 완료되면, 그 결과는 지속적으로 유지되어야 한다. 현재의 어플리케이션이 변경되거나 없어지더라도 데이터는 유지된다. 일반적으로 물리적인 저장소를 통해서 트랜잭션 결과가 저장된다.


Reference

  • 웹 개발자를 위한 Spring 4.0 프로그래밍 (최범균 저)