트랜잭션(Transaction) 적용
Service 단계의 swanEnroll() 메서드는 내부적으로 각각 쿼리를 실행하는 Mapper 단계의 메서드를 2개 호출합니다.
그런데 앞서 작성된 코드에서 2개의 Mapper 메서드 중 하나의 메서드에서 에러가 발생한다면, 에러가 발생하지 않은 메서드의 쿼리문만 실행되고, 에러가 발생한 메서드의 쿼리문은 실행되지 않게 됩니다.
만약 해당 상황이 결제와 관련됐다고 가정한다면, 매우 심각한 문제가 될 것입니다.
이러한 문제가 발생할 수 있는 상황에서 사용할 수 있는 기능이 바로 스프링의 트랜잭션(Transaction) 기능입니다.
트랜잭션 기능을 사용하면, 내부적으로 2개 혹은 그 이상의 작업 단위로 묶인 메서드가 하나의 단위처럼 동작할 수 있게 되고, 그 결과를 보장해줍니다.
따라서 개발자는 여러 예외상황을 대비하기 위해 수많은 코드를 추가하지 않고도 안정된 코드를 작성할 수 있습니다.
순서
1. 트랜잭션 설정
2. 트랜잭션 어노테이션 적용
1. 트랜잭션 설정
먼저 pom.xml에 트랜잭션 관련 dependency를 추가합니다.
<!-- https://mvnrepository.com/artifact/org.springframework/spring-tx -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${org.springframework-version}</version>
</dependency>
저는 프로젝트 초기 설정 때 추가했기 때문에 또 추가하지 않았습니다.
트랜잭션 기능을 사용하기 위해 DataSourceTransactionManager라는 클래스를 Bean 객체로 등록해서 스프링이 해당 기능을 인식하고 사용할 수 있도록 해줍니다.
root-context.xml 파일에 아래의 코드를 추가합니다.
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="datasource"></property>
</bean>
트랜잭션을 사용하는 방법 중 어노테이션을 기반으로 하기 위해 root-context.xml 파일 창 하단의 Namespaces 탭에서 tx 항목에 체크를 합니다.
다시 Source 탭을 클릭한 후 아래의 코드를 추가합니다.
해당 코드는 어노테이션 기반 트랜잭션을 사용하기 위해 추가해주는 태그입니다.
<tx:annotation-driven />
2. 트랜잭션 어노테이션 적용
기본적인 설정이 완료되었습니다.
사용 방법은 적용해야 할 메서드의 선언부에 @Transactional 어노테이션을 추가하는 것입니다.(간단하쥬)
@Transactional
AdminServiceImpl.java에 있는 swanEnroll() 메서드 선언부에 @Transactional 어노테이션을 추가합니다.
'😎 STS3 Spring 쇼핑몰' 카테고리의 다른 글
STS3 쇼핑몰 프로젝트[27] 업로드 이미지 정보 등록 - 3 (0) | 2022.10.02 |
---|---|
STS3 쇼핑몰 프로젝트[27] 업로드 이미지 정보 등록 - 2 (0) | 2022.10.01 |
STS3 쇼핑몰 프로젝트[27] 업로드 이미지 정보 등록 - 1 (0) | 2022.10.01 |
STS3 쇼핑몰 프로젝트[26] 업로드 이미지 삭제 - 2 (0) | 2022.09.30 |
STS3 쇼핑몰 프로젝트[26] 업로드 이미지 삭제 - 1 (0) | 2022.09.30 |