Home 도메인 주도 설계 첫걸음 - 08장 아키텍처 패턴
Post
Cancel

도메인 주도 설계 첫걸음 - 08장 아키텍처 패턴

범위

  • [Part 2] 전술적 설계 - 08장: 아키텍처 패턴

개념 정리

책에서 기억하고 싶은 내용

비즈니스 로직과 아키텍처 패턴

  • 비즈니스 로직은 소프트웨어에서 가장 중요한 요소다.
  • 관심사를 구현할 때 엄격하게 구성하지 않으면 코드베이스의 변경이 어려워진다.
    • 비즈니스 로직이 변경될 때 코드베이스의 어떤 부분이 영향을 받는지 분명하지 않을 수 있다.
    • 겉으로 보기에 관련 없는 부분에 기대치 않게 변경이 영향을 미칠 수도 있다.
    • 변경해야 할 부분을 놓치기도 쉽다.
    • 이 모든 문제는 코드베이스의 유지보수 비용을 크게 증가시킨다.
  • 아키텍처 패턴은 코드베이스의 다양한 측면에 대한 구성 원칙을 도입하고 이들 사이의 명확한 경계를 제시한다.
  • 코드베이스를 조직하는 적절한 방법 혹은 올바른 아키텍처 패턴을 선택하는 것은 단기적으로는 비즈니스 로직 구현을 지원하고, 장기적으로 유지보수를 돕기 위해 매우 중요하다.

계층형 아키텍처

  • 코드 베이스를 수평 계층으로 조직하고, 각 계층은 사용자와 상호작용, 비즈니스 로직의 구현, 그리고 데이터의 저장과 같은 기술적 관심사 중 하나를 다룬다.

프레젠테이션 계층

  • 사용자와 상호작용을 하기 위한 프로그램의 사용자 인터페이스를 규현한다.

비즈니스 로직 계층

  • 프로그램의 비즈니스 로직을 구현하고 묶는 것을 담당한다.
  • 이 곳에 비즈니스 의사결정을 구현한다.

데이터 접근 계층

  • 영속성 메커니증에 접근할 수 있게 해준다.

계층 간 커뮤니케이션

  • 각 계층은 바로 아래 계층에만 의존한다.
  • 이렇게 하면 구현 관심사의 결합성을 낮추고 계층 간에 공유할 지식을 줄인다.

변종(variation)

  • 서비스 계층을 추가
  • 서비스 계층을 명시적으로 갖추면 몇 가지 장점이 생긴다.
    • 동일한 서비스 계층을 여러 퍼블릭 인터체이스에서 재사용할 수 있다.
    • 모든 관련 메서드를 한 곳에 모으면 모듈화가 개선된다.
    • 프리젠테이션 계층과 비즈니스 로직 계층의 결합도를 낮춘다.
    • 비즈니스 기능을 테스트하기 쉬워진다.

계층형 아키텍처를 사용하는 경우

  • 트랜젝션 스크립트 또는 액티브 레코드 패턴을 사용하여 구현된 시스템에 계층형 아키텍처 패턴이 적합하다.

포트와 어댑터

  • 계층현 아키텍처의 단점을 해결하고 좀 더 복잡한 비즈니스 로직을 구현하는 데 적합하다.

용어

의존성 역전 원칙

인프라 구성요소의 연동

  • 포트와 어댑터 아키텍처의 핵심 목적은 인프라스트럭처 구성요소로부터 시스템의 비즈니스 로직을 분리하는 것이다.
  • 인프라스트럭처 구성요소를 직접 참조하고 호출하는 대신, 비즈니스 로직 계층은 인프라스트럭처 계층이 구현해야 할 ‘포트’를 정의한다. 인프라스트럭처 계층은 ‘어댑처’를 구현한다.

변형

포트와 어댑터를 사용하는 경우

  • 모든 기술적 관심사로부터 비즈니스 로직을 분리하는 것이 포트와 어댑터 아키텍처의 목적이므로 이 아키텍처는 도메인 모델 패턴을 사용하여 구현한 비즈니스 로직에 매우 적합하다.

CQRS

  • CQRS(command-query responsibility segregation) 패턴은 포트와 어댑터와 동일한 비즈니스 로직과 인프라스트럭처 관심사에 기반한다.

폴리글랏 모델링

  • 다양한 데이터 관련 요구사항을 구현하기 위해 여러 데이터베이스를 사용하는 것
  • 커맨드 실행 모델
    • 상태를 수정하는 오퍼레이션(시스템 커맨드)을 전담으로 수행하는 단일 모델
    • 비즈니스 로직을 구현하고 구칙을 검사하며 불변성을 강화하는 데 사용된다.
    • 강혁한 일관성을 데이터를 표현하는 유일한 모델이다.
    • 비즈니스 엔티티의 일관적 상태를 읽을 수 있어야 하고 갱신할 때 낙관적 동시성을 지원해야 한다.
  • 일기 모델(프로젝션)
    • 캐시에서 언제든 다시 추출할 수 있는 프로젝션
    • 견고한 데이터베이스, 일반 파일, 또는 인메모리 캐시에 위치할 수 있다.
    • 새로운 프로젝션을 시스템에 확장하는 것도 가능하다.
    • 읽기 전용이며, 시스템의 어떠한 오퍼레이션도 읽기 모델의 데이터를 직접 수정할 수 없다.

읽기 모델의 프로젝션

도전과제

모델 분리

  • CQRS 아키텍처에서 시스템 모델이 담당하는 책임은 그 타입에 따라 분리된다.

CQRS를 사용해야 하는 경우

  • CQRS 채넡은 여러 모델, 궁극적으로 다양한 종류의 데이터베이스에 저장된 동일한 데이터와 작동할 필요가 있는 애플리케이션에 유용하다.

범위

결론

  • 계층형 아키텍처
    • 기술적 관심하에 따라 코드베이스를 분해한다.
    • 비지니스 로직과 데이터 접근 구현을 결합시킨다.
    • 액티브 레코드 기반 시스템에 적합하다.
  • 포트와 어댑터 아키텍처
    • 관계를 역전 시킨다: 비즈니스 로직을 중심에 두고 모든 인프라스트럭처와 의존성을 분리한다.
    • 도메인 모델 패턴을 구현하는 비즈니스 로직에 적합하다.
  • CQRS 패턴
    • 여러 모델에서 동일한 데이터를 표현한다.
    • 이벤트 소싱 도메인 모델에 기반한 시스템에 적합하지만 다양한 영속 모델을 사용할 필요가 있는 어떤 시스템에도 사용할 수 있다.
This post is licensed under CC BY 4.0 by the author.

JAVA의 동시성 프로그래밍

도메인 주도 설계 첫걸음 - 09장 커뮤니케이션 패턴