2장. 의존성 역전하기
박권규
SOLID 원칙 중 S와 D, 즉 단일 책임 원칙과 의존 역전 원칙에 대해 다루고 있다. 단일 책임 원칙은 한 클래스가 하나의 역할을 수행한다기보다는 한 클래스가 변경될 때는 오직 한 가지 이유만 해당되어야 한다는 것이다. 이는 결국 한 클래스가 다른 클래스를 의존할 때 해당 클래스의 변화에 대한 영향을 최소한으로 받아야 하며 이를 위해서는 DIP, 즉 의존 역전 원칙을 적용해야한다는 결론에 이르고 있다.
이를 위해서 도서에서는 육각형 아키텍처라는 개념을 제안하고 있는데 이는 각 계층(애플리케이션 코어-service, 어댑터-repository, controller 등)마다 별도의 도메인 모델을 두고 인터페이스를 통해 계층 간 의존성을 최소화하고 있다. 거기에 클라이언트 → 컨트롤러 → 유스케이스 → 엔티티라는 단방향 의존관계를 강제하여 외부 의존성에 영향을 받는 일이 없도록 하는 흥미로운 아키텍처를 제안하고 있다.
말로만 들어보면 지금까지 해왔던 controller, service, repository와 동일한 게 아닌가 싶지만 JPA 엔티티 하나로만 다루는게 아니라 각 계층마다 도메인 모델을 둔다던지, 인터페이스를 통해 느슨하게 의존한다던지 하는 새로운 부분이 있다.