본문 바로가기

Back-End/토비의 스프링3

5-3장. 서비스 추상화와 단일 책임 원칙

서비스 추상화

스프링의 트랜잭션 서비스 추상화 기법을 이용해 다양한 트랜잭션 기술을 일관된 방식으로 제어할 수 있게 됐다.

수직, 수평 계층 구조와 의존관계

추상화 기법을 통해 특정 기술환경에 종속되지 않는 코드르 만들었다.

UserDao나 UserService는 각각 담당하는 코드의 기능적인 관심에 따라 분리되었다. 같은 애플리케이션 로직을 담은 코드지만 내용에 따라 분리했다. 같은 계층에서 수평적인 분리라고 할 수 잇다.


트랜잭션 추상화는 이와 좀 다르다. 애플리케이션 코드와 그 하위에서 동작하는 로우레벨의 트랜잭션 기술이라는 다른 계층의 특성을 갖는 코드를 분리한 것이다.


  • UserService : 사용자 관리에 대한 비즈니스 로직
  • UserDao : 데이터를 어떻게 가져오고 등록할 것인가에 대한 데이터 엑세스 로직
    • DataSource 인터페이스와 DI를 통해 결합도를 낮춤

 서로 영향을 주지 않고 자유롭게 확장할 수 있는 구조를 만들 수 있는 데는 스프링의 DI가 있기 때문이다. 
DI 가치는 관심, 책임, 성격이 다른 코드를 깔끔하게 분리하는데 있다.


단일 책임 원칙

하나의 모듈은 한 가지 책임을 가지고 있어야 하며, 하나의 모듈을 수정해야 하는 이유는 한 가지여야 한다.

단일 책임 원칙의 장점

변경이 필요할 때 수정 대상이 명확해진다.

앱이 커지고 운영중인 경우, 수정대상이 명확하게 분리되어 있지 않다면 많은 시간이 필요할 뿐 아니라 실수가 일어날 수도 있다

결정적으로 테스트하기가 편해진다..