Transaction
- 트랜잭션은 DB와 Java 언어 데이터를 주고받는 과정에 원자성을 부여하는 수단
- 어떤 작업 프로세스를 하나로 묶어 실행 중인 하나의 작업이라도 실패하면 모두 실패처리하고, 전체 작업이 성공하면 성공처리
- ex. 결제와 동시에 좌석 할당
- 결제 수행 + 결제내역 저장 + 구매내역 저장
Transaction ACID
- 원자성 Atomicity
- 트랜잭션은 하나 이상의 동작을 논리적으로 한 개의 작업단위로 묶는다. 원자성은 트랜잭션 범위에 있는 모든 동작이 모두 실행되거나 모두 실행 취소됨을 보장하는 것
- 일관성 Consistency
- 트랜잭션이 종료되면 시스템은 비즈니스에서 기대하는 상태가 된다.
- 예를 들어, 서적 구매 트랜잭션이 성공적으로 실행되면 결제 내역, 구매 내역, 잔고 정보가 비즈니스에 맞게 저장되고 변경된다.
- 고립성 Isolation
- 트랜잭션은 다른 트랜잭션과 독립적으로 실행되어야 하며 서로 다른 트랜잭션이 동일한 데이터에 동시에 접근할 경우 알맞게 동시 접근을 제어해야 한다.
- 동시접근 제어는 설정한 격리 레벨에 따라 달라진다.
- 지속성 Durability
- 트랜잭션이 완료되면 그 결과가 지속적으로 유지되어야 한다. 현재의 Application이 변경되거나 없어지더라도 데이터는 유지된다. 일반적으로 물리적인 저장소를 통해서 트랜잭션 결과가 저장된다.
Transaction 동작 원리
- Caller가 target 메소드를 호출하면 먼저 AOP Proxy가 호출된다.
- Transaction Adviser는 새로운 트랜잭션을 생성한다.
- Custom interceptor들이 transaction advisor 전후로 호출된다.
- Target 비즈니스 메소드가 호출된다.
- Transaction Advisor는 커밋 또는 롤백을 결정하고 호출자에게 넘긴다.
- AOP Proxy는 결과를 받아서 Caller에서 넘긴다.
'TIL > BackEnd' 카테고리의 다른 글
JPA (Java Persistence API) (0) | 2023.05.10 |
---|---|
JPA - Oracle 데이터베이스 생성 (0) | 2023.05.08 |
[Spring] 예외처리: @ExceptionHandler, SimpleMappingExceptionResolver (0) | 2023.04.27 |
@Autowired와 @Value를 통한 주입의 차이 (0) | 2023.04.26 |
[Spring] IoC & DI (0) | 2023.04.25 |