[Spring] 트랜잭션

2020. 7. 30. 18:12Spring/Spring

1. AOP 트랜잭션

1) 설정 파일

tx 네임스페이스를 추가한다.

/src/main/resources/
applicationContext.xml

applicationContext.xml

2) 트랜잭션 관리자 클래스 등록

모든 트랜잭션 관리자는 PlatformTransactionManager 인터페이스를 구현한 클래스들이다. 다양한 클래스들 중, 현재 프로젝트가 JDBC 기반으로 동작하기 때문에 DataSourceTransactionManager 클래스를 이용하여 트랜잭션 처리한다.

/src/main/resources/
applicationContext.xml

applicationContext.xml

3) 어드바이스 설정

트랜잭션 관리 어드바이스는 <tx:advice> 엘리먼트를 이용하여 설정한다.

/src/main/resources/
applicationContext.xml

applicationContext.xml

<tx:method> 속성 설명
name 트랜잭션이 적용될 메서드 이름 지정
read-only 읽기 전용 여부 지정
no-rollback-for 트랜잭션을 롤백하지 않을 예외 지정
rollback-for 트랜잭션을 롤백하라 예외 지정

4) 트랜잭션 적용

기존에는 <aop:aspect> 엘리먼트를 이용하여 어드바이스를 설정했지만, 트랜잭션의 경우 <aop:advisor> 엘리먼트를 사용한다. <aop:advisor> 엘리먼트를 사용하는 이유는 <tx:advice> 설정으로 스프링 컨테이너가 자동으로 생성하기 때문에 어드바이스 메서드 이름을 알 수 없기 때문이다.

/src/main/resources/
applicationContext.xml

applicationContext.xml

5) 트랜잭션 수행

등록 쿼리문을 수행할 때, 자동으로 PK 컬럼(SEQ)의 값이 증가하지 않도록 수정하고, PK 컬럼(SEQ)에 동일한 값을 넣어 예외를 발생시켜 롤백 처리를 확인한다.

/src/main/java/
BoardServiceImpl.java, BoardDAOSpring.java

BoardServiceImpl.java, BoardDAOSpring.java

예외 발생 전/후, 구현 화면

예외 발생 전
예외 발생 후
구현 화면


[참고] 스프링 퀵 스타트

728x90

'Spring > Spring' 카테고리의 다른 글

[Spring] Model 아키텍처 (2)  (0) 2020.07.31
[Spring] Model 아키텍처 (1)  (0) 2020.07.30
[Spring] JdbcTemplate  (0) 2020.07.30
[Spring] AOP 어노테이션  (0) 2020.07.29