[Spring] Spring Transaction

JOY·2023년 5월 3일
0

[Spring]

목록 보기
15/18
post-thumbnail

Transaction 트랜잭션

  • 여러 개의 데이터베이스 작업이 하나의 논리적인 단위로 실행되는 것

  • 데이터베이스에서 데이터를 처리하는 과정에서 발생하는 일련의 작업 단위
  • 어떤 작업 프로세스를 하나로 묶어 실행중인 작업 중 하나라도 실패하면 모든 작업이 취소, 전체작업이 성공하면 성공

트랜잭션 특징

  • 원자성
  • 일관성
  • 고립성
  • 지속성

Spring Transaction

  • 스프링의 트랜잭션 기술, Dynamic Proxy와 AOP라는 기술을 통해 단 몇줄의 코드만으로 인터페이스, 클래스, 메소드 단위로 세분화 하여 트랜잭션을 컨트롤 할 수 있다.
  • @Transactional 어노테이션 사용을 통해 트랜잭션 설정
  • RuntimExceptionError에 대해서만 ROLLBACK 처리 수행
    : Exception 타입 예외가 발생하더라도 ROLLBACK 되지 않고 예외 발생 전까지 작업 COMMIT

처리방식

  • 프로그래밍 처리방식
  • 선언적 트랜잭션 처리방식

이해를 위한 필수 용어

자동 프록시 ← 생성기 ← 어드바이저 ← 포인트컷/어드바이스

동작원리

PlatformTransactionManager

Spring은 데이터베이스 트랜잭션 관리를 위해 해당 인터페이스 제공

선언적 트랜잭션 처리 방식

1. Tx 네임스페이스를 이용한 트랜잭션 설정

<tx:method> 태그 속성

  • name : 트랜잭션이 적용될 메소드 이름
  • propagation : 트랜잭션 전파 규칙
  • isolation : 트랜잭션 격리 레벨 설정
  • read-only : 트랜잭션을 읽기 전용으로 설정
  • no-rollback : 트랜잭션에서 롤백을 수행하지 않음

1. <tx:advice> 태그를 이용한 트랜잭션 처리 방식

<tx:advice transaction-manager="transactionManager"	id="txAdvice">
  <tx:attributes>
    <tx:method name="transfer" isolation="DEFAULT"	propagation="REQUIRED"
				rollback-for="web.mvc.exception.MyException" />
    <tx:method name="test" isolation="DEFAULT" propagation="REQUIRED"
               rollback-for="web.mvc.exception.MyException" />
  </tx:attributes>
</tx:advice> 

2. @Transactional 어노테이션을 이용한 트랜잭션 설정

<!-- transaction옵션과 pointcut 설정을 자바기반으로 설정 -->
<tx:annotation-driven transaction-manager="transactionManager" />

어노테이션을 이용하여 트랜잭션을 설정했을 시
<tx:advice> 태그를 이용한 속성들을 아래 코드처럼 사용할 수 있다.

@Transactional(isolation = Isolation.DEFAULT, propagation =  Propagation.REQUIRED)
public int transfer(TransferDTO transferDTO) throws MyException {}

👀 소심한 주절주절

Transaction의 Joinpoint(메서드)는 service가 된다.

공통으로 들어가는 모듈을 미리 생성하여 제공 하면서
개발자는 비즈니스 로직에 조금 더 집중 할 수 있도록 해준다.

Spring Transaction모듈은 AOP의 Advice 방식으(사전,사후)로 이미 만들어져있다.

profile
Just Do IT ------- 🏃‍♀️

0개의 댓글