DDD의 계층화 아키텍쳐(Layered architecture)

Hyunjun Jang·2022년 1월 9일
2

layered architecture란?

layered architecture란 말 그대로 계층이 나뉘어져 있는 아키텍쳐를 뜻한다. layered architecture의 주된 목표는 어플리케이션을 여러 개의 굵직한 횡단 관심사(cross-cutting concern)로 분리해, 수평 계층 으로 구성되며 각각의 layer는 하나의 관심사에만 집중할 수 있도록 하는 것이다. 각각의 layer에 대한 명칭은 출처마다 조금씩 다르지만 근본적인 역할과 목적은 같으며, 대표적으로 DDD(Domain Driven Design)에서는 아래와 같은 구조의 layered architecture를 소개하고 있다.

계층별 설명

계층 구조는 위에 있는 계층에서는 아래 있는 계층에 접근이 가능하지만 아래에서 위로는 불가능 한것을 기본으로 하고 있다.

  • 프레젠테이션 계층 (사용자 인터페이스)
    사용자의 요청에 대해 해석하고 응답하는 일을 책임지는 계층이다.
    사용자에게 UI를 제공하거나 클라이언트에 응답을 다시 보내는 역할을 하는 모든 클래스가 포함된다.
    백엔드 어플리케이션의 경우 presentation layer는 아래와 같은 역할을 한다

    • cilent로부터 request를 받고 response를 return하는 API 정의
    • api route별 로깅, 보안 등의 전처리
  • 응용 프로그램 계층
    소프트웨어가 비즈니스 로직을 정의하고 정상적으로 수행될 수 있도록 도메인 계층과 인프라스트럭쳐 계층을 연결해주는 역할을 하는 계층이다. 이 계층은 많은 정보를 가지고 있지 않게 유지하는 것이 중요하다. 실질적인 데이터의 상태 변화 등의 처리는 도메인 계층에서 진행할 수 있도록 위임 하는것이 중요하다. 응용 계층에서 진행하는 일은 일반적으로 transaction 관리, DTO 변환, 그리고 모듈간의 연계 이렇게 3가지를 들 수 있다.

  • 도메인 계층 (모델)
    비즈니스 규칙, 정보에 대한 실질적인 도메인에 대한 정보를 가지고 있으며 이 모든것을 책임지는 계층이다. 이 계층에서는 업무 상황을 반영하여 상태를 제어하는 역할에 집중하는 계층이다.

  • 인프라스트럭처 계층(영속성 계층)
    상위 계층을 지원하는 일반화된 기술적 기능을 제공하는 계층이다. 일반적으로 외부 시스템을 호출한다거나 하는 역할을 담당한다. 해당 계층에서 얻어온 정보를 응용계층 또는 도메인 계층에 전달하는 것을 주 역할로 담당한다. (Repository)

layered architecture의 장점과 단점

  • 장점

    • 각 레이어를 loosely coupling 된 형태로 구축하면서, 각자 자신의 관심사에만 집중할 수 있음
    • 특히 핵심 비즈니스 로직을 순수하게 유지함으로써 유지보수와 확장성 측면에서 이득을 얻을 수 있음
    • 각 레이어에 서로 다른 추상화 수준을 가진 상태와 행동을 위치시킴으로써 코드 재사용성을 높일 수 있음
  • 단점

    • 서비스가 커질수록 복잡도가 증가하여 확장성이 떨어짐
    • 레이어로 분리된 관심사 외에 다른 관심사가 발견된 경우 패키지 분리 및 코드 배치가 어려움.

layered architecture를 사용해야 하는 경우

layered architecture는 작고 단순하고 확장성보다는 일관성을 가져가는 것이 목표인 애플리케이션이나 웹사이트에 적합 한것 같다. 또한 단순성 및 구현 용이성으로 인해 애플리케이션 시작점으로 사용하기에 좋다.

Reference

https://www.wutsi.com/read/258/implementing-rest-api-using-the-layered-architecture
https://sabarada.tistory.com/159
https://riiidtechblog.medium.com/gradle%EA%B3%BC-%ED%95%A8%EA%BB%98%ED%95%98%EB%8A%94-backend-layered-architecture-97117b344ba8
https://dzone.com/articles/layered-architecture-is-good
https://garywoodfine.com/why-i-dont-like-layered-architecture-for-microservices/https://happy-coding-day.tistory.com/189
https://msolo021015.medium.com/layered-architecture-deep-dive-c0a5f5a9aa37

profile
Let's grow together😊

0개의 댓글