SlideShare a Scribd company logo
마이크로 서비스 아키텍처로
개발하기
안재우
Platform Architecture팀
SK Planet
About me
• SK 플래닛 Platform Architecture 팀
• 전 NCSOFT 인프라플랫폼팀
• 전 닷넷엑스퍼트 수석컨설턴트
오늘 얘기할 내용은
• 마이크로 서비스 아키텍처란?
• 장단점은?
• 무엇이 필요하고, 어떤 점을 고려해야
하는지?
• 우리는 어떻게 하고 있는지?
WAS
전통적인 Web App 아키텍처
Browser/
Client
WAR
UI
A Service
A Repository
Database
A
WAS
WAS
이중화/로드밸런싱
Browser/
Client
WAR
UI
A Service
A Repository
Database
Load
balancer A
WAS
WAS
기능 추가
Browser/
Client
WAR
UI
A Service
A Repository
Database
Load
balancer AB Service
B Repository
B
시스템 연계/통합
WAS
WAS
Browser/
Client
WAR
UI
A Service
A Repository
Database
Load
balancer AB Service
B Repository
B
D System
C System
시스템 연계/통합
WAS
WAS
Browser/
Client
WAR
UI
A Service
A Repository
Database
Load
balancer AB Service
B Repository
B
E System D System
F SystemC System
G System
문제점
• 코드가 너무 커져서 유지보수하기 힘들어요.
• 시스템을 분리하고 싶어요.
• DB를 분리하고 싶어요.
• 연계 시스템이 변경된대요.
• 연계 시스템이 장애나서 우리 서비스도 장애예요.
• 사소한 수정인데도 전체 배포를 하고, QA를 거쳐야
해요.
• 새로운 걸 추가하는 건 상관없는데, 기존
로직/데이터를 변경하면 무슨 문제가 생길지
몰라요.
• 저희도 새로운 버전/기술을 써보고 싶은데…
가면 갈수록
• 뭔가 바꾸는게 두려워진다.
• 개발자들이 구닥다리 기술의 족쇄에서
벗어나지 못하고, 기술 격차는 계속
벌어진다.
• 모든 것은 ‘차세대’가 해결해야 줄 것이다.
(정말?)
나랑 상관없는 상상 속 단어들
Domain Driven
Design
Continuous
Delivery
On-demand
Virtualization
Elastic,
Scalable,
Resilience
Polyglot
Programming
Infrastructure
Automation
Agile
Development
Reusability
Self-government
Team
마이크로 서비스 아키텍처의 배경
Domain Driven
Design
Continuous
Delivery
On-demand
Virtualization
Elastic,
Scalable,
Resilience
Polyglot
Programming
Infrastructure
Automation
Agile
Development
Reusability
Self-government
Team
Scale Cube
http://theartofscalability.com
Y축 확장
WAS
WAR
UI
A Service
A Repository
Database
AB Service
B Repository
B
Y축 확장
Database
A
WAS
WAR
UI
A Service
A Repository
WAS
WAR
B Service
B Repository
Database
B
Database
WAS
WAS
WAS
B UI
A UI
Y축 확장 + X축/Z축 확장
Database
A
WAS
WAR
A UI
A Service
A Repository
WAR
B Service
B Repository
Database
B1
B UI
Database
B2
마이크로 서비스란?
• 작고(small)
• API로 다른 서비스와 연계하며(communicate
with APIs)
• 자율적이며(autonomous)
• 한 가지 일을 잘하는데 초점을 맞춘
서비스(focused on doing one thing well)
장점
• Technology Heterogeneity
• Resilience
• Scaling
• Ease of Deployment
• Organizational Alignment
• Composability
• Replaceability
단점
• Complexity
• Multiple Database & Transaction Management
• Complicated Test
• Require Automation for Deploy/Operation
• Hard to develop features span multiple
services
이거 SOA 얘기 아니에요?
• 비슷하지만, 달라요.
• SOA는 개념 상으로는 잘못되지 않았어요.
• 다만 방식이 잘못되었을 뿐이죠.
– SOAP Protocol
– WS-*
– Vendor-Driven
– ESB가 모든 걸 다 해결해줄 거라는 잘못된 믿음
(그렇게 선전했던 나쁜 XX)
MSA는
• Vendor Driven -> Service Company Driven
• 오픈테크놀로지 기반
• SOAP/XML vs. REST/JSON
• ‘스펙 먼저’가 아닌 ‘현실에서 검증된
Practice들’의 모음
• Agile 개념과의 결합
• Cloud 환경의 활용
마이크로 서비스 모델링
• Domain Driven Design
• Bounded Context
• Contract-First(API-First) Design
• Decomposed database
• Event-Driven Architecture
모델링/구현 Tip
• API를 먼저 정의하라.
• API를 REST API Maturity Level 2 이상이 되도록
강제화하라.
• API 문서를 유지하라(예: Swagger)
• ORM을 활용하라
• DB에 너무 의존하지 마라
• 도메인 내부에서만 의미있는 값을 외부에 노출하는
것을 지양하라
• 마이크로 서비스가 별다른 설정 없이 바로
기동가능하게 하라
(예: Java의 경우, Spring Boot + Embedded WAS 활용)
클라이언트-서비스 간 통합
Client A
(Web)
Client B
(App)
MS-A
MS-ALB
MS-A
MS-BLB
MS-A
MS-CLB
MS-A
MS-DLB
Security
Logging
Version
…
Security
Logging
Version
…
Security
Logging
Version
…
Security
Logging
Version
…
클라이언트-서비스 간 통합
API Gateway
Client A
(Web)
Client B
(App)
MS-A
MS-A
MS-A
MS-B
MS-A
MS-C
MS-A
MS-D
Security
Logging
Version
…
클라이언트-서비스 간 통합
API GatewayClient A
(Web)
Client B
(App)
MS-A
MS-A
MS-A
MS-B
MS-A
MS-C
MS-A
MS-D
Security
Logging
Version
…
API Gateway
Security
Logging
Version
…
LB
API Gateway
Security
Logging
Version
…
API Gateway
Security
Logging
Version
…
LB
서비스 간 통신
Service A Service B
HTTP Request/Response
Event
(Message)
Broker
Publish Event
Service C
Service D
Subscribe Event
Service Discovery
Client/API
Gateway
MS-A
MS-ALB
MS-A
MS-BLB
Security
Logging
Version
…
Security
Logging
Version
…
Client/API
Gateway
MS-A
MS-A
HA
Proxy
MS-A
MS-B
HA
Proxy
Security
Logging
Version
…
Security
Logging
Version
…
Service
Registry
Blue/Green Deployment
http://martinfowler.com/bliki/BlueGreenDeployment.html
MSA를 선택한 이유
Frontend/Backend 분리 회사의 Engineer Tech Tree와 동기화
코드 양이 커지고,
중복코드가 발생
코드의 양을 줄여서 누구나 쉽게 파악하도록
팀 전체의 Project Working Group별 Product
시스템 간 연계 증대 API 기반의 Contract 관리를 강제화
새로운 기술에 대한
도입 욕구
Micro-Service 단위로 구현에 자율성 부여
(Polyglot)
재사용성 향상 및
지속적인 발전
Micro-Service 단위의 재사용, 자유로운 리팩토링
회사 인프라의 뒷받침
On-Premise Cloud, CI와 연계된 배포 자동화(Jarvis), 향후
Docker와 같은 Container 기술과 연계
어떻게 개발하나요?
Backend 개발자Frontend 개발자
UserStory 검토
Contract/API 설계
Frontend 개발 Backend 개발
Mock/Unit Test Unit Test
API 연동 Load Test
UserStory 종료
Contract/API의 설계/공유
Contract/API의 설계/공유
API Workspace
Product
API
API
Product
dev
draft
release
Design APIs
Publish/Change APIs
API Provider
API Consumer
(stakeholder)
API Consumer (public)
Review / Share
draft spec
Explore & Test APIs
진짜 Polyglot을 하나요?
Java 1.6
Tomcat 6
Spring 3.x + XML Conf.
Spring MVC
MyBatis
Maven
기존 시스템들의 Backend
Web Application
Presentation
Controller
Business
Data Access
JSP
Sitemesh
JQuery
기존 시스템들의 Frontend
MySQL
네, 합니다.
Java 1.7 / Tomcat 7
Spring 4.x + Java Conf.
Spring Data JPA
Java 1.8 / Embedded Tomcat
Spring Boot
Spring Data JPA
Node.js
Express
MySQL
Redis
RabbitMQ
Groovy
Go
ASP.NET 5
Vert.x
Others…
PlanetSpace
(File Storage)
Frontend
HTML
CSS
Angular.js
Bootstrap
Less
Grunt
Bower
Karma
향후
실험(?)
후보들 Other…
ZooKeeper
개발 환경의 문제
• 개발하다 보면, 여러 개의
마이크로서비스들을 구동시켜야 하는
경우가 많다.
• 마이크로서비스마다 설정/기동방식이
상이한 경우, 다소 괴롭다.
• 구동된 마이크로 서비스들을 위한 API
Gateway를 빠르게 설정하기
• git clone/pull하는 것도 일이다.
Whitebase
Developer’s Machine
Whitebase
jar/js
(file system)
MS-A
Instance
git
jar/js
(file system)
MS-B
Instance
Artifact
repository
jar/js
(file system)
MS-C
Instance
Local docker
MS-D
Instance
Docker
Image
Registry
remote docker
MS-E
Instance
HA Proxy HA Proxy
clone
wget
remote machine
MS-F
Instance
Whitebase
• URL-based Router + Proxy
Authentication
Versioning
Logging
Routing
Composition
MS-A Container
Whitebase + Service Discovery + Inter-Service Call
Whitebase
UI
UI
MS-A
HA Proxy
HA Proxy
HA Proxy
Service
Registry
Service Agent
MS-A Container
MS-A HA Proxy
Service Agent
MS-B Container
MS-B
Service Agent
MS-B Container
MS-B
Service Agent
Monolithic
Web App
(WAS)
Web
변화 요약 - Before
Monolithic
Java Web App
(WAS)
Browser/
Client
“Big”
Database
(MySQL)
L4L4 Web
File
Storage
A B
C D
UI
MS-A
MS-B
MS-C
MS-D
Whitebase
A UI
B UI
C UI
D UI
Content
Router
변화 요약 - After
Browser/
Client
L4L4
Content
Router
A UI
B UI
C UI
D UI
API
Gateway
(Whitebase)
MS-A
(Java)
DB
(MySQL)
MS-B
(Nodejs)
MS-C
(Nodejs)
MS-D
(Java)
DB
(MySQL)
Redis
(MySQL)
File
Storage
DB
(MySQL)
Service
Registry
Event Broker
Config
Service
변화 요약
Before Now or soon Future
Architecture Monolithic
DB 공유형 통합
Micro-Services, VM 기반
Loosely-Coupled (API/Event)
Container 기반 가상화
Self-Healing
Application 1 Web App 9 UIs
14 Services
더욱 세분화
Data 1 MySQL 10 MySQL
2 Redis
1 ZooKeeper
Maria DB
PostgreSQL
또다른 NoSQL
Tech Stack Java 1.6/Tomcat 6
Spring 3.x
MyBatis
MySQL
Java 1.7/1.8, Embedded Tomcat
Spring 4.x/Spring Boot
Spring Data JPA
MySQL
Node.js
Redis
RabbitMQ
다른 Java Framework
다른 언어/플랫폼
기타 OnDemand
SVN/Git
CI (Jenkins)
수동 배포
Scrum/Sprint 기반
Git with Feature Branch Model
CI (Jenkins)
Jarvis를 사용한 자동 배포
Docker 인프라 연계
Blue/Green Deployment
Continuous Deployment
A/B Testing
MSA로 진행하며 얻은 것
• 팀원들이 다루는 기술 범위가 크게 확장
• 최신 기술의 도입/실험에 부담이 없음
• 팀원 간의 경험 공유 활성화
• API 디자인 능력 향상
• 향후 변화/확장에 대해서도 아키텍처적 변화
없이 대응이 가능
• 높은 재활용성/조합 지원
• 향후 사내/대외 오픈소스화가 가능할 듯한
솔루션들
MSA로 진행 시의 단점
• 초기 개발 시에는 개발 시간이 많이 소요됨
• MSA로 원활하게 개발하기 위한 기반
구성요소와 인프라 준비가 필요함
• 기존 개발 방식이 편하다고 주장하는
사람들로부터의 저항
• 서비스 간 연계 시 협의가 필요
• 여러 서비스에 걸치는 기능의 경우, 주체가
애매한 경우가 생김
제언
• 갑자기 한번에 MSA로 넘어가는 것은 쉽지
않은 작업입니다.
• 기존 시스템에서 분할이 가능한 항목을 하나씩
분할해가거나, 신규 개발되는 기능을 하나씩
마이크로 서비스로 분리하여 추가해가는 것이
좋습니다.
• MSA는 만능이 아니며, 조직 문화(점진적 발전,
구성원들의 Skill-up에 대한 관심과 투자)가
뒷받침해줘야 합니다. 조직 문화가 선행되지
않으면 차라리 시도하지 않는 것이 좋습니다.
질문/피드백
var you = {};
if (you.like||you.dislike||you.suggest||you.request)
{
var id = "jaewoo.ahn";
var domain = "sk.com";
mail.send(String.format("{0}@{1}", id, domain ));
}

