스프링 - 트랜잭션 추상화

박찬우·2024년 2월 2일

스프링 DB

목록 보기
14/53
post-thumbnail

트랜잭션 추상화

  • DB 관련 기술마다 트랜잭션을 관리하는 기능이 다르기 때문에 기술이 바뀔 때 마다 코드의 변경이 일어나게 된다
  • 예) JDBC 를 쓰다가 JPA로 바꾸면 코드 변경이 일어남
  • 이러한 문제 해결을 위해서는 트랜잭션을 인터페이스로 만들고 인터페이스를 기술들마다 인터페이스를 구현하면 된다

스프링의 트랜잭션 추상화

  • 스프링은 트랜잭션 인터페이스 뿐만 아니라 데이터 접근 기술에 따른 트랜잭션 구현체도 대부분 만들어 놓아서 가져다 쓰기만 하면 된다
  • 스프링 트랜잭션 추상화의 핵심은 PlatformTransactionManager 인터페이스이다
    • org.springframework.transaction.PlatformTransactionManager
    • 스프링 5.3 부터는 DataSourceTransactionManager 를 상속받아서 약간의 기능을 확장한JdbcTransactionManager 를 제공함(둘은 크게 다르지 않음)
package org.springframework.transaction;
public interface PlatformTransactionManager extends TransactionManager {

	TransactionStatus getTransaction(@Nullable TransactionDefinition definition) 
    			throws TransactionException;
    
	void commit(TransactionStatus status) throws TransactionException; 
    
    void rollback(TransactionStatus status) throws TransactionException;
}
  • getTransaction() : 트랜잭션을 시작한다. 이름이 getTransaction() 인 이유는 기존에 이미 진행중인 트랜잭션이 있는 경우 해당 트랜잭션에 참 여할 수 있기 때문이다. 참고로 트랜잭션 참여, 전파에 대한 부분은 뒤에서 설명한다. 지금은 단순히 트랜잭션을 시작하는 것으로 이해하면 된다.
  • commit() : 트랜잭션을 커밋한다.
  • rollback() : 트랜잭션을 롤백한다
profile
진짜 개발자가 되어보자

0개의 댓글