1. 단일 책임 원칙(Single Responsibility Prinsiple, SRP)

컴포넌트를 변경하는 이유는 오직 하나뿐이어야 한다.

컴포넌트를 변경할 이유가 하나 -> 컴포넌트는 한가지 일만 함

컴포넌트를 변경할 이유가 하나뿐이면 다른 이유로 소프트웨어를 변경하더라도 이 컴포넌트에 대해 신경쓰지 않아도 됨.

2. 의존성 역전 원칙(Dependency Inversion Principle, DIP)

코드 상의 어떤 의존성이든 그 방향을 바꿀 수(역전시킬 수) 있다.

양쪽 코드를 모두 제어할 수 있을 때만 의존성 역전 가능

(서드파티 라이브러리에 의존성이 있으면 라이브러리를 제어할 수 없기 때문에 의존성 역전 불가)

  1. 엔티티는 도메인 객체를 표현하고 도메인 코드가 이 엔티티들의 상태를 변경하기 때문에 엔티티를 도메인 계층으로 올림

  2. 리포지토리가 도메인 계층의 엔티티에 의존하기 때문에 순환 의존성(circular dependency) 생김

  3. 도메인 계층에 리포지토리 인터페이스를 만들고, 실제 리포지토리는 영속성 계층에서 구현

3. 클린 아키텍처

계층 간의 모든 의존성이 안쪽으로 향해야 한다.

도메인 계층이 특정 프레임워크에 특화된 코드를 가질 수 없어 비즈니스 로직에만 집중할 수 있음.

도메인 계층이 외부 계층과 철저히 분리되어야 하므로 엔티티에 대한 모델을 각 계층에서 유지보수 해야함.

도메인 계층은 영속성 계층을 모르기 때문에 도메인 계층에서 사용한 엔티티를 영속성 계층에서 함께 사용 불가.
따라서 각 계층에서 엔티티를 만들어 변환하는 과정 필요.

4. 헥사고날 아키텍처

모든 의존성은 코어를 향함.

헥사고날 아키텍처를 계층으로 구성하면

  • 가장 바깥쪽 계층은 애플리케이션과 다른 시스템 간의 번역을 담당하는 어댑터
  • 포트와 유스케이스 구현체가 애플리케이션 계층 구성
  • 도메인 엔티티가 가장 마지막 계층

포트와 어댑터(port-and-adapters) 아키텍처라고도 불림.

코어와 어댑터 간 통신하기 위해 어플리케이션 코어가 포트 제공.

애플리케이션을 주도하는 어댑터(driving adapter)

포트가 코어에 있는 유스케이스 클래스 중 하나에 의해 구현되고 어댑터에 의해 호출됨

애플리케이션에 주도되는 어댑터(driven adapter)

포트가 어댑터에 의해 구현되고 코어에 의해 호출됨

profile
Backend Developer👩🏻‍💻

0개의 댓글

Powered by GraphCDN, the GraphQL CDN