More Related Content

PPTX
REST API 설계
PDF
SW 아키텍처 분석방법
PPTX
대용량 분산 아키텍쳐 설계 #1 아키텍쳐 설계 방법론
PDF
소프트웨어 아키텍처 문서화
PPTX
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
PPTX
1. 아키텍쳐 설계 프로세스
PDF
Fault Tolerance 소프트웨어 패턴
PDF
소프트웨어 아키텍처
REST API 설계
SW 아키텍처 분석방법
대용량 분산 아키텍쳐 설계 #1 아키텍쳐 설계 방법론
소프트웨어 아키텍처 문서화
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
1. 아키텍쳐 설계 프로세스
Fault Tolerance 소프트웨어 패턴
소프트웨어 아키텍처

What's hot (20)

PDF
Container, Container, Container -유재석 (AWS 솔루션즈 아키텍트)
PPTX
[DevGround] 린하게 구축하는 스타트업 데이터파이프라인
PDF
Little Big Data #1. 바닥부터 시작하는 데이터 인프라
PDF
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
PDF
카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개
PDF
AWS Lake Formation을 통한 손쉬운 데이터 레이크 구성 및 관리 - 윤석찬 :: AWS Unboxing 온라인 세미나
PDF
[오픈소스컨설팅] 스카우터 사용자 가이드 2020
PDF
Data Engineering 101
PDF
서비스 기획자를 위한 데이터분석 시작하기
PPTX
Data pipeline and data lake
PDF
Elasticsearchベースの全文検索システムFess
PDF
[오픈소스컨설팅]Zabbix Installation and Configuration Guide
PDF
[KAIST 채용설명회] 데이터 엔지니어는 무슨 일을 하나요?
PDF
[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)
PDF
NiFi 시작하기
PDF
Aws glue를 통한 손쉬운 데이터 전처리 작업하기
PPTX
Airflow를 이용한 데이터 Workflow 관리
PPTX
오픈소스를 활용한 Batch_처리_플랫폼_공유
PDF
[236] 카카오의데이터파이프라인 윤도영
PDF
How to build massive service for advance
Container, Container, Container -유재석 (AWS 솔루션즈 아키텍트)
[DevGround] 린하게 구축하는 스타트업 데이터파이프라인
Little Big Data #1. 바닥부터 시작하는 데이터 인프라
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개
AWS Lake Formation을 통한 손쉬운 데이터 레이크 구성 및 관리 - 윤석찬 :: AWS Unboxing 온라인 세미나
[오픈소스컨설팅] 스카우터 사용자 가이드 2020
Data Engineering 101
서비스 기획자를 위한 데이터분석 시작하기
Data pipeline and data lake
Elasticsearchベースの全文検索システムFess
[오픈소스컨설팅]Zabbix Installation and Configuration Guide
[KAIST 채용설명회] 데이터 엔지니어는 무슨 일을 하나요?
[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)
NiFi 시작하기
Aws glue를 통한 손쉬운 데이터 전처리 작업하기
Airflow를 이용한 데이터 Workflow 관리
오픈소스를 활용한 Batch_처리_플랫폼_공유
[236] 카카오의데이터파이프라인 윤도영
How to build massive service for advance
Ad

