본문 바로가기

Spring/토비의 스프링 3.1

5.5 정리


비즈니스 로직을 담은 UserService 클래스를 만들고, 트랜잭션을 적용하면서 스프링의 서비스 추상화에 대해 알아보았다.

  • 비즈니스 로직을 담은 코드는 데이터 액세스 로직을 담은 코드 분리되어야 한다.
  • DAO의 기술 변화에 서비스 계층의 코드가 영향을 받지 않도록 인터페이스 DI를 활용하여 결합도를 낮추어야 한다.
  • DAO에는 트랜잭션이 필요하다.
  • 트랜잭션의 시작과 종료 지점을 지정하는 것은 트랜잭션 경계설정이라고 한다.
  • 스프링이 제공하는 트랜잭션 동기화 기법을 활용하면 편리하게 트랜잭션을 사용할 수 있다.
  • 트랜잭션 API의 종류와 방법은 다양하므로, 트랜잭션이 변경되면 경계설정 코드도 함께 변경되어야 한다.
  • 이는 단일 책임 원칙에 위배되며, DAO가 사용하는 특정 기술에 대해 강한 결합을 만들어낸다.
  • 결합도를 낮추기 위해서는 트랜잭션 서비스 추상화를 이용하면 된다.
  • 서비스 추상화는 로우레벨의 기술과 API의 변화와 상관없이 일관된 API를 가진 추상화 계층을 도입한다.
  • 서비스 추상화는 테스트하기 어려운 JavaMail과 같은 기술에도 적용할 수 있다.
  • 테스트 대상이 사용하는 의존 오브젝트를 대체할 수 있도록 만든 오브젝트를 테스트 대역이라고 한다.
  • 테스트 대역은 테스트 대상 오브젝트가 원활하게 동작할 수 있도록 도우면서 테스트를 위해 간접적인 정보를 제공해주기도 한다.
  • 테스트 대역 중 테스트 대상으로부터 전달받은 정보를 검증할 수 있도록 설계된 것을 목 오브젝트하고 한다.

' Spring > 토비의 스프링 3.1' 카테고리의 다른 글

6.1 트랜잭션 코드의 분리  (0) 2019.02.07
6장. AOP  (0) 2019.02.07
5.4 메일 서비스 추상화  (0) 2019.02.07
5.3 서비스 추상화와 단일 책임 원칙  (0) 2019.02.06
5.2 트랜잭션 서비스 추상화  (0) 2019.02.06