01.Micro Service
Micro Service
Monolith System
애플리케이션이
한 덩어리
로 구성단일 프로세스
실행한꺼번에 수정, 배포 필요 -> 서비스 중단
하나가 실패하면 모두 실패
모노리스를 클라우드 인프라에서 활용 시 스케일 아웃 대상은
모노리스 전체
확장성, 탄력성 보장이 가능하나 비용이 비효율적
Micro Service
애플리케이션이
여러 개의 서비스 조각
으로 구성서비스는 각기
독립적인 기능
을 제공서비스가 사용하는 저장소는
다른 서비스와 완벽히 격리
독립적으로 수정, 별도 배포, 확장 가능
하나의 서비스 실패는 전체 실패가 아닌
부분적인 실패
를 의미
...
마이크로서비스의 정의
Public Interface
,데이터 캡슐화
확장 시, 특정 기능별
독립적으로 확장
가능특정 서비스의 변경 시
해당 서비스만
빌드, 배포독립적
으로 서로 다른 언어로 개발 가능
여러 개의 작은
서비스 집합으
로 개발하는 접근 방법각 서비스는
개별 프로세스
에서 실행HTTP 자원
API
같은 가벼운 수단을 사용하여통신
서비스는
Biz 기능 단위
로 구성중앙 집중적인 관리 최소화
각 서비스는 서로 다른 언어, 데이터, 저장 기술 사용
참고. SOA(Service-Oriented Architecture)는 저장소를 공유하는 형태
아키텍처 정의
Outer Architecture 정의
IaaS
(Infrastructure as a Service): 인터넷을 통해 확장성이 뛰어난 컴퓨팅 리소스를 서비스로서 제공하는 주문형 가용성 서비스ex. AWS EC2, AWS S3
PaaS
(Platform as a Service): 클라우드 컴퓨팅 서비스 모델로서 앱을 개발, 배포, 실행, 관리할 수 있는 유연하고 확장 가능한 클라우드 플랫폼을 제공ex. AWS Lambda
CaaS
(Containers as a Service): 컨테이너를 사용하여 애플리케이션을 개발하고 배포하는 데 필요한 모든 하드웨어 및 소프트웨어 리소스를 제공하고 관리ex. AWS ECS, EKS
Platform 구성요소 , MSA 패턴
라우팅, 로드 밸런싱, 인증/인가, 로깅, 트레이싱, 모니터링
DevOps Infra 정의
형상관리, 빌드, 배포(CI/CD)
.
Inner Architecture 정의
Front End
기술 stack 정의
내부 구조 정의
Back End
기술 stack, 프레임워크
내부 구조 정의
통신
서비스 간
레거시 연계
.
설계와 구현
시스템 복잡성으로
로컬 복잡성
과글로벌 복잡성
이 있는데, 너무 많지도 적지도 않는 적절한 수준으로 분리가 필요하다.로컬 복잡성: 각각의 개별 마이크로서비스의 복잡성
글로벌 복잡성: 전체 시스템의 복잡성, 서비스 간의 상호작용과 의존성
설계
REST API
REST 구성
REST(Representational State Transfer): 자원의 정보를 주고 받는 구조
HTTP 프로토콜과 JSON 포맷을 사용한 구조
자원
(Resource) : URI로 표현 (http://service/apis)행위
(Verb): HTTP Method (POST, GET, PUT, DELETE)표현
(Representations): HTTP POST, http://service/apis{"apis":{"name":"sample"}}
자원
간결하고 직관적인 기준 URL 유지
자원(Resource) 별로 두 가지 형식의 기준 URL 사용
GET /dogs (목록 조회)
GET /dogs/1 (1번 개체 조회)
POST /dogs (개체 생성)
PUT /dogs/1 (1번 개체 수정)
DELETE /dogs/1 (1번 개체 삭제)
동사 보다는 복수 명사 사용
권장 방법: GET /dogs, POST /dogs/{puppy}/owner/{terry}
비권장하는 방법: /getDogs, /setDogs
행위
POST: 리소스 생성
GET: 리소스 조회
PUT: 리소스 수정
DELETE: 리소스 삭제
HTTP 상태 코드
200-level: 성공
400-level: 잘못된 요청
500-level: 서버 에러
...
REST API 디자인 가이드
REST API 설계는 아키텍처 스타일이지 표준은 아니므로 유연하게 적용
API 목표는 개발자의 생산성과 성공을 극대화 (실용주의)
멱등성(Idempotent)
반복적으로 호출하더라도 상태가 계속 유지되고, 상태의 변화가 없는 것
생성 요청의 POST는 멱등성을 따르지 않음
GET, DELETE는 멱등성을 따르게 설계 가능
Vesioning
/v1/products
/v2/products
EventStorming
UML Tool: https://lucid.co/
EventStorming Tool: https://miro.com/
이벤트 스토밍 진행 순서
요구사항 분석
도메인 이벤트, 핫스팟 도출
커맨드 및 외부시스템 도출
어그리거트 도출
바운디드 컨텍스트 식별
컨텍스트 매핑 정의
업무 흐름 예시
사내 도서 대여 시스템
이벤트 스토밍 결과 예시
노란섹: 어그리거트
파란색: 커맨드
주황색: 도메인 이벤트
컨텍스트 매핑 결과 예시
도메인 모델링을 위한 이벤트 스토밍 결과 예시
이벤트 스토밍을 통해 도출된
어그리거트가 도메인 모델 요소
커맨드가 컨트롤러 역할
도메인 이벤트는 도메인 모델에 포함
Domain Modeling
대여 도메인 모델 예시
회원 도메인 모델 예시
도서 도메인 모델 예시
BEST 도서 도메인 모델 예시
Heuristics
경험에 기반한 규칙
바운디드 컨텍스트
크기로 경계를 구분하지 않는다.
바운디드 컨텍스트를 식별할 때는 넓은 경계로 시작
나중에 도메인 지식이 쌓이게 되면 좀 더 작은 경계로 분리
비즈니스 로직 구현 패턴과 아키텍처 패턴 결정
간단한 비즈니스 로직(지원, 일반):
Transaction Script
,Active Record
단순한 자료 구조:
Transaction Script
복잡한 자료구조:
Active Record
복잡한 비즈니스 로직(핵심): Domain Model
금전 또는 통화의 트랜잭션 추적, 일관된 감사 로그, 동작에 따른 심층적 분석 요구 -> Event Sourcing
테스트 전략 결정
Last updated