TIL

2장 분해 전략

2.1 마이크로서비스 아키텍처란 무엇인가?

2.1.1 소프트웨어 아키텍처의 정의와 중요성

소프트웨어 아키텍처의 정의

컴퓨팅 시스템의 소프트웨어 아키텍처는 소프트웨어 엘리먼트와 그들 간의 관계, 그리고 이 둘의 속성으로 구성된 시스템을 추론하는 데 필요한 구조의 집합이다.

소프트웨어 아키텍처 4+1 뷰 모델

아키텍처의 중요성

2.1.2 아키텍처 스타일 개요

계층화 아키텍처 스타일

육각형 아키텍처 스타일

2.1.3 마이크로서비스 아키텍처는 일종의 아키텍처 스타일이다

서비스란 무엇인가

느슨한 결합

공유 라이브러리 역할

서비스 규모는 별로 중요하지 않다

2.2 마이크로서비스 아키텍처 정의

2.2.1 시스템 작업 식별

고수준 도메인 모델 생성

<주문하기 스토리>

전체(Given)
    소비자가 있다.
    음식점이 있다.
    음식점은 소비자의 주소로 제시간에 음식을 배달할 수 있다.
    주문 총액이 음식점 최소 주문량 조건에 부합한다.

조건(When)
    소비자가 음식점에 음식을 주문한다.

결과(Then)
    소비자 신용카드가 승인된다.
    주문이 PENDING_ACCEPTANCE 상태로 생성된다.
    생성된 주문이 소비자와 연관된다.
    생성된 주문이 음식점과 연관된다.

시스템 작업 정의

액터 스토리 커맨드
Consumer 주문 생성 createOrder()
Restaurant 주문 접수 acceptOrder()
Courier 배달 픽업 noteDeliveryPickedUp()
작업 createOrder(소비자 ID, 결제 수단, 배달 주소, 배달 시각, 음식저 ID, 주문 품목)
반환 값 orderId, …
선행 조건 소비자가 존재하고 주문할 수 있다, 주문 품목은 음식점 메뉴 항목에 들어 있다, 배달 주소/시각은 음식점에서 서비스할 수 있다.
후행 조건 소비자 신용카드는 주문 금액만큼 승인 처리되었다, 주문은 PENDING_ACCEPTANCE 상태로 생성되었다.

2.2.2 서비스 정의: 비즈니스 능력 패턴별 분해

비즈니스 능력 식별

비즈니스 능력을 여러 서비스로

2.2.3 서비스 정의: 하위 도메인 패턴별 분해

2.2.4 분해 지침

단일 책임 원칙

클래스는 오직 하나의 변경 사유를 가져야 한다. - 로버트 C. 마틴

공동 폐쇄 원칙

패키지 클래스들은 동일한 유형의 변경에 대해 닫혀 있어야 한다. 패키지에 영향을 주는 변경은 그 패키지에 속한 모든 클래스에 영향을 끼친다. - 로버트 C. 마틴

2.2.6 서비스 API 정의