Viewers also liked (18)

PPTX
Micro Service Architecture의 이해
PDF
Spring boot + java 에코시스템 #1
PDF
Microservices architecture examples
PPTX
MSA를 이용해 구현하는 고가용/고확장성 서비스
PDF
Xen and the art of embedded virtualization (ELC 2017)
PDF
XPDS16: High-Performance Virtualization for HPC Cloud on Xen - Jun Nakajima &...
PDF
Virtualization Architecture & KVM
PPTX
Xen Project Release and Roadmap Process (4.7+)
PDF
OSCON16: Analysis of the Xen code review process: An example of software deve...
PPTX
Global platform
PPTX
대용량 분산 아키텍쳐 설계 #5. rest
PPTX
대용량 분산 아키텍쳐 설계 #2 대용량 분산 시스템 아키텍쳐 디자인 패턴
PDF
마이크로서비스 아키텍처와 DevOps 기술 - Amazon 사례를 중심으로 (윤석찬)
PDF
DDD 구현기초 (거의 Final 버전)
PPTX
대용량 분산 아키텍쳐 설계 #4. soa 아키텍쳐
PPTX
대용량 분산 아키텍쳐 설계 #3 대용량 분산 시스템 아키텍쳐
PPTX
virtualization and hypervisors
PDF
Hypervisors and Virtualization - VMware, Hyper-V, XenServer, and KVM
Micro Service Architecture의 이해
Spring boot + java 에코시스템 #1
Microservices architecture examples
MSA를 이용해 구현하는 고가용/고확장성 서비스
Xen and the art of embedded virtualization (ELC 2017)
XPDS16: High-Performance Virtualization for HPC Cloud on Xen - Jun Nakajima &...
Virtualization Architecture & KVM
Xen Project Release and Roadmap Process (4.7+)
OSCON16: Analysis of the Xen code review process: An example of software deve...
Global platform
대용량 분산 아키텍쳐 설계 #5. rest
대용량 분산 아키텍쳐 설계 #2 대용량 분산 시스템 아키텍쳐 디자인 패턴
마이크로서비스 아키텍처와 DevOps 기술 - Amazon 사례를 중심으로 (윤석찬)
DDD 구현기초 (거의 Final 버전)
대용량 분산 아키텍쳐 설계 #4. soa 아키텍쳐
대용량 분산 아키텍쳐 설계 #3 대용량 분산 시스템 아키텍쳐
virtualization and hypervisors
Hypervisors and Virtualization - VMware, Hyper-V, XenServer, and KVM
Ad

