스프링이 제공하는 깔끔한 트랜잭션 인터페이스를 썼음에도 비즈니스 로직이 주인이어야 할 메서드 안에 이름도 길고 무시무시하게 생긴 트랜잭션 코드가 더 많은 자리를 차지하고 있는 모습이 못마땅하다.
하지만 논리적으로 따져봐도 트랜잭션 경계는 분명 비즈니스 로직 전후에 설정되어야 하는 것이 분명하니 UserService 메서드에 두는 것을 거부할 명분이 없다.
6.1.1 메서드 분리
6.1.2 DI 를 이용한 클래스의 분리