계층화된 아키텍쳐

  • 가장 널리 사용되는 아키텍쳐 패턴 중 하나다.
  • 소프트웨어 시스템을 각각 고유한 책임이 있는 별개의 계층으로 나누고 구조적이고 조직적으로 설계하는 방법을 제시한다.

계층형 아키텍쳐의 레이어

  1. PresentationLayer
    1. 외부 시스템과 상호작용을 담당한다.
    2. 사용자 입력, 시각적 표현 및 사용자 인터페이스 구성 요소를 처리한다.
    3. 주로 정보를 제시하고 사용자 작업을 캡쳐하는 데 중점을 둔다.
  2. ApplicationLayer
    1. Presentation, domain 사이 중개자 역할
    2. 사용자의 작업의 실행을 조정하고 위임
    3. 이 계층은 사용자 입력을 의미 있는 명령 또는 쿼리로 변환하고 도메인 레이어에서 적절한 작업을 호출하는 역할을 한다.
  3. DomainLayer
    1. 핵심 비즈니스 로직을 나타내며, 도메인에 대한 지식을 캡슐화한다.
    2. 엔티티, 값 객체, 비즈니스 규칙 및 도메인별 로직이 포함된다.
    3. 기술에 구애 받지 않고 외부 종속성으로부터 독립적이어야 한다.
  4. PersistenceLayer
    1. 지속성 레이어는 관계형 데이터베이스, 문서 저장소 또는 기타 데이터 저장소와 같은 지속성 메커니즘에서 데이터를 저장하고 검색하는 역할을 담당
  5. InfraLayer
    1. 다른 계층을 지원하기 위한 기술적 기능을 제공
    2. 데이터 스토리지, 외부 서비스 및 통신 프로토콜을 처리한다.

이점

  1. 모듈화 :
    • 관심사를 계층으로 명확하게 분리
    • 시스템이 더욱 모듈화되는 효과가 생기고 더욱 이해하기 쉬워진다.
    • 독립적으로 각 계층을 개발, 테스트 및 유지 관리할 수 있어 전체 시스템 확장성과 유지 보수 용이
  2. 도메인 로직의 분리
    • 외부 종속성으로부터 분리되어 도메인별 로직과 비즈니스 규칙에만 집중할 수 있다.
    • 도메인 코드의 테스트 가능성과 재사용성을 향상시킨다.
  3. 유연성
    • 계층 간의 인터페이스가 그대로 유지되는 한 다른 계층에 영향을 주지 않고 한 계층을 변경할 수 있다.
  4. 기술적 세부 사항의 추상화
    • 하위 레이어는 시스템의 기술적 측면을 처리하여 상위 레이어에서 복잡성을 추상화한다.

가이드라인

계층 간 커뮤니케이션

  • 레이어 간의 커뮤니케이션은 항상 상위 레이어에서 하위 레이어로 단일 방향으로 이뤄져야 한다.
  • 관심사를 적절히 분리하고 하위 계층에서 상위 계층으로 종속성을 도입하는 것을 방지할 수 있다.

    관심사 분리

  • 레이어는 명확하고 뚜렷한 책임이 있어야 한다.
  • 비즈니스 로직은 도메인 레이어 내에 유지해야 한다.

    종속성 흐름

  • 상위에서 하위로 흐르도록 구성하는 것이 좋다.
  • 상위가 하위에 종속되어서는 안된다.
  • 의존성 주입 또는 서비스 로케이터 패턴을 사용하여 계층 간의 의존성을 관리하는 것이 좋다.