Tiny Bunny [Spring] 트랜잭션 - 솜님의 블로그
솜님의 블로그
카테고리
작성일
2024. 10. 21. 00:36
작성자
겨울솜사탕

Spring이 해주는 것

트랜잭션 관리자가 해준다.

xml에 스키마 등록을 한다.

 

 

<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:context="http://www.springframework.org/schema/context"
   xmlns:aop="http://www.springframework.org/schema/aop"
   xmlns:tx="http://www.springframework.org/schema/tx"
   xsi:schemaLocation="http://www.springframework.org/schema/beans
                  http://www.springframework.org/schema/beans/spring-beans.xsd
                  http://www.springframework.org/schema/context
                  http://www.springframework.org/schema/context/spring-context-4.2.xsd
                  http://www.springframework.org/schema/aop
                  http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
                  http://www.springframework.org/schema/tx
                  http://www.springframework.org/schema/tx/spring-tx-4.2.xsd">

여기서 tx ==> 트랜잭션 관리 관련한 스키마!

 

 

<bean class="org.springframework.jdbc.datasource.DataSourceTransactionManager" id="txManager">
	<property name="dataSource" ref="ds" />
</bean>

트랜잭션 관리자를 등록해 준다.

 

 

 

트랜잭션

기능의 단위를 뜻한다.

하나의 기능 == 1 트랜잭션

 

ex)  ①사용자가 1,000원 지불 / ②쿠키 10개 구입 / ③쿠키 2개를 이용하여 웹툰 한 화 미리 보기
- 웹툰 구매 과정에서 인터넷 연결이 끊겼다고 가정했을 때
1) 1,000원이 환불됨 >> ① ~ ③이 모두 하나의 트랜잭션으로 볼 수 있다.
2) 1,000원 환불은 안 됐지만 쿠키는 10개 있음 >> ① ~ ② 1번, ③ 1번 >> 2 트랜잭션

 

*참고

 

트랜잭션 사용 시 advice를 사용한다.

 

// applicationContext.xml

<tx:advice transaction-manager="txManager" id="txAdvice">
	<tx:attributes>
		<tx:method name="select*" read-only="true" /> <!-- read-only : 읽기 설정. select류는 읽기만 하라는 설정임 -->
		<tx:method name="*" /> <!-- 모든 메서드들에 대해 처리 (default) -->
	</tx:attributes>
</tx:advice>

<!-- 포인트 컷 -->
<aop:config>
	<aop:pointcut expression="execution(* com.koreait.app.biz..*Impl.*(..))" id="txPointcut" />		
	<aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut" />
</aop:config>

기존의 AOP 설정은 pointcut (어떤 핵심관심에 대해)과 aspect(언제 공통 로직을 호출할지) 설정을 해주었다.

현재 트랜잭션 매니저의 경우 우리가 아니라 Spring 것임.

따라서 이때는 aspect가 아닌 advisor를 사용한다.

 

 

 


 

하나의 서비스가 제대로 동작하지 않았기 때문에

서비스의 처음 상태로 되돌아가는 것을 ROLLBACK이라고 한다.

 

하나의 트랜잭션은? 하나의 동작으로 처리해야 한다.

ex) 회원가입이 제대로 되었다면 이메일까지 발송하고 싶다.

--> 회원가입 ~ 이메일 발송을 하나의 동작으로 하고 싶다면, 하나의 서비스에 로직을 작성해야 한다.

 

// BoardServiceImpl (예시코드)

 

	@Override
	public boolean insert(BoardDTO boardDTO) {
		System.out.println("insert 01");
		boardDAO.insert(boardDTO); // 트랜잭션 처리 확인용 코드
		System.out.println("insert 02");
		return boardDAO.insert(boardDTO); // 하나의 서비스가 제대로 처리되지않아서, 서비스의 처음 상태로 되돌아감 == ROLLBACK
	}

 

 

 

'Spring' 카테고리의 다른 글

[Spring] 횡단 로직 정리  (0) 2024.10.28
[Spring] 파일 입출력 (사진 업로드)  (1) 2024.10.24
[Spring] 템플릿 패턴  (0) 2024.10.20
[Spring] AOP 어노테이션 사용  (0) 2024.10.16
[Spring] AOP 관점지향프로그래밍  (0) 2024.10.15