순서
1. 트랜잭션
2. 트랜잭션의 4가지 특징
3. 스프링에서의 트랜잭션
✅ 트랜잭션이란?
- DB의 상태를 변화시키기 위해 수행하는 작업을 묶은 최소 단위
- 한 번에 수행되어야하는 작업들의 묶음
✅ 트랜잭션의 4가지 특징
➤ 원자성
- 트랜잭션의 작업들은 전부 수행되거나, 전부 취소돼야함(All or Nothing)
- ex) 만약 위의 송금 과정 중 '입금 통장 잔액 조회' 과정에 문제가 생겼는데 중간에 멈추면,
송금 통장과 입금 통장 모두 돈이 없어지는 심각한 문제가 생김
➤ 일관성
- 트랜잭션 수행 후 데이터 모델의 모든 제약조건을 만족해야함
- ex) 송금 통장 잔액은 0보다 커야 한다, 입금 통장의 잔액은 null일 수 없다 등등
➤ 독립성
- 트랜잭션 수행 중에는 다른 트랜잭션이 영향을 주면 안 됨
- ex) 위의 송금 트랜잭션에서 잔액을 조회하고 감소시키는 중에,
만약 결제 트랜잭션이 같은 통장에 접근해서 동작한다면
송금 트랜잭션이 끝나면 잔액이 0이 되기 때문에, 결제 트랜잭션은 실패해야 하지만
아직 통장의 잔액이 감소되지 않았기 때문에 두 트랜잭션 모두 수행됙고
비정상적인 결과 발생
➤ 지속성
- 트랜잭션이 완료되면 결과는 영구적으로 보존되어야 함
- 완료된 트랜잭션은 비휘발성 메모리에 저장되어 정전과 같은 시스템 장애의 영향을 받지 않아야 함
✅ 스프링에서의 트랜잭션
- 스프링에서는 개발자들이 트랜잭션을 효율적으로 활용하기 위한 여러 기술 제공
➤ 프로그래밍적 트랜잭션 관리
- PlatformTransactionManager 인터페이스를 이용하여 트랜잭션 관련 코드를 직접 작성
getTransaction() : 현재 TransactionStatus를 반환
commit() : 변경 내역을 저장
rollback() : 변경 내역을 취소
➤ 선언적 트랜잭션 관리
- 트랜잭션이 필요한 클래스 또는 메소드에 @Transaction 어노테이션 작성
➤ @Transaction
- https://for-your-information.tistory.com/7
- 저번에 프록시와 AOP에 대해 대충 알아본 글입니다.
- @Transaction 어노테이션을 사용하면 AOP와 프록시 개념을 적용하여 트랜잭션을 처리할 수 있습니다.
- 동작 원리
'개발 공부' 카테고리의 다른 글
[렌더링] feat. SSR+MPA, CSR+SPA (0) | 2023.05.23 |
---|---|
[Jar, War] feat. 스프링 (2) | 2023.05.22 |
[프록시 패턴] feat. 스프링 AOP, JPA (0) | 2023.05.18 |
[RestController] feat. ResponseBody (0) | 2023.05.16 |
[메시지 큐] feat. RedHat AMQ, IBM MQ(WMQ) (0) | 2023.05.12 |