5. 목표를 위한 보통의 접근: Monolithic/N-티어 아키텍처
Data Center 1
Your infrastructure provider
Data Center 2
Load Balancer
DB Master DB Standby
App Server App Server
9. AWS Elastic Beanstalk 손 쉬운 N-티어 구축 및 운영
ExampleApp-Test
ExampleApp-Prod
Availability Zone
A
Availability Zone
B
Elastic Load
Balancing
EC2
RDS Standby
EC2
Amazon CloudWatch
• 서비스 차원의
리소스 모니터링
• 로그 관리
AWS 보안
• IAM
• VPC 네트워킹
전문 서비스
• 블록/오브젝트
저장소
• 캐싱
• DNS
모범 사례로 가는
가장 빠른 길
AWS Elastic Beanstalk
• 시작부터 클라우드 모범
사례로 구축 가능
• 개발자 워크플로우와
통합
• Elastic Beanstalk
명령행 인터페이스를
활용
10. 성장하는 서비스에서 Monolith 앱의 단점
장기 개발 사이클
(다수개발자 공동 참여)
운영의 어려움
(특정 모듈 장애시)
애플리케이션
확장성 애로
신규 출시에
몇 달이 걸림
신규 기능 추가에
어려움
아키텍처 유지
진화의 어려움
혁신
저해
고객
불만족
민첩성
저해
11. 성공을 위한 표준 패턴 확인
Monolithic
여러 서비스
내부 마이크로서비스 플랫폼
12. AWS 기반 마이크로서비스 아키텍처 사례
Building a Microservices
Gaming Platform for
Turbine Mobile Games
(2016)
From Monolithic to
Microservices Evolving
Architecture Patterns in
the Cloud (2016)
Developing Mobile Apps and
Serverless Microservices for
Enterprises using AWS
(2016)
Pure Play Video OTT- A
Microservices Architecture
(2015)
Nike's Journey into
Microservices (2014)
A Journey to
Microservices (2015)
마이크로서비스 기반 모바일
서비스 마이그레이션 (2016)
마이크로 서비스 아키텍처로
방송 서비스 진화 (2016)
삼성전자 IoT 서비스
마이크로서비스 구축 사례
서버리스 마이크로 서비스
전환 사례
15. 다른 서비스의 내부 구조를
알지 못해도, 내 서비스
코드를 업데이트 할 수 있다.
서비스들이 네트워크를
통해 서로 API로 통신한다.
서비스는 독자적으로
업데이트하며, 서로 영향을
주지 않는다.
“service-oriented
architecture
composed of
loosely coupled
elements
that have
bounded contexts”
Adrian Cockcroft (VP of Cloud Architecture @
AWS, former Cloud Architect at Netflix)
16. Monolithic vs. SOA vs. Microservices
SOA
거친 입자
Microservices
고운 입자
Monolithic
하나의 입자
17. 마이크로서비스 vs SOA
Microservices:
• 많은 작은 구성요소
• 단일 서비스 도메인 내에
비지니스 로직이 동작
• 간단한 와이어 프로토콜
(XML/JSON와 HTTP)
• SDK와 클라이언트와 함께 API
지향
SOA:
• 보다 정교한 구성요소 감소
• 여러 도메인에 걸쳐 비지니스
로직이 동작
• 서비스간 레이어와 같은
엔터프라이즈 서비스 버스
• 미들웨어
18. Monolithic 아키텍처
Order UI User UI
Shipping
UI
Order
Service
User
Service
Shipping
Service
Data
Access
21. 마이크로서비스 아키텍처
Order UI User UI
Shipping
UI
Order
Service
User
Service
Shipping
Service
22. 마이크로서비스 아키텍처 - 확장
Order UI User UI UI
Order
Service
Service
Shipping
Service
Order UI
Order UI
User UI UIShipping
UI
Order
ServiceOrder
Service
Service
Service
Service
Service
User
Service
Shipping
Service
24. Build
Stage #1 Stage #2 … Stage #N Production
Build Build Build Build
Spring
Developer/
Team
Developer/
Team
Developer/
Team
Developer/
Team
Developer/
Team
25. Developer
Build
Stage #1 Stage #2 … Stage #N Production
Build Build Build Build
Bug!
Spring
Developer/
Team
Developer/
Team
Developer/
Team
Developer/
Team
26. Build
Build
Build
Stage #1 Stage #2 … Stage #N Production
Build Build Build Build
Build Build Build Build
Build Build Build Build
Spring
Node.js
Ruby
on Rails
Developer/
Team
Developer/
Team
Developer/
Team
Developer/
Team
Developer/
Team
27. Build
Build
Developer
Build
Stage #1 Stage #2 … Stage #N Production
Build Build Build Build
Bug!
Build Build Build Build
Build Build Build Build
Spring
Node.js
Ruby
onRails
Developer/
Team
Developer/
Team
Developer/
Team
Developer/
Team
28. 마이크로서비스 아키텍처 특징
Do one
thing well
Independent
Decentralized
Black Box
Polyglot
You build it, you run it
39. 이벤트 기반과 최종 일관성
Order Customer
Customer
DB
Topic
Order
DB
POST /Orders
(including address change)
40. 마이크로서비스로의 전환 단계 3
배포 분리
Code
Order
Code
Microservice
Customer
Code
Monolith
DB
Order
DB
Customer
DB
Order
Code
Monolith Service
Customer
Code
Order
DB
Customer
DB
45. 새로운 기능을 마이크로서비스로 구성
• 새로운 기능이 필요할 때, 마이크로서비스를 첫 번째 접근
방식으로 사용
• Monolith에서의 종속성이 마이크로서비스에 미치는 영향을
고려
• ”if you find yourself in a hole, stop digging”, 문제 발생 시
새로운 방법 및 접근법을 고려
50. Lambda : 동작 원리
Bring your own code
• Node.js, Java, Python
• Java = Scala, Clojure 등의
어떠한 JVM기반 언어.
• Bring your own libraries
유연한 호출 경로
• Event 혹은
Request/Response 호출
옵션
• 여러 AWS 서비스들과
통합
단순한 자원 모델
• 128MB부터 1.5GB까지
64MB 단위로 메모리 설정
• 할당된 메모리에 비례하여
CPU 및 네트웍 자원 할당
• 실제 사용량 내역 보고
효과적인 권한 통제
• AWS IAM (Identity and
Access Management)
Role을 사용한 실행 권한
설정
• AWS 이벤트 소스에 대한
자원 정책
51. Lambda : 동작 원리
제작 기능
• AWS SDK 포함
• 인바운드 네트웍 처리
• 프로세스, 쓰레드, /tmp,
소켓 …
배포 옵션
• 콘솔의 WYSIWIG
편집기를 사용하여 직접
제작/배포
• 코드를 zip 파일로 묶어
Lambda 서비스 혹은
S3로 전송
Stateless 기능
• S3/Amazon
DynamoDB/Amazon
ElastiCache를 사용한 저장
• 인프라스트럭쳐와의
연관성 없음 (로그인 불가)
모니터링 및 로깅
• Amazon CloudWatch
메트릭 – 요청 수, 에러 수,
처리 시간, 처리량
• Amazon CloudWatch
Log를 사용하여 로깅
52. Lambda 사용 이점
• 서버 용량 자동 확장
• API를 통한 실행 트리거
• 함수의 병렬 실행 및 확장을 보장
• 로깅, 모니터링 등
• 만족할만한 가격
53. 서버리스 웹 애플리케이션 아키텍처
Images/Video
HTML/CSS/JS
정적 요청
Angular/SPA
Amazon
CloudFront/
Amazon S3
Desktop
*aaS
Mobile
54. 서버리스 웹 애플리케이션 아키텍처
Images/Video
HTML/CSS/JS
정적 요청
동적 요청AWS Lambda
Angular/SPA
Amazon
API Gateway
api.example.com
Desktop
*aaS
Mobile
Amazon
CloudFront/
Amazon S3
api.example.com
55. 서버리스 웹 애플리케이션 아키텍처
Images/Video
HTML/CSS/JS
정적 요청
동적 요청AWS Lambda
Amazon
DynamoDB
지속성 데이터베이스
Angular/SPA
api.example.com
Desktop
*aaS
Mobile
Amazon
CloudFront/
Amazon S3
Amazon
API Gateway
56. 서버리스 마이크로서비스 구현 사례
(c) 이상현(빙글), Vingle의 AWS 기반 서버리스 마이크로 서비스 구현 사례
57. Elastic
Load Balancer AWS Opsworks
www.vingle.net
api1.vingle.net
EC2
.
.
.
DB / Cache
EC2
EC2
기존 서비스 및 인프라 구조
Web server /
Background Worker /
REST API /
ORM /
Business logic
….
Feed
Search
Card Writing
Admin
Spam
….
(c) 이상현(빙글), Vingle의 AWS 기반 서버리스 마이크로 서비스 구현 사례
58. API Gateway
Lambda
DynamoDB
(List of spam keywords)
POST /api/validates
Body: {
data: “ABCDEFG”
}
서버리스 마이크로서비스 테스트 - 스팸 필터
(c) 이상현(빙글), Vingle의 AWS 기반 서버리스 마이크로 서비스 구현 사례
59. 서버리스 마이크로서비스 이전- 6개월 뒤…
§ Netflix와 같은 Strangler Pattern
Architecture
§ 모든 요청을 받는 기존 API서버가 있
고, 해당 API서버에서 필요로 하는
마이크로서비스를 REST HTTP기반
통신으로 사용
§ 모니터링을 위해 Cloudwatch를 사
용하여 알림 자동화
§ 서비스들 간의 Dependency를
모니터링 툴을 만들어 관리
§ 각 서비스를 독립적으로
개발 / 배포 / 모니터링
(c) 이상현(빙글), Vingle의 AWS 기반 서버리스 마이크로 서비스 구현 사례
60. Lesson Learned- Microservice Migration
1. 새로 추가/변경 필요한 기능부터 분리
• 잘 돌아가고 있는 오래된 기능 재작성은 리스크 높음
• 리스크가 작은 것부터 시작해서 팀 단위 운영/개발 노하우 축적
2. Business Domain 단위 서비스 구성
• Team(X), End-Point(X), # of APIs
• Cache (X), Database (X)
• Feed (O), Notification(O)
3. 서비스 존재 목적은 사용 되어지는 것
• 다른 개발자 / 시스템에서 쓰기 쉽도록 API 인터페이스 필수
• REST API라면 Swagger등을 통해 적극적으로 문서화
(c) 이상현(빙글), Vingle의 AWS 기반 서버리스 마이크로 서비스 구현 사례
61. 1. AWS에서 제공하는 Fully-managed service 적극 활용
• Search Microservice ▶ Lambda + Cloudsearch
• Feed Microservice ▶ Lambda + DynamoDB + Kinesis Stream
2. Infrastructure-as-a-Code (AWS CloudFormation)
• 시간이 조금만 지나면, AWS내 많은 리소스 관리하기 어려워짐
• AWS CloudFormation을 통해 리소스들을 코드화 / 데이터화
Lesson Learned - Cloud Infrastructure
(c) 이상현(빙글), Vingle의 AWS 기반 서버리스 마이크로 서비스 구현 사례
62. 배포를 위한 AWS Serverless Application Model (SAM)
1. SAM 파일을 사용하여 Lambda 함수, API 게이트웨이 (Swagger 파일 사용) 및 DynamoDB
테이블을 사용하여 서버리스 애플리케이션을 기술
2. AWS 리소스 배포를 위해 CloudFormation을 사용
Lambda 콘솔에서 SAM 파일 내보내기 SAM 파일 예제
64. 마이크로서비스 아키텍처를 위한 개발 문화
Microservices
작은 서비스 개발
단위로 쪼개 API로
연동하여 개발 민첩성
및 독립적 배포 가능
Two-Pizza Team
서비스 개발 및 배포
운영 등을 모두 맡는
자율적이고 오너쉽을
가진 팀 구성 및 문화
Automation
개별팀이 자신의
서비스 개발 에만
집중할 수 있는
자동화 도구 제공
65. “Any organization that designs a system
will inevitably produce a design whose
structure is a copy of the organization’s
communication structure.”
Melvin E. Conway, 1967
Conway’s Law
66. 지속적인 서비스 모니터링 도구 개발 투자
• API 외부적인 요소 모니터링
• Latency, RPS, Error rate
• API 내부적인 요소 모니터링
• CloudWatch, OS, Application
• AWS 기반 모니터링 및 분석 도구 활용
• CloudWatch 및 CloudWatchLogs
67. 다양한 오픈소스 프레임워크 활용
Chalice
Framework
Serverless Java
Container
예: 서버리스 서비스 개발 및 배포를 위한 오픈 소스 확산
68. 외부 API 서비스를 통한 생태계 확산
https://aws.amazon.com/ko/blogs/compute/gener
ate-your-own-api-gateway-developer-portal/
https://aws.amazon.com/ko/blogs/compute/monetize-
your-apis-in-aws-marketplace-using-api-gateway/
API Gateway Developer Portal
Serverless Application Model (SAM) 기반의
오픈 소스 키 발급 및 관리 백엔드
API Monetization in Marketplace
AWS Marketplace를 통해 API 서비스 판매 및
수익화 가능
69. 손 쉬운 배포: AWS CodeStar
Source Build Test Production
Third Party
Tooling
AWS 데브옵스를 위한 지속적
통합(CI) 전달(CD) 및 프로젝트 운영
AWS CodeCommit AWS CodeBuild
AWS CodeDeploy
AWS Elastic Beanstalk
AWS CloudFormation
AWS CodePipeline
AWS CodeStar
AWS IAM
Amazon
CloudWathch
3rd Party Extensions
https://www.slideshare.net/awskorea/aws-80047474
70.
71. 빠른 빌드/테스트/배포
가능
명확한 오너쉽 및
자율적 운영
개별 마이크로
서비스 확장 가능
몇 분만에
배포 가능
신규 기능
빠르게
추가 가능
빠른 운영 및
개선
빠른 혁신
고객 만족
높은
민첩성
마이크로 서비스의 이점
72. 이 모든 것으로 좋아진 점
• 새벽 3시에 일어날 필요가 없어졌어요
• 배포가 너무 쉬워요
• 일찍 그리고 자주 배포해요
• 혼자서도 서비스를 동작 시킬 수 있어요
• 버그가 많이 줄어들었고 (옆 시스템에 의한 영향)이 적어졌어요
• 어떻게 확장하는지 잘 알고 있어요
• SSH는 이제 필요 없어요
• 문제 발견 시 해결도 손 쉬워요
• 모듈 식 솔루션을 구축할 수 있었어요
73. AWS의 수많은 Serverless 옵션
스토리지
데이터베이스
네트워크
컴퓨팅
콘텐츠 전송
메시징 및 대기열보안
게이트웨이
사용자 관리
모니터링 및 로깅
사물 인터넷
기계 학습
데이터 분석
74. AWS 활용 = Building Block 조립
작은 서비스 구축에 적절한
다양한 서비스들을 유연하게 조립하여 활용