SlideShare a Scribd company logo
MSA 전략 1: 마이크로서비스, 어떻게 디자인 할 것인가?
마이크로서비스 어떻게
디자인 할 것인가?
Philip Youngtae Kim
Pivotal
Agenda
• Domain Driven Design
• AppTx 방법론
• MSA 관련 테크놀로지
• MSA 고려사항
Domain Driven Design
Domain-Driven Design (DDD)
“코드를 변경하는 권한을 가진 모든 사
람들은 코드를 통해 모델을 표현할 수
있도록 교육을 받아야 한다. 모든 개발
자는 필수적으로 현업 담당자와 협의를
해야만 한다.”
- Eric Evans, Domain-Driven Design
“일반적으로 Bounded Context 당 한 팀이 구성이 됩니다. 한 팀은 여러 개의 Bounded Context를 관리할 수 있으나 여러 팀
이 한 개의 Bounded Context를 관리하는 것은 매우 어렵습니다.” - Evans
Bounded Context
Aggregates
AGGREGATES는 단일 단위로
처리되어야 하는 도메인 객체들의
묶음입니다.
● 트랜잭션 영역
● Aggregate Root를 통해서만
외부 연결
Vaughn Vernon, Domain-Driven Design Distilled
이벤트 기반 아키텍처
AppTx 방법론
Event
Storming
2. Event Storm
Thin
Slice
3. “Thin Slice(s)” 선택
OKRs1. 목표 설정 (OKR)
Tested
Code
6. 테스트 완료 및 동작하는 코드 생성
Snap-E
5. Snap-E
API DATA
PUB / SUB EXT
STORIES UI RISKS
SERVICE A
Patterns
7. 재사용 가능한 패턴
Boris
4. “Boris” - 아키텍처 표현
거창하게..
Where to?
Objectives
Key Results
+
-
증가
감소%
#
올바른
방향으로
가고 있나?
AppTx
70 - 80%
OKRs
OKR Monitoring
Monitor by Status and Confidence
Event Storming
Simple Tools
MSA 전략 1: 마이크로서비스, 어떻게 디자인 할 것인가?
할인
Event Storming (영화예매 샘플)
결제
극장
영화
선택
날짜
선택
상영관
선택
좌석
선택
결제
시작
신용카드
입력
결제
처리
결제
완료
예매
완료
!
도메인
이벤트
관련된 비즈니스 이벤트
“좌석 선택”, “티켓 예매 완료”
Aggregate
Brains
액션 수행 / 이벤트 생성
할인코드
입력
할인
처리
?
슬라이스
예매
시작
영화
결제
Bounded Context
예약
Boris Diagram
Service
마이크로서비스
결제 서비스
Queue
메세지 큐
“좌석 요청”
UI External
외부 시스템
연계
Service
Service Service
Service
Service
Ext
Ext
Q
Q
Q
UI
UI
Boris Diagram 샘플
Boris Diagram
아키텍처 표현 이벤트 플로우
마이크로서비스 API
시나리오 모델링 백로그 생성
SnapE
API
Data Source / Storage
UI Risks
Stories
Rabbit
MQ
REST / J
SON
CICS G
W
Other
Purchase H
istory
AdminUI
Dependent
On...
GET /purchases
GET /purchases
GET /purchases
SnapE 샘플
산출물 샘플
Event Storm
Boris
SnapE
Pivotal Tracker
© Copyright 2018 Pivotal Software, Inc. All rights reserved.
SnapE에서 도출된 요건은 Pivotal Tracker에서 관리
가 됩니다.
모든 팀원은 Tracker에 접근이 가능하고 현재 구현중
인 작업 상태를 실시간으로 확인이 가능합니다.
유저 스토리는 사용자에게 가치 있는 작업내용을 기반
으로 세분화된 형태로 만들어집니다.
유저 스토리는 높은 우선순위대로 위부터 차례대로 나
열됩니다.
사용자의 피드백을 자주 반영하기 위해 빈번한 주기로
릴리즈를 합니다.
릴리즈 파이프라인 자동화
코드 변경
빌드, 테스트, 배포 자
동화
바이너리 저장 스테이징 배포, UAT
운영 시스템 무중단 업
그레이드
샘플Tool
Gitlab ArtifactoryConcourse
Pivotal HA Services
(API기반)
가능한 여러 종류의 테스트
를 자동화하는 파이프라인을
빌드
자동화 된 프로세스
에 기반하여 다음 단
계의 환경으로 프로
모션
롤링 방식을 기반으로
무 중단 패치 및 업그
레이드
</>
12 factor를 반영하는 형
태의 코드
마이크로서비스 관련 패턴들
API Gateway, Edge
Server, BFFInverse Conway
Event Shunting
ACL, Context Mapping,
Strangler
Bridge, Router, Proxy,
Facade
Eventual Consistency,
Sagas, ESB >>
microservices
Cookbooks
재사용이 가능한 패턴은 문서화되어
다른 개발자들이 참조할 수 있게
합니다.
많은 기업들이 애플리케이션 변환을
위해 사용한 검증된 Playbooks와
Blueprints를 참조 합니다.
Selected
aggregate
2. To Boris
Selected
user story
3. To Snap-E
User story
breakdown
4. To story breakdown
5. To tested and
working code
Low-level design decisions:
1. Use Kafka as async interface for receiving job
orders
2. Define Job Order Event entity (data received)
3. Define REST API for job order lookup
...
App Nav + Modernization
Flow 1. From E.S.
6. To Cookbook of
Patterns
MSA 관련 테크놀로지
MSA 관련 기술
Microservice Architecture
1. API & API Gateway
2. Traffic / Routing / Discovery
3. Messaging
4. Data / Backing Services
5. Application Monitoring
6. Transactions
7. Security
8. Batch
9. Event Sourcing / CQRS
10. CI/CD
Platform Architecture
1. Platform Monitoring
2. Scaling
3. Patching & Upgrading
4. HA Architecture
5. DR Architecture
MSA 고려사항
국내 프로젝트 개요
● 국내 제조기업의 MES의 마이크로서비스 프로젝트
● Pivotal Application Transformation (AppTx) 서비스를 통한 서비스 도출 및
아키텍처 검증
Oracle DB
WebLogic
Schema
Application
Oracle DB
Pivotal Cloud Foundry
SchemaSchemaSchemaSchemaSchema
SchemaSchemaSchemaSchemaMicroservice
고려사항
● 마이크로서비스 자체가 목표가 아닌 얻고자 하는 Value에 포커스를 맞춰 MSA 디자인
● 지속적인 애플리케이션 업데이트와 배포를 감안
● 개발자들의 Learning Curve를 감안
○ 국내 개발자들은 DB SQL을 이용한 개발에 친숙 (예> Union, join, with, connected by)
○ 이벤트 기반 구현에 대한 개발자들의 생소함
● 마이크로서비스 운영에 대한 고민이 필요
○ DevOps와 플랫폼 필요
○ 마이크로서비스 분산환경에서의 트러블슈팅 노하우 필요
● 마이크로서비스 경험이 있는 마스터 필요
고맙습니다.
Philip Youngtae Kim
philipkim@pivotal.io

