728x90
▶ 트랜잭션 처리
-트랜잭션 : 여러 쿼리를 논리적으로 ’하나의 작업‘으로 묶어준다.
- 묶인 쿼리 중 하나라도 실패하면 ’전체 쿼리 실패‘로 간주 -> ’롤백‘ 처리
1) 롤백 : 트랜잭션의 모든 쿼리 실패 시, 실행 취소 후 DB 기존 상태로 복원
2) 커밋 : 트랜잭션의 모든 쿼리 성공 시, 결과를 실제 DB에 반영하는 것
ex) 은행에서 돈 입출력 시 입금자의 돈이 빠져나가면, 상대 계좌에 돈이 입금되어야 하는데, 트랜잭션의 영속성이 없다면 입금자는 돈이 빠져나갔는데도 상대는 돈을 입금받지 못하게 됨 - 데이터 일관성을 위해 연관된 데이터 작업 시, 하나의 작업 단위로 묶어서 데이터 처리를 하는 것. -스프링이 제공하는 ‘트랜잭션 기능’ 사용 시, 중복 없는 간결한 트랜잭션 범위 지정 O |
▶ 트랜잭션 사용 위한 설정
① xml 설정 파일
1) 트랜잭션 활성화 설정
<aop:aspectj-autoproxy></aop:aspec서-autoproxy>
2) PlatformTransactionManager 인터페이스를 빈 객체로 등록
<bean id = “transactionManager”
class=“orog.springframework.jdbc.datasource.DataSourceTransactionManager”>
<property name=“dataSource” ref=“dataSource”></property>
</bean>
3) 트랜잭션 @ 애노테이션으로 사용할 수 있게 태그 등록
<tx:annotation-driven> 태그
4) tx 관련 schema xml 설정 추가
② Java 설정 파일
1) 트랜잭션 활성화 설정
- 자바 설정 파일에 @EnableTransactionManagement 애노테이션 붙임
- 스프링은 @Transactional 적용된 빈 객체를 찾아서 알맞은 프록시 객체를 생성함
이 프록시 객체는 @Transactional 메소드 호출 시, PlatformTransactionManager를 사용해서 트랜잭션을 시작함
2) PlatformTransactionManager 인터페이스를 빈 객체로 설정
- 동일한 방식으로 트랜잭션 처리를 위한 인터페이스
▶ @Transactional 애노테이션
트랜잭션 처리를 위한 설정을 모두 완료하면, 트랜잭션 범위에서 실행하고 싶은 스프링 빈 객체 속 메소드에 @Transactional을 붙이면 된다.
<처리 우선순위> 메소드의 @Transactional >> 클래스의 @Transactional >> 인터페이스의 @Transactional |
▶ 트랜잭션과 프록시 객체
스프링은 AOP를 이용하여 트랜잭션을 처리한다. (내부적으로 proxy 객체가 생성되며 이 객체를 통해 트랜잭션이 실질적으로 처리됨) 스프링은 @Transactional 적용 빈 객체에 알맞은 프록시 객체를 생성하고, 프록시 객체는 @Transactional 붙은 메소드 호출하여 트랜잭션 시작함 -> 성공 시 커밋처리 실패 시 롤백 처리함 -JdbcTemplate 함수 호출 시 발생하는 에러의 경우, @Transactional 지정되어있다면 자동 롤백 처리됨 cf. 일반 JDBC 함수 호출 시 익셉션은 롤백 처리 불가능 |
728x90
'Web(웹)_관련 공부 모음 > [학교]_STS_Spring_실습' 카테고리의 다른 글
[개념]_ MyBatis 라이브러리로 DB 관리 (0) | 2022.05.13 |
---|---|
[개념]_Spring JDBC , Mapper 활용 데이터 처리 (0) | 2022.05.12 |
[학교]_10주차_스프링 mySQL DB 쿼리 실습 (0) | 2022.05.11 |
[개념]_Spring _DB 연동 (0) | 2022.05.11 |
[학교] cmd에서 spring boot 실행 (0) | 2022.05.04 |