본문 바로가기

강의 내용 정리/Spring DB 1

4-6. 트랜잭션 문제 해결 - 트랜잭션 템플릿

 

 

# 현재 문제점

 

 

 

중간의 비지니스로직을 제외하고 트랜잭션을 수행하는 코드는 모두 중복된다.

-> 중간에 있기 때문에 메서드로 추출하기 쉽지 않다.

 

-> 템플릿 콜백 패턴을 적용 해보자!

 

 

 

 

 

# 트랜젝션 탬플릿

 

 

스프링이 TransactionTemplate 이라는 편리한 기능을 제공한다.

 

 

 

보통 PlatformTransactionManager 를 주입받아서 TransactionTemplate을 생성한다.

-> 자주 사용되는 패턴 ( JdbcTemplate 에서도 사용 )

 

TransactionTemplate을 사용하려면 transactionManager가 필요하다. 생성자에서 transactionManager를주입받으면서TransactionTemplate을 생성했다.

 

 

 

 

반환값이 있는 경우 execute() 를, 없는 경우 executeWithoutResult() 를 사용하자.

 

-> 원래 받았던 TransactionStatus 를 파라미터로 넘기고 비지니스 로직을 실행시키자.

-> 메서드가 종료 될 때 예외가 발생하지 않으면 commit();

    언체크예외가 터지면 rollback(); 을 실행해준다.

    ( 체크예외는 commit(); 하지만 자세히는 나중에 알아보자 )

    ( 스프링의 기본 규칙은 언체크예외는 롤백, 체크예외는 커밋 한다. )

 

TransactionOperations

직접 찾아보니 executeWithoutResult는 Consumer<TransactionStatus> 타입을 파라미터로 받고 있다.

 

 

 

 

 

 

# 정리

 

 

트랜잭션 템플릿 덕분에 트랜잭션을 시작하고, 커밋하거나 롤백하는 코드가 모두 제거 되었다.

코드가 많이 줄긴 했지만 서비스로직인데 비즈니스로직 뿐만 아니라 트랜잭션을 처리하는기술로직이 함께 포함되어있다.
-> 두가지 관심사가 한 클래스에 담겨있어 유지보수에 어려움이 있을 수 있다.

-> AOP를 적용해보자.

 

 

 

 

 

꾸준히 다시보자.

 

1. 221014

2. 221101

Recent Posts
Popular Posts
Recent Comments