# 현재 문제점

중간의 비지니스로직을 제외하고 트랜잭션을 수행하는 코드는 모두 중복된다.
-> 중간에 있기 때문에 메서드로 추출하기 쉽지 않다.
-> 템플릿 콜백 패턴을 적용 해보자!
# 트랜젝션 탬플릿
스프링이 TransactionTemplate 이라는 편리한 기능을 제공한다.

보통 PlatformTransactionManager 를 주입받아서 TransactionTemplate을 생성한다.
-> 자주 사용되는 패턴 ( JdbcTemplate 에서도 사용 )
TransactionTemplate을 사용하려면 transactionManager가 필요하다. 생성자에서 transactionManager를주입받으면서TransactionTemplate을 생성했다.

반환값이 있는 경우 execute() 를, 없는 경우 executeWithoutResult() 를 사용하자.
-> 원래 받았던 TransactionStatus 를 파라미터로 넘기고 비지니스 로직을 실행시키자.
-> 메서드가 종료 될 때 예외가 발생하지 않으면 commit();
언체크예외가 터지면 rollback(); 을 실행해준다.
( 체크예외는 commit(); 하지만 자세히는 나중에 알아보자 )
( 스프링의 기본 규칙은 언체크예외는 롤백, 체크예외는 커밋 한다. )

직접 찾아보니 executeWithoutResult는 Consumer<TransactionStatus> 타입을 파라미터로 받고 있다.
# 정리
트랜잭션 템플릿 덕분에 트랜잭션을 시작하고, 커밋하거나 롤백하는 코드가 모두 제거 되었다.
코드가 많이 줄긴 했지만 서비스로직인데 비즈니스로직 뿐만 아니라 트랜잭션을 처리하는기술로직이 함께 포함되어있다.
-> 두가지 관심사가 한 클래스에 담겨있어 유지보수에 어려움이 있을 수 있다.
-> AOP를 적용해보자.
꾸준히 다시보자.
1. 221014
2. 221101
'Java, Spring > Spring DB 1' 카테고리의 다른 글
4-8. 트랜잭션 문제 해결 - 트랜잭션 AOP 적용 (0) | 2022.10.09 |
---|---|
4-7. 트랜잭션 문제 해결 - 트랜잭션 AOP 이해 (0) | 2022.10.09 |
4-5. 트랜잭션 문제 해결 - 트랜잭션 매니저2 (0) | 2022.10.09 |
4-4. 트랜잭션 문제 해결 - 트랜잭션 매니저1 (0) | 2022.09.28 |
4-3. 트랜잭션 동기화 (0) | 2022.09.28 |