본문 바로가기
개발 공부

[트랜잭션] feat. 스프링 AOP

by 도됐좋 2023. 5. 22.
순서
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와 프록시 개념을 적용하여 트랜잭션을 처리할 수 있습니다.

- 동작 원리