Spring - DB연동 - 트랜잭션 처리

트랜잭션 처리

트랜잭션이란?
두 개 이상의 쿼리를 한 작업으로 실행해야 할 때 사용하는 것

트랜잭션은 여러 쿼리를 논리적으로 하나의 작업으로 묶어준다.

  • COMMIT
    : 성공한 트랜잭션 결과를 DB에 실제로 반영하는 명령어
  • ROLLBACK
    : 트랜잭션으로 묶인 쿼리 중 하나라도 실패하면 전체 쿼리를 실패로 간주하고 실패 이전에 실행한 쿼리를 취소한다. 이 때 DB를 기존 상태로 되돌리는 명령어

@Transactional 어노테이션

트랜잭션 범위를 매우 쉽게 지정가능한 어노테이션이다.

Transactional 어노테이션이 제대로 동작하려면 다음의 두 가지 내용을 스프링 설정에 추가해야 한다.

  • PlatformTransactionManager 빈 설정
    • 스프링이 제공하는 트랜잭션 매니저 인터페이스이다.
  • @Transactional 어노테이션 활성화 설정
    • @EnableTransactionManagement 어노테이션 설정
    • @Transactional 어노테이션이 붙은 메서드를 트랜잭션 범위에서 실행하는 기능을 활성화 시킨다.
@Configuration
@EnableTransactionManagement
public class AppCtx {

	....
    
	@Bean
	public PlatformTransactionManager transactionManager() {
		DataSourceTransactionManager tm = new DataSourceTransactionManager();
		tm.setDataSource(dataSource());
		return tm;
	}
}

@Transactional과 프록시

스프링은 @Transactional 어노테이션을 이용해서 트랜잭션을 처리하기 위해 내부적으로 AOP를 사용한다. 결국 트랜잭션 처리가 프록시를 통해서 이루어진다는 것이다.

@Transactional은 프록시 형태로 동작하기에 외부에서 접근이 가능한 메서드만 설정할 수 있다. 따라서 public의 형태여야 한다.

0개의 댓글