도메인 주도 설계 첫걸음 - 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.