Similar to 마이크로서비스 아키텍처로 개발하기 (20)

PDF
SK플래닛_README_마이크로서비스 아키텍처로 개발하기
PDF
마이크로서비스 아키텍처의 이해 - 부산대 소프트웨어 공학 연구실 강의 자료
PDF
Microservices
PPTX
유엔진 오픈소스 클라우드 플랫폼 (uEngine Microservice architecture Platform)
PPTX
기술적 변화를 이끌어가기
PPTX
마이크로 서비스 아키텍쳐 소개 및 구현 방법
PDF
Microservice Architecture
PPTX
Micro Service Architecture
PPTX
3. 마이크로 서비스 아키텍쳐
PDF
마이크로서비스 아키텍처 도입의 허와 실 - feat. 문제는 도메인이야
PDF
[2017 AWS Startup Day] 서버리스 마이크로서비스로 일당백 개발조직 만들기
PPTX
4. 대용량 아키텍쳐 설계 패턴
PDF
모놀리스에서 마이크로서비스 아키텍처로의 전환 전략::박선용::AWS Summit Seoul 2018
PPTX
MSA ( Microservices Architecture ) 발표 자료 다운로드
PPTX
Jbug 발표 msa탐방기_공유자료
PDF
꿀밋업1탄_왜_마이크로서비스인가
PPTX
AWS 클라우드를 통한 마이크로서비스 구현 방법 - 조상만 :: AWS 현대적 애플리케이션 개발
PPTX
MSA와 infra
PDF
모놀리스에서 마이크로서비스 아키텍처로의 전환 전략::박선용::AWS Summit Seoul 2018
PPTX
오라클 클라우드와 함께 떠나는 마이크로서비스 아키텍처로의 여행 V3
SK플래닛_README_마이크로서비스 아키텍처로 개발하기
마이크로서비스 아키텍처의 이해 - 부산대 소프트웨어 공학 연구실 강의 자료
Microservices
유엔진 오픈소스 클라우드 플랫폼 (uEngine Microservice architecture Platform)
기술적 변화를 이끌어가기
마이크로 서비스 아키텍쳐 소개 및 구현 방법
Microservice Architecture
Micro Service Architecture
3. 마이크로 서비스 아키텍쳐
마이크로서비스 아키텍처 도입의 허와 실 - feat. 문제는 도메인이야
[2017 AWS Startup Day] 서버리스 마이크로서비스로 일당백 개발조직 만들기
4. 대용량 아키텍쳐 설계 패턴
모놀리스에서 마이크로서비스 아키텍처로의 전환 전략::박선용::AWS Summit Seoul 2018
MSA ( Microservices Architecture ) 발표 자료 다운로드
Jbug 발표 msa탐방기_공유자료
꿀밋업1탄_왜_마이크로서비스인가
AWS 클라우드를 통한 마이크로서비스 구현 방법 - 조상만 :: AWS 현대적 애플리케이션 개발
MSA와 infra
모놀리스에서 마이크로서비스 아키텍처로의 전환 전략::박선용::AWS Summit Seoul 2018
오라클 클라우드와 함께 떠나는 마이크로서비스 아키텍처로의 여행 V3

