2장 분해전략
목차
```2장 분해 전략 2.1 마이크로서비스 아키텍처란 무엇인가?
2.1.1 소프트웨어 아키텍처의 정의와 중요성
2.1.2 아키텍처 스타일 개요
2.1.3 마이크로서비스 아키텍처는 일종의 아키텍처 스타일이다
2.2 마이크로서비스 아키텍처 정의
2.2.1 시스템 작업 식별
2.2.2 서비스 정의: 비즈니스 능력 패턴별 분해
2.2.3 서비스 정의: 하위 도메인 패턴별 분해
2.2.4 분해 지침
2.2.5 서비스 분해의 장애물
2.2.6 서비스 API 정의
2.3 마치며
```
정리 전략?
- 전부 정리는 NO
- 핵심중에서 꼭 적고 가야겠다 싶은 것만!
- 나의 생각을 섞어서 적을것..!
- 떠오르는 것 먼저 간단하게..!
내용 정리(2장 분해 전략)
2.1 마이크로서비스 아키텍처란 무엇인가?
2.1.1 소프트웨어 아키텍처의 정의와 중요성
- 서비스가 기술보다는 비즈니스 관심사 중심으로 구성된다는 게 중요ㅣ
- 중요한 성질 : 관리성, 테스트성, 배포성.
- 4+1 뷰모델 : 논리 뷰, 구현 뷰, 프로세스 뷰, 배포 뷰
2.1.2 아키텍처 스타일 개요
- 마이크로 서비스 아키텍처는 느슨하게 결합된 여러 서비스로 구성하는 아키텍쳐 스타일.
2.1.3 마이크로서비스 아키텍처는 일종의 아키텍처 스타일이다
2.2 마이크로서비스 아키텍처 정의
2.2.1 [1]시스템 작업 식별
- 고수준 도메인 모델 생성
- 시스템 작업 정의
- 커맨드와 쿼리로 나눔.
2.2.2 [2]서비스 정의: 비즈니스 능력 패턴별 분해
- 비즈니스 능력 식별
- 비즈니스 능력을 여러 서비스로
2.2.3 서비스 정의: 하위 도메인 패턴별 분해
2.2.4 분해 지침
- 단일 책임 원칙
- 공동 폐쇄 원칙
- 동일한 사유로 변겨되는 컴포넌트를 모두 같은 서비스로 묶는 것도 방법.(Common Closure Principle. 패키키지의 클래스들은 동일한 유형의 변경에 대해 닫혀 있어야 한다. 패키지에 영향을 주는 변경은 그 패키지에 속한 모든 클래스에 영향을 끼친다.)
2.2.5 서비스 분해의 장애물
네트워크 지연
서비스가 여러개로 나뉘게 되면 각 서비스간에 전송되는 데이터 횟수가 증가하게 되어 지연이 발생할 수 있다. 이는 여러 데이터를 한번에 가져오거나, 함수호출로 대체 하는 등으로 지연 시간을 줄일 수 있다.
동기 IPC 로 인한 가용성 저하
여러개의 서비스중 하나라도 장애 일 경우, 전체적인 요청이 처리 되지 않을 수 있다. 이는 비동기 메시징으로 가용성을 높일 수 있다.
여러 서비스에 걸친 데이터 일관성 유지
서비스별로 데이터가 나누어져 있기때문에 하나의 트랜잭션에서 여러개의 데이터베이스에 업데이트를 수행해야 해야 한다. 이때 업데이트는 원자성을 보장해야 한다. 이는 2 Phase Commit (2PC) 이나 SAGA 등으로 처리 해야 한다. 최종적으로 일관성을 유지 해야 하는데, 이는 분해의 걸림돌중 하나이다.
일관된 데이터 뷰 확보
모놀리틱 서비스는 하나의 어플리케이션에서 ACID(원자성, 일관성, 고립성, 지속성) 을 보장하기 때문에 일관된 데이터 뷰가 제공되지만, 마이크로서비스 아키텍처는 데이터 베이스가 나누어져 있기 때문에 전역 범위에서 제공하기는 힘들다.
만능 클래스는 분해의 걸림돌
대부분의 서비스들은 모든 속성(컬럼)을 가지는 단일 테이블들을 갖고 있는 경우가 많다. 이는 비지니스 로직을 서비스로 분리하는데 걸림돌이 된다. 이경우 DDD 를 적용해 자체 도메인 모델을 갖고 있는 개별 하위 도메인으로 나누어 해결한다. 출처: https://freeend.tistory.com/106 [FreeEnd:티스토리]
2.2.6 [3]서비스 API 정의
시스템 작업을 서비스로 배정
서비스 진입점이 어디인지 정의 해야 한다. 대부분의 시스템 작업은 서비스로 매핑 될수 있으나 아닐 수도 있다. 예를들어 배달원의 위치를 업데이트 하는 noteUpdatedLocation() 은 배달원과 관련있기 떄문에 배달원 서비스에 있어야 할것으로 보이나, 달리 생각해보면 배달원의 위치가 필요한 주체는 배달 서비스 이기때문이다. 어떤 작업이 제공하는 정보가 필요한 서비스에 대정하는게 더 합리적이다.
서비스간 협동 지원에 필요한 API 확정
작업 대부분은 여러 서비스에 나뉘어져 있으며, 요청을 처리하는데 여러 서비스를 각각 호출 해야 한다. 이렇게 분리되어 있는 각각의 시스템 작업을 면밀히 분석해 어떻게 협동해야 할지 결정해야 한다. 출처: https://freeend.tistory.com/106 [FreeEnd:티스토리]
2.3 마치며
생각 정리.
- 전반적으로 이론 내용.
- 아하 그렇구나 넘어간 다음에 나중에 다시 보는 방법이 좋을듯.