More Related Content

MSA 전략 1: 마이크로서비스, 어떻게 디자인 할 것인가?

  • 2. 마이크로서비스 어떻게 디자인 할 것인가? Philip Youngtae Kim Pivotal
  • 3. Agenda • Domain Driven Design • AppTx 방법론 • MSA 관련 테크놀로지 • MSA 고려사항
  • 5. Domain-Driven Design (DDD) “코드를 변경하는 권한을 가진 모든 사 람들은 코드를 통해 모델을 표현할 수 있도록 교육을 받아야 한다. 모든 개발 자는 필수적으로 현업 담당자와 협의를 해야만 한다.” - Eric Evans, Domain-Driven Design
  • 6. “일반적으로 Bounded Context 당 한 팀이 구성이 됩니다. 한 팀은 여러 개의 Bounded Context를 관리할 수 있으나 여러 팀 이 한 개의 Bounded Context를 관리하는 것은 매우 어렵습니다.” - Evans Bounded Context
  • 7. Aggregates AGGREGATES는 단일 단위로 처리되어야 하는 도메인 객체들의 묶음입니다. ● 트랜잭션 영역 ● Aggregate Root를 통해서만 외부 연결
  • 8. Vaughn Vernon, Domain-Driven Design Distilled 이벤트 기반 아키텍처
  • 10. Event Storming 2. Event Storm Thin Slice 3. “Thin Slice(s)” 선택 OKRs1. 목표 설정 (OKR) Tested Code 6. 테스트 완료 및 동작하는 코드 생성 Snap-E 5. Snap-E API DATA PUB / SUB EXT STORIES UI RISKS SERVICE A Patterns 7. 재사용 가능한 패턴 Boris 4. “Boris” - 아키텍처 표현
  • 12. OKR Monitoring Monitor by Status and Confidence
  • 15. 할인 Event Storming (영화예매 샘플) 결제 극장 영화 선택 날짜 선택 상영관 선택 좌석 선택 결제 시작 신용카드 입력 결제 처리 결제 완료 예매 완료 ! 도메인 이벤트 관련된 비즈니스 이벤트 “좌석 선택”, “티켓 예매 완료” Aggregate Brains 액션 수행 / 이벤트 생성 할인코드 입력 할인 처리 ? 슬라이스 예매 시작 영화 결제 Bounded Context 예약
  • 16. Boris Diagram Service 마이크로서비스 결제 서비스 Queue 메세지 큐 “좌석 요청” UI External 외부 시스템 연계 Service Service Service Service Service Ext Ext Q Q Q UI UI
  • 18. Boris Diagram 아키텍처 표현 이벤트 플로우 마이크로서비스 API 시나리오 모델링 백로그 생성
  • 19. SnapE API Data Source / Storage UI Risks Stories Rabbit MQ REST / J SON CICS G W Other Purchase H istory AdminUI Dependent On... GET /purchases GET /purchases GET /purchases
  • 22. Pivotal Tracker © Copyright 2018 Pivotal Software, Inc. All rights reserved. SnapE에서 도출된 요건은 Pivotal Tracker에서 관리 가 됩니다. 모든 팀원은 Tracker에 접근이 가능하고 현재 구현중 인 작업 상태를 실시간으로 확인이 가능합니다. 유저 스토리는 사용자에게 가치 있는 작업내용을 기반 으로 세분화된 형태로 만들어집니다. 유저 스토리는 높은 우선순위대로 위부터 차례대로 나 열됩니다. 사용자의 피드백을 자주 반영하기 위해 빈번한 주기로 릴리즈를 합니다.
  • 23. 릴리즈 파이프라인 자동화 코드 변경 빌드, 테스트, 배포 자 동화 바이너리 저장 스테이징 배포, UAT 운영 시스템 무중단 업 그레이드 샘플Tool Gitlab ArtifactoryConcourse Pivotal HA Services (API기반) 가능한 여러 종류의 테스트 를 자동화하는 파이프라인을 빌드 자동화 된 프로세스 에 기반하여 다음 단 계의 환경으로 프로 모션 롤링 방식을 기반으로 무 중단 패치 및 업그 레이드 </> 12 factor를 반영하는 형 태의 코드
  • 24. 마이크로서비스 관련 패턴들 API Gateway, Edge Server, BFFInverse Conway Event Shunting ACL, Context Mapping, Strangler Bridge, Router, Proxy, Facade Eventual Consistency, Sagas, ESB >> microservices
  • 25. Cookbooks 재사용이 가능한 패턴은 문서화되어 다른 개발자들이 참조할 수 있게 합니다. 많은 기업들이 애플리케이션 변환을 위해 사용한 검증된 Playbooks와 Blueprints를 참조 합니다.
  • 26. Selected aggregate 2. To Boris Selected user story 3. To Snap-E User story breakdown 4. To story breakdown 5. To tested and working code Low-level design decisions: 1. Use Kafka as async interface for receiving job orders 2. Define Job Order Event entity (data received) 3. Define REST API for job order lookup ... App Nav + Modernization Flow 1. From E.S. 6. To Cookbook of Patterns
  • 28. MSA 관련 기술 Microservice Architecture 1. API & API Gateway 2. Traffic / Routing / Discovery 3. Messaging 4. Data / Backing Services 5. Application Monitoring 6. Transactions 7. Security 8. Batch 9. Event Sourcing / CQRS 10. CI/CD Platform Architecture 1. Platform Monitoring 2. Scaling 3. Patching & Upgrading 4. HA Architecture 5. DR Architecture
  • 30. 국내 프로젝트 개요 ● 국내 제조기업의 MES의 마이크로서비스 프로젝트 ● Pivotal Application Transformation (AppTx) 서비스를 통한 서비스 도출 및 아키텍처 검증 Oracle DB WebLogic Schema Application Oracle DB Pivotal Cloud Foundry SchemaSchemaSchemaSchemaSchema SchemaSchemaSchemaSchemaMicroservice
  • 31. 고려사항 ● 마이크로서비스 자체가 목표가 아닌 얻고자 하는 Value에 포커스를 맞춰 MSA 디자인 ● 지속적인 애플리케이션 업데이트와 배포를 감안 ● 개발자들의 Learning Curve를 감안 ○ 국내 개발자들은 DB SQL을 이용한 개발에 친숙 (예> Union, join, with, connected by) ○ 이벤트 기반 구현에 대한 개발자들의 생소함 ● 마이크로서비스 운영에 대한 고민이 필요 ○ DevOps와 플랫폼 필요 ○ 마이크로서비스 분산환경에서의 트러블슈팅 노하우 필요 ● 마이크로서비스 경험이 있는 마스터 필요