본문 바로가기

:: System Log

[MSA] 도메인 주도로 설계하는 마이크로서비스 개발 - 3장 (1)

> 이전글 보기

2022.01.14 - [:: System Log] - [MSA] 도메인 주도로 설계하는 마이크로서비스 개발 - 2장

 

[MSA] 도메인 주도로 설계하는 마이크로서비스 개발 - 2장

* 이전글 읽기 : 2022.01.03 - [:: System Log] - [MSA] 도메인 주도로 설계하는 마이크로서비스 개발 - 1장 [MSA] 도메인 주도로 설계하는 마이크로서비스 개발 - 1장 회사에서 신규로 MSA 개념을 도입하여 시

everythingiok.tistory.com

 


3장. 마이크로서비스 애플리케이션 아키텍처 

3.1 비즈니스 로직은 어디에? - 관심사의 분리 

3.1.1 데이터베이스 중심 아키텍처의 문제점

3.2 헥사고날 아키텍처와 클린 아키텍처 

3.2.1 레이어드 아키텍처 

3.2.2 헥사고날 아키텍처 

3.2.3 클린 아키텍처 

 

3.3 마이크로서비스의 내부 구조 정의 

3.3.1 바람직한 마이크로서비스의 내부 아키텍처 : 클린 마이크로서비스 

3.3.2 내부 영역 - 업무 규칙 

 트랜잭션 스크립트 패턴

 도메인 모델 패턴

 도메인 주도 설계의 애그리거트 패턴

3.3.3 외부 영역 - 세부사항

 API 퍼블리싱 어댑터

 API 프락시 어댑터

 저장소 처리 어댑터 

 도메인 이벤트 발행 어댑터 

 도메인 이벤트 핸들러 

 

3.4 정리

 


3.1 비즈니스 로직은 어디에? - 관심사의 분리

 - 비즈니스 로직 : 업무 규칙(Rule), 흐름(Flow), 개념(Comcept) 

 - 개발자의 역할은 문제 영역의 비즈니스 로직을 분석 및 이해하고 프로그래밍 언어라는 도구로 잘 표현하는 것 

 - 애플리케이션의 유지보수성이 높다는 의미 : 특정 개인에 의존하기 보다는 어느 누구라도 손쉽게 애플리케이션을 이해하고 유지보수할 수 있음을 의미 

 

3.1.1 데이터베이스 중심 아키텍처의 문제점

 - 데이터베이스 중심 아키텍처 : 특정 관계형 데이터베이스에 의존한 데이터 모델링을 수행한 다음 이 물리 테이블 모델을 중심에 두고 애플리케이션을 구현하기 위한 사고를 하는 방식 

데이터베이스 중심 아키텍처

 - 이 같은 구조에서는 대부분의 성능을 데이터베이스에 의존

 - 클라우드의 풍부한 자원 환경에서는 애플리케이션 자체의 성능보다는 애플리케이션의 확장성과 유연함이 더 중요

 

3.2 헥사고날 아키텍처와 클린 아키텍처 

3.2.1 레이어드 아키텍처 (계층형 아키텍처)

전통적인 3계층 아키텍처

- 레이어 간 응집성을 높이고 의존도를 낮추기 위한 레이어드 아키텍처의 규칙 : 

레이어드 아키텍쳐 규칙

  • 상위 계층이 하위 계층을 호출하는 단방향성을 유지한다
  • 상위 계층은 하위의 여러 계층을 모두 알 필요 없이 바로 밑의 근접 계층만 활용한다. 
  • 상위 계층이 하위 계층에 영향을 받지 않게 구성해야 한다
  • 하위 계층은 자신을 사용하는 상위 계층을 알지 못하게 구성해야 한다
  • 계층 간의 호출은 인터페이스를 통해 호출하는 것이 바람직하다 (구현 클래스에 직접 의존하지 않음으로써 약한 결합을 유지해야 한다) 

  

3.2.2 헥사고날 아키텍처 

- '포트 앤드어댑터 아키텍처' 라고도 한다. 
- 내부영역 : 고수준의 비즈니스 로직을 표현하는 영역. 순수한 비즈니스 로직을 표현하는 기술 독립적 영역. 외부 영역과 연계되는 포트
- 외부영역 : 인터페이스 처리를 담당하는 저수준의 영역. 
    인바운드 어댑터 : 외부에서 들어오는 요청을 처리하는 부분 
    아웃바운드 어댑터 : 비즈니스 로직에 의해 호출되어 외부와 연계되는 어댑터
- 고수준의 내부 영역이 외부의 구체 어댑터에 전혀 의존하지 않게 한다 

 

3.2.3 클린 아키텍처 

- 엔터티 : 업무규칙 (사업적으로 수익을 얻거나 비용을 줄일 수 있는 규칙 또는 절차)에 대한 객체 
- 유스케이스 : 애플리케이션에 특화된 업무 규칙을 표현하며, 엔티티 내부의 핵심 업무 규칙을 호출하며 시스템을 사용하는 흐름을 담는다  
- 세부사항 : 유스케이스를 감싸고 있는 나머지 모든 영역. 
- 명확한 결합의 분리는 테스트 용이성 및 개발 독립성, 배포 독립성을 강화할 수 있다 

 

※ 본문 내 삽입된 이미지 출처 : https://engineering-skcc.github.io/