Transaction

Transaction

  • 트랜잭션은 DB와 Java 언어 데이터를 주고받는 과정에 원자성을 부여하는 수단
  • 어떤 작업 프로세스를 하나로 묶어 실행 중인 하나의 작업이라도 실패하면 모두 실패처리하고, 전체 작업이 성공하면 성공처리
    • ex. 결제와 동시에 좌석 할당
    • 결제 수행 + 결제내역 저장 + 구매내역 저장

 

Transaction ACID

  • 원자성 Atomicity
    • 트랜잭션은 하나 이상의 동작을 논리적으로 한 개의 작업단위로 묶는다. 원자성은 트랜잭션 범위에 있는 모든 동작이 모두 실행되거나 모두 실행 취소됨을 보장하는 것
  • 일관성 Consistency
    • 트랜잭션이 종료되면 시스템은 비즈니스에서 기대하는 상태가 된다.
    • 예를 들어, 서적 구매 트랜잭션이 성공적으로 실행되면 결제 내역, 구매 내역, 잔고 정보가 비즈니스에 맞게 저장되고 변경된다.
  • 고립성 Isolation
    • 트랜잭션은 다른 트랜잭션과 독립적으로 실행되어야 하며 서로 다른 트랜잭션이 동일한 데이터에 동시에 접근할 경우 알맞게 동시 접근을 제어해야 한다.
    • 동시접근 제어는 설정한 격리 레벨에 따라 달라진다.
  • 지속성 Durability
    • 트랜잭션이 완료되면 그 결과가 지속적으로 유지되어야 한다. 현재의 Application이 변경되거나 없어지더라도 데이터는 유지된다. 일반적으로 물리적인 저장소를 통해서 트랜잭션 결과가 저장된다.

 

Transaction 동작 원리

  1. Caller가 target 메소드를 호출하면 먼저 AOP Proxy가 호출된다.
  2. Transaction Adviser는 새로운 트랜잭션을 생성한다.
  3. Custom interceptor들이 transaction advisor 전후로 호출된다.
  4. Target 비즈니스 메소드가 호출된다.
  5. Transaction Advisor는 커밋 또는 롤백을 결정하고 호출자에게 넘긴다.
  6. AOP Proxy는 결과를 받아서 Caller에서 넘긴다.