티스토리 뷰
서론
어플리케이션을 만듦에 있어서 데이터베이스에 정보를 업데이트하고 지우고, 인설트하는 것은 필수적인 요소라고 볼 수 있다. 데이터베이스에 정보를 최신화 함에 있어서 중요한 것이 바로 Transcation관리이다. 어떻게 일의 단위를 어떻게 묶어 주느냐에 따라 데이터의 품질이 좋아지냐 나빠지느냐에 기로에 서게 된다. 예를 들어 한 어플리케이션의 기능에서 A, B 두 개의 테이블에 정보를 각각 업데이트 한다고 하자. 첫번째 정보를 정상적으로 최신화 하였지만 프로그램 오류에 의해서 중간에 오류가 발생하였을 경우 첫번째 정보는 rollback되어야 한다. 만약 Transaction이 정상적으로 처리되지 않는다면 분명 기능은 동작하였고 A 테이블에는 데이터가 있지만 B 테이블에는 데이터가 존재 하지 않는 문제점이 발생하게 된다.
이렇듯 Transaction을 스프링을 사용하게 되면 @Transactional 어노테이션을 사용하여 처리 할 수 있다.
이번 포스팅에서는 @Transactional 어노테이션을 사용하기 위한 설정방법(JavaConfig)과 사용자 정의 Transactional 어노테이션을 사용하는 방법에 대해서 포스팅한다. 포스팅에 사용한 스프링 버전은 4.2.5버전이다.
Transaction 설정
우선 자바로 설정을 하기 위해서는 TransactionManagementConfigurer를 구현한 클래스가 필요하다. 해당 인터페이스를 구현하게 되면 annotationDrivenTransactionManager(): PlatformTransactionManager라는 클래스를 구현하게 한다.
아래에서 바로 설정한 소스를 보자.
@Transactional 어노테이션 안에 value값을 보면 joduBaiscTransaction이라는 값을 볼 수 있다. 이처럼 여러개의 DataSource를 사용할 경우 빈 이름을 전달하여 각각의 DataSource에 Transaction을 만들어 줄 수 있다. 또한 같은 DataSource라도 동작하는 메소드마다 Transaction 성질이 달라 질 수 있는데 이 경우 어노테이션을 더 만들어서 처리 해 줄 수 있다.
여기서 처음에 내가 실수 했던 부분이 rollbackFor 옵션을 주지 않아서 에러가 발생했음에도 롤백 되지 않는 문제를 발생 시켰던 적이 있다.
rollbackFor에 선언되는 익셉션의 종류에 따라서도 트랜잭션을 구분 할 수 있음을 알아두자.
'Spring' 카테고리의 다른 글
Spring RestTemplate사용시 주의 사항 (0) | 2018.11.06 |
---|---|
Mybatis + Mysql Multiple Insert & update (0) | 2018.06.21 |
Spring HttpSessionListener (2) | 2017.03.25 |
Spring Security Custom EntryPoint (0) | 2016.12.28 |
JUnit 테스트 시 Spring 구동 및 Autowired하는 방법 (0) | 2016.11.15 |