저번에는 트랜잭션의 문제점에 대해 알아보았고, 그것을 스프링이 어떻게 해결해 주는지에 대해 알아보았다.
스프링이 제공해주는 트랜잭션 매니져를 통한 코드를 보겠다.
우선 트랜잭션을 서비스 계층해서 사용하면
커넥션을 파라미터로 받아야 했지만,
트랜잭션 매니져를 통해서 connection를 파라미터로 받을 필요가 없어졌다. 코드가 좀 더 간결해 진 것을 볼 수 있다.
여기서 한 번더 스프링은 try catch finally를 포함한 commit, rollbacok 반복되는 코드 문제를 해결해 주는 TransactionTemplate 라는 것을 제공해준다.
TransactionTemplate란 간단히 반복되는 로직을 템플릿 콜백 패턴을 사용하게 해주는 클래스이다.
TransactionTemplate란 적용 결과 commit, rollback 반복되는 코드를 해결할 수 있게 되었다.
여기서 한 번 더 스프링은 더욱더 간단하게 만들어준다. 바로 서비스계층에 트랜잭션 적용코드를 안써도 되는 마법의 @Transactional를 제공한다.
@Transactional
public void itemPriceUpdate(String itemId, int price) throws SQLException {
serviceLogic(itemId, price);
}
스프링이 프록시를 제공함으로써, 프록시에 트랜잭션을 시작하고 commit,rollback을 가지고 있고, serviceLogic을 호출함으로써 우리는 service계층에 트랜잭션에 관련된 코드를 작성하지 않아도 된다. 그저 @Transactional 어노테이션 하나만으로 끝낼수 있다.