마이크로서비스 아키텍처로 개발하기

  • 2. About me • SK 플래닛 Platform Architecture 팀 • 전 NCSOFT 인프라플랫폼팀 • 전 닷넷엑스퍼트 수석컨설턴트
  • 3. 오늘 얘기할 내용은 • 마이크로 서비스 아키텍처란? • 장단점은? • 무엇이 필요하고, 어떤 점을 고려해야 하는지? • 우리는 어떻게 하고 있는지?
  • 4. WAS 전통적인 Web App 아키텍처 Browser/ Client WAR UI A Service A Repository Database A
  • 6. WAS WAS 기능 추가 Browser/ Client WAR UI A Service A Repository Database Load balancer AB Service B Repository B
  • 7. 시스템 연계/통합 WAS WAS Browser/ Client WAR UI A Service A Repository Database Load balancer AB Service B Repository B D System C System
  • 8. 시스템 연계/통합 WAS WAS Browser/ Client WAR UI A Service A Repository Database Load balancer AB Service B Repository B E System D System F SystemC System G System
  • 9. 문제점 • 코드가 너무 커져서 유지보수하기 힘들어요. • 시스템을 분리하고 싶어요. • DB를 분리하고 싶어요. • 연계 시스템이 변경된대요. • 연계 시스템이 장애나서 우리 서비스도 장애예요. • 사소한 수정인데도 전체 배포를 하고, QA를 거쳐야 해요. • 새로운 걸 추가하는 건 상관없는데, 기존 로직/데이터를 변경하면 무슨 문제가 생길지 몰라요. • 저희도 새로운 버전/기술을 써보고 싶은데…
  • 10. 가면 갈수록 • 뭔가 바꾸는게 두려워진다. • 개발자들이 구닥다리 기술의 족쇄에서 벗어나지 못하고, 기술 격차는 계속 벌어진다. • 모든 것은 ‘차세대’가 해결해야 줄 것이다. (정말?)
  • 11. 나랑 상관없는 상상 속 단어들 Domain Driven Design Continuous Delivery On-demand Virtualization Elastic, Scalable, Resilience Polyglot Programming Infrastructure Automation Agile Development Reusability Self-government Team
  • 12. 마이크로 서비스 아키텍처의 배경 Domain Driven Design Continuous Delivery On-demand Virtualization Elastic, Scalable, Resilience Polyglot Programming Infrastructure Automation Agile Development Reusability Self-government Team
  • 14. Y축 확장 WAS WAR UI A Service A Repository Database AB Service B Repository B
  • 15. Y축 확장 Database A WAS WAR UI A Service A Repository WAS WAR B Service B Repository Database B
  • 16. Database WAS WAS WAS B UI A UI Y축 확장 + X축/Z축 확장 Database A WAS WAR A UI A Service A Repository WAR B Service B Repository Database B1 B UI Database B2
  • 17. 마이크로 서비스란? • 작고(small) • API로 다른 서비스와 연계하며(communicate with APIs) • 자율적이며(autonomous) • 한 가지 일을 잘하는데 초점을 맞춘 서비스(focused on doing one thing well)
  • 18. 장점 • Technology Heterogeneity • Resilience • Scaling • Ease of Deployment • Organizational Alignment • Composability • Replaceability
  • 19. 단점 • Complexity • Multiple Database & Transaction Management • Complicated Test • Require Automation for Deploy/Operation • Hard to develop features span multiple services
  • 20. 이거 SOA 얘기 아니에요? • 비슷하지만, 달라요. • SOA는 개념 상으로는 잘못되지 않았어요. • 다만 방식이 잘못되었을 뿐이죠. – SOAP Protocol – WS-* – Vendor-Driven – ESB가 모든 걸 다 해결해줄 거라는 잘못된 믿음 (그렇게 선전했던 나쁜 XX)
  • 21. MSA는 • Vendor Driven -> Service Company Driven • 오픈테크놀로지 기반 • SOAP/XML vs. REST/JSON • ‘스펙 먼저’가 아닌 ‘현실에서 검증된 Practice들’의 모음 • Agile 개념과의 결합 • Cloud 환경의 활용
  • 22. 마이크로 서비스 모델링 • Domain Driven Design • Bounded Context • Contract-First(API-First) Design • Decomposed database • Event-Driven Architecture
  • 23. 모델링/구현 Tip • API를 먼저 정의하라. • API를 REST API Maturity Level 2 이상이 되도록 강제화하라. • API 문서를 유지하라(예: Swagger) • ORM을 활용하라 • DB에 너무 의존하지 마라 • 도메인 내부에서만 의미있는 값을 외부에 노출하는 것을 지양하라 • 마이크로 서비스가 별다른 설정 없이 바로 기동가능하게 하라 (예: Java의 경우, Spring Boot + Embedded WAS 활용)
  • 24. 클라이언트-서비스 간 통합 Client A (Web) Client B (App) MS-A MS-ALB MS-A MS-BLB MS-A MS-CLB MS-A MS-DLB Security Logging Version … Security Logging Version … Security Logging Version … Security Logging Version …
  • 25. 클라이언트-서비스 간 통합 API Gateway Client A (Web) Client B (App) MS-A MS-A MS-A MS-B MS-A MS-C MS-A MS-D Security Logging Version …
  • 26. 클라이언트-서비스 간 통합 API GatewayClient A (Web) Client B (App) MS-A MS-A MS-A MS-B MS-A MS-C MS-A MS-D Security Logging Version … API Gateway Security Logging Version … LB API Gateway Security Logging Version … API Gateway Security Logging Version … LB
  • 27. 서비스 간 통신 Service A Service B HTTP Request/Response Event (Message) Broker Publish Event Service C Service D Subscribe Event
  • 30. MSA를 선택한 이유 Frontend/Backend 분리 회사의 Engineer Tech Tree와 동기화 코드 양이 커지고, 중복코드가 발생 코드의 양을 줄여서 누구나 쉽게 파악하도록 팀 전체의 Project Working Group별 Product 시스템 간 연계 증대 API 기반의 Contract 관리를 강제화 새로운 기술에 대한 도입 욕구 Micro-Service 단위로 구현에 자율성 부여 (Polyglot) 재사용성 향상 및 지속적인 발전 Micro-Service 단위의 재사용, 자유로운 리팩토링 회사 인프라의 뒷받침 On-Premise Cloud, CI와 연계된 배포 자동화(Jarvis), 향후 Docker와 같은 Container 기술과 연계
  • 31. 어떻게 개발하나요? Backend 개발자Frontend 개발자 UserStory 검토 Contract/API 설계 Frontend 개발 Backend 개발 Mock/Unit Test Unit Test API 연동 Load Test UserStory 종료
  • 33. Contract/API의 설계/공유 API Workspace Product API API Product dev draft release Design APIs Publish/Change APIs API Provider API Consumer (stakeholder) API Consumer (public) Review / Share draft spec Explore & Test APIs
  • 34. 진짜 Polyglot을 하나요? Java 1.6 Tomcat 6 Spring 3.x + XML Conf. Spring MVC MyBatis Maven 기존 시스템들의 Backend Web Application Presentation Controller Business Data Access JSP Sitemesh JQuery 기존 시스템들의 Frontend MySQL
  • 35. 네, 합니다. Java 1.7 / Tomcat 7 Spring 4.x + Java Conf. Spring Data JPA Java 1.8 / Embedded Tomcat Spring Boot Spring Data JPA Node.js Express MySQL Redis RabbitMQ Groovy Go ASP.NET 5 Vert.x Others… PlanetSpace (File Storage) Frontend HTML CSS Angular.js Bootstrap Less Grunt Bower Karma 향후 실험(?) 후보들 Other… ZooKeeper
  • 36. 개발 환경의 문제 • 개발하다 보면, 여러 개의 마이크로서비스들을 구동시켜야 하는 경우가 많다. • 마이크로서비스마다 설정/기동방식이 상이한 경우, 다소 괴롭다. • 구동된 마이크로 서비스들을 위한 API Gateway를 빠르게 설정하기 • git clone/pull하는 것도 일이다.
  • 37. Whitebase Developer’s Machine Whitebase jar/js (file system) MS-A Instance git jar/js (file system) MS-B Instance Artifact repository jar/js (file system) MS-C Instance Local docker MS-D Instance Docker Image Registry remote docker MS-E Instance HA Proxy HA Proxy clone wget remote machine MS-F Instance
  • 38. Whitebase • URL-based Router + Proxy Authentication Versioning Logging Routing Composition
  • 39. MS-A Container Whitebase + Service Discovery + Inter-Service Call Whitebase UI UI MS-A HA Proxy HA Proxy HA Proxy Service Registry Service Agent MS-A Container MS-A HA Proxy Service Agent MS-B Container MS-B Service Agent MS-B Container MS-B Service Agent
  • 40. Monolithic Web App (WAS) Web 변화 요약 - Before Monolithic Java Web App (WAS) Browser/ Client “Big” Database (MySQL) L4L4 Web File Storage A B C D UI
  • 41. MS-A MS-B MS-C MS-D Whitebase A UI B UI C UI D UI Content Router 변화 요약 - After Browser/ Client L4L4 Content Router A UI B UI C UI D UI API Gateway (Whitebase) MS-A (Java) DB (MySQL) MS-B (Nodejs) MS-C (Nodejs) MS-D (Java) DB (MySQL) Redis (MySQL) File Storage DB (MySQL) Service Registry Event Broker Config Service
  • 42. 변화 요약 Before Now or soon Future Architecture Monolithic DB 공유형 통합 Micro-Services, VM 기반 Loosely-Coupled (API/Event) Container 기반 가상화 Self-Healing Application 1 Web App 9 UIs 14 Services 더욱 세분화 Data 1 MySQL 10 MySQL 2 Redis 1 ZooKeeper Maria DB PostgreSQL 또다른 NoSQL Tech Stack Java 1.6/Tomcat 6 Spring 3.x MyBatis MySQL Java 1.7/1.8, Embedded Tomcat Spring 4.x/Spring Boot Spring Data JPA MySQL Node.js Redis RabbitMQ 다른 Java Framework 다른 언어/플랫폼 기타 OnDemand SVN/Git CI (Jenkins) 수동 배포 Scrum/Sprint 기반 Git with Feature Branch Model CI (Jenkins) Jarvis를 사용한 자동 배포 Docker 인프라 연계 Blue/Green Deployment Continuous Deployment A/B Testing
  • 43. MSA로 진행하며 얻은 것 • 팀원들이 다루는 기술 범위가 크게 확장 • 최신 기술의 도입/실험에 부담이 없음 • 팀원 간의 경험 공유 활성화 • API 디자인 능력 향상 • 향후 변화/확장에 대해서도 아키텍처적 변화 없이 대응이 가능 • 높은 재활용성/조합 지원 • 향후 사내/대외 오픈소스화가 가능할 듯한 솔루션들
  • 44. MSA로 진행 시의 단점 • 초기 개발 시에는 개발 시간이 많이 소요됨 • MSA로 원활하게 개발하기 위한 기반 구성요소와 인프라 준비가 필요함 • 기존 개발 방식이 편하다고 주장하는 사람들로부터의 저항 • 서비스 간 연계 시 협의가 필요 • 여러 서비스에 걸치는 기능의 경우, 주체가 애매한 경우가 생김
  • 45. 제언 • 갑자기 한번에 MSA로 넘어가는 것은 쉽지 않은 작업입니다. • 기존 시스템에서 분할이 가능한 항목을 하나씩 분할해가거나, 신규 개발되는 기능을 하나씩 마이크로 서비스로 분리하여 추가해가는 것이 좋습니다. • MSA는 만능이 아니며, 조직 문화(점진적 발전, 구성원들의 Skill-up에 대한 관심과 투자)가 뒷받침해줘야 합니다. 조직 문화가 선행되지 않으면 차라리 시도하지 않는 것이 좋습니다.
  • 46. 질문/피드백 var you = {}; if (you.like||you.dislike||you.suggest||you.request) { var id = "jaewoo.ahn"; var domain = "sk.com"; mail.send(String.format("{0}@{1}", id, domain )); }