SlideShare une entreprise Scribd logo
1  sur  47
Télécharger pour lire hors ligne
마이크로 서비스 아키텍처로
개발하기
안재우
Platform Architecture팀
오늘 얘기할 내용은
• 마이크로 서비스 아키텍처란?
• 장단점은?
• 무엇이 필요하고, 어떤 점을 고려해야
하는지?
• 우리는 어떻게 하고 있는지?
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 환경의 활용
야채샐러드하고요,
피자 1개,
햄버거 2개,
생크림케이크 주세요.
피자랑 샐러드는 같이 주세요.
햄버거 1개는 마요네즈
빼주세요. 케이크에는 딸기
토핑을 추가해주세고요.
<SOAP 주문서>
<서빙 테이블=3 주문번호=1234>
<서빙 1>
<동시에>
<주문 1>야채샐러드, 수량 1</주문 1>
<주문 2>피자<Convert>Pizza</Convert></주문 2>
</동시에>
</서빙 1>
<서빙 2>
<주문 3>햄버거2(1개는 마요네즈제외)</주문 3>
</서빙 2>
<서빙 3>
<주문 4>생크림케이크<토핑><딸기>/토핑></주문 4>
</서빙 3>
</서빙>
</SOAP 주문서>
SOA with ESB
샐러드용
주문서
햄버거용
주문서
피자용
주문서
케이크용
주문서
Event
Broker
orderReceived
readyToServe
orderServed
GET /vendors/bakery/menu/cakes?q=strawberry+topping
GET /menus
POST /orders
[
{ vendor : “pizzaria”, items : [ { item : “피자”, count : 1 } ] },
{ vendor : “salad”, items : [ { item : “샐러드”, count : 1 } ] }
]
POST /vendors/burger/orders
[
items : [
{ item : “햄버거”, count : 1 } ,
{ item : “햄버거”, count : 1 , option : “마요네즈 제외” }
] },
]
POST /vendors/bakery/orders
[
items : [
{ item : “생크림케이크”, count : 1 , option : “딸기토핑” }
] },
]
MSA with API Gateway
마이크로 서비스 모델링
• 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의 설계/공유
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 ));
}

Contenu connexe

Tendances

판교 개발자 데이 – Aws가 제안하는 서버리스 아키텍처 – 김필중
판교 개발자 데이 – Aws가 제안하는 서버리스 아키텍처 – 김필중판교 개발자 데이 – Aws가 제안하는 서버리스 아키텍처 – 김필중
판교 개발자 데이 – Aws가 제안하는 서버리스 아키텍처 – 김필중Amazon Web Services Korea
 
마이크로서비스를 위한 AWS 아키텍처 패턴 및 모범 사례 - AWS Summit Seoul 2017
마이크로서비스를 위한 AWS 아키텍처 패턴 및 모범 사례 - AWS Summit Seoul 2017마이크로서비스를 위한 AWS 아키텍처 패턴 및 모범 사례 - AWS Summit Seoul 2017
마이크로서비스를 위한 AWS 아키텍처 패턴 및 모범 사례 - AWS Summit Seoul 2017Amazon Web Services Korea
 
컨텐트 협업플랫폼 Amazon WorkDocs 활용하기 - 박상희 상무, 한글과컴퓨터 / Ben Fitzpatrick, Head of Bu...
컨텐트 협업플랫폼 Amazon WorkDocs 활용하기 - 박상희 상무, 한글과컴퓨터 / Ben Fitzpatrick, Head of Bu...컨텐트 협업플랫폼 Amazon WorkDocs 활용하기 - 박상희 상무, 한글과컴퓨터 / Ben Fitzpatrick, Head of Bu...
컨텐트 협업플랫폼 Amazon WorkDocs 활용하기 - 박상희 상무, 한글과컴퓨터 / Ben Fitzpatrick, Head of Bu...Amazon Web Services Korea
 
そんなトランザクションマネージャで大丈夫か?
そんなトランザクションマネージャで大丈夫か?そんなトランザクションマネージャで大丈夫か?
そんなトランザクションマネージャで大丈夫か?takezoe
 
Datadog을 활용한 Elastic Kubernetes Service(EKS)에서의 마이크로서비스 통합 가시성 - 정영석 시니어 세일즈 ...
Datadog을 활용한 Elastic Kubernetes Service(EKS)에서의 마이크로서비스 통합 가시성 - 정영석 시니어 세일즈 ...Datadog을 활용한 Elastic Kubernetes Service(EKS)에서의 마이크로서비스 통합 가시성 - 정영석 시니어 세일즈 ...
Datadog을 활용한 Elastic Kubernetes Service(EKS)에서의 마이크로서비스 통합 가시성 - 정영석 시니어 세일즈 ...Amazon Web Services Korea
 
AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015
AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015 AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015
AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015 Amazon Web Services Korea
 
AWS Black Belt Online Seminar 2017 Amazon Athena
AWS Black Belt Online Seminar 2017 Amazon AthenaAWS Black Belt Online Seminar 2017 Amazon Athena
AWS Black Belt Online Seminar 2017 Amazon AthenaAmazon Web Services Japan
 
MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?
MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?
MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?VMware Tanzu Korea
 
실전 프로젝트로 이야기하는 AWS IoT::김민성::AWS Summit Seoul 2018
실전 프로젝트로 이야기하는 AWS IoT::김민성::AWS Summit Seoul 2018실전 프로젝트로 이야기하는 AWS IoT::김민성::AWS Summit Seoul 2018
실전 프로젝트로 이야기하는 AWS IoT::김민성::AWS Summit Seoul 2018Amazon Web Services Korea
 
Trends_of_MLOps_tech_in_business
Trends_of_MLOps_tech_in_businessTrends_of_MLOps_tech_in_business
Trends_of_MLOps_tech_in_businessSANG WON PARK
 
IDC 서버 몽땅 AWS로 이전하기 위한 5가지 방법 - 윤석찬 (AWS 테크에반젤리스트)
IDC 서버 몽땅 AWS로 이전하기 위한 5가지 방법 - 윤석찬 (AWS 테크에반젤리스트) IDC 서버 몽땅 AWS로 이전하기 위한 5가지 방법 - 윤석찬 (AWS 테크에반젤리스트)
IDC 서버 몽땅 AWS로 이전하기 위한 5가지 방법 - 윤석찬 (AWS 테크에반젤리스트) Amazon Web Services Korea
 
.NET Core時代のCI/CD
.NET Core時代のCI/CD.NET Core時代のCI/CD
.NET Core時代のCI/CDYuta Matsumura
 
AWS Lambda 내부 동작 방식 및 활용 방법 자세히 살펴 보기 - 김일호 솔루션즈 아키텍트 매니저, AWS :: AWS Summit ...
AWS Lambda 내부 동작 방식 및 활용 방법 자세히 살펴 보기 - 김일호 솔루션즈 아키텍트 매니저, AWS :: AWS Summit ...AWS Lambda 내부 동작 방식 및 활용 방법 자세히 살펴 보기 - 김일호 솔루션즈 아키텍트 매니저, AWS :: AWS Summit ...
AWS Lambda 내부 동작 방식 및 활용 방법 자세히 살펴 보기 - 김일호 솔루션즈 아키텍트 매니저, AWS :: AWS Summit ...Amazon Web Services Korea
 
클라우드 네이티브 전환 요소 및 성공적인 쿠버네티스 도입 전략
클라우드 네이티브 전환 요소 및 성공적인 쿠버네티스 도입 전략클라우드 네이티브 전환 요소 및 성공적인 쿠버네티스 도입 전략
클라우드 네이티브 전환 요소 및 성공적인 쿠버네티스 도입 전략Open Source Consulting
 
Cache in API Gateway
Cache in API GatewayCache in API Gateway
Cache in API GatewayGilWon Oh
 
FIWARE 概要 - FIWARE WednesdayWebinars
FIWARE 概要 - FIWARE WednesdayWebinarsFIWARE 概要 - FIWARE WednesdayWebinars
FIWARE 概要 - FIWARE WednesdayWebinarsfisuda
 
[115]쿠팡 서비스 클라우드 마이그레이션 통해 배운것들
[115]쿠팡 서비스 클라우드 마이그레이션 통해 배운것들[115]쿠팡 서비스 클라우드 마이그레이션 통해 배운것들
[115]쿠팡 서비스 클라우드 마이그레이션 통해 배운것들NAVER D2
 
AWS System Manager: Parameter Store를 사용한 AWS 구성 데이터 관리 기법 - 정창훈, 당근마켓 / 김대권, ...
AWS System Manager: Parameter Store를 사용한 AWS 구성 데이터 관리 기법 - 정창훈, 당근마켓 / 김대권, ...AWS System Manager: Parameter Store를 사용한 AWS 구성 데이터 관리 기법 - 정창훈, 당근마켓 / 김대권, ...
AWS System Manager: Parameter Store를 사용한 AWS 구성 데이터 관리 기법 - 정창훈, 당근마켓 / 김대권, ...Amazon Web Services Korea
 
20200818 AWS Black Belt Online Seminar AWS Shield Advanced
20200818 AWS Black Belt Online Seminar AWS Shield Advanced20200818 AWS Black Belt Online Seminar AWS Shield Advanced
20200818 AWS Black Belt Online Seminar AWS Shield AdvancedAmazon Web Services Japan
 

Tendances (20)

판교 개발자 데이 – Aws가 제안하는 서버리스 아키텍처 – 김필중
판교 개발자 데이 – Aws가 제안하는 서버리스 아키텍처 – 김필중판교 개발자 데이 – Aws가 제안하는 서버리스 아키텍처 – 김필중
판교 개발자 데이 – Aws가 제안하는 서버리스 아키텍처 – 김필중
 
마이크로서비스를 위한 AWS 아키텍처 패턴 및 모범 사례 - AWS Summit Seoul 2017
마이크로서비스를 위한 AWS 아키텍처 패턴 및 모범 사례 - AWS Summit Seoul 2017마이크로서비스를 위한 AWS 아키텍처 패턴 및 모범 사례 - AWS Summit Seoul 2017
마이크로서비스를 위한 AWS 아키텍처 패턴 및 모범 사례 - AWS Summit Seoul 2017
 
컨텐트 협업플랫폼 Amazon WorkDocs 활용하기 - 박상희 상무, 한글과컴퓨터 / Ben Fitzpatrick, Head of Bu...
컨텐트 협업플랫폼 Amazon WorkDocs 활용하기 - 박상희 상무, 한글과컴퓨터 / Ben Fitzpatrick, Head of Bu...컨텐트 협업플랫폼 Amazon WorkDocs 활용하기 - 박상희 상무, 한글과컴퓨터 / Ben Fitzpatrick, Head of Bu...
컨텐트 협업플랫폼 Amazon WorkDocs 활용하기 - 박상희 상무, 한글과컴퓨터 / Ben Fitzpatrick, Head of Bu...
 
そんなトランザクションマネージャで大丈夫か?
そんなトランザクションマネージャで大丈夫か?そんなトランザクションマネージャで大丈夫か?
そんなトランザクションマネージャで大丈夫か?
 
Datadog을 활용한 Elastic Kubernetes Service(EKS)에서의 마이크로서비스 통합 가시성 - 정영석 시니어 세일즈 ...
Datadog을 활용한 Elastic Kubernetes Service(EKS)에서의 마이크로서비스 통합 가시성 - 정영석 시니어 세일즈 ...Datadog을 활용한 Elastic Kubernetes Service(EKS)에서의 마이크로서비스 통합 가시성 - 정영석 시니어 세일즈 ...
Datadog을 활용한 Elastic Kubernetes Service(EKS)에서의 마이크로서비스 통합 가시성 - 정영석 시니어 세일즈 ...
 
AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015
AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015 AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015
AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015
 
AWS Black Belt Online Seminar 2017 Amazon Athena
AWS Black Belt Online Seminar 2017 Amazon AthenaAWS Black Belt Online Seminar 2017 Amazon Athena
AWS Black Belt Online Seminar 2017 Amazon Athena
 
MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?
MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?
MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?
 
실전 프로젝트로 이야기하는 AWS IoT::김민성::AWS Summit Seoul 2018
실전 프로젝트로 이야기하는 AWS IoT::김민성::AWS Summit Seoul 2018실전 프로젝트로 이야기하는 AWS IoT::김민성::AWS Summit Seoul 2018
실전 프로젝트로 이야기하는 AWS IoT::김민성::AWS Summit Seoul 2018
 
Introduction of sdlc
Introduction of sdlcIntroduction of sdlc
Introduction of sdlc
 
Trends_of_MLOps_tech_in_business
Trends_of_MLOps_tech_in_businessTrends_of_MLOps_tech_in_business
Trends_of_MLOps_tech_in_business
 
IDC 서버 몽땅 AWS로 이전하기 위한 5가지 방법 - 윤석찬 (AWS 테크에반젤리스트)
IDC 서버 몽땅 AWS로 이전하기 위한 5가지 방법 - 윤석찬 (AWS 테크에반젤리스트) IDC 서버 몽땅 AWS로 이전하기 위한 5가지 방법 - 윤석찬 (AWS 테크에반젤리스트)
IDC 서버 몽땅 AWS로 이전하기 위한 5가지 방법 - 윤석찬 (AWS 테크에반젤리스트)
 
.NET Core時代のCI/CD
.NET Core時代のCI/CD.NET Core時代のCI/CD
.NET Core時代のCI/CD
 
AWS Lambda 내부 동작 방식 및 활용 방법 자세히 살펴 보기 - 김일호 솔루션즈 아키텍트 매니저, AWS :: AWS Summit ...
AWS Lambda 내부 동작 방식 및 활용 방법 자세히 살펴 보기 - 김일호 솔루션즈 아키텍트 매니저, AWS :: AWS Summit ...AWS Lambda 내부 동작 방식 및 활용 방법 자세히 살펴 보기 - 김일호 솔루션즈 아키텍트 매니저, AWS :: AWS Summit ...
AWS Lambda 내부 동작 방식 및 활용 방법 자세히 살펴 보기 - 김일호 솔루션즈 아키텍트 매니저, AWS :: AWS Summit ...
 
클라우드 네이티브 전환 요소 및 성공적인 쿠버네티스 도입 전략
클라우드 네이티브 전환 요소 및 성공적인 쿠버네티스 도입 전략클라우드 네이티브 전환 요소 및 성공적인 쿠버네티스 도입 전략
클라우드 네이티브 전환 요소 및 성공적인 쿠버네티스 도입 전략
 
Cache in API Gateway
Cache in API GatewayCache in API Gateway
Cache in API Gateway
 
FIWARE 概要 - FIWARE WednesdayWebinars
FIWARE 概要 - FIWARE WednesdayWebinarsFIWARE 概要 - FIWARE WednesdayWebinars
FIWARE 概要 - FIWARE WednesdayWebinars
 
[115]쿠팡 서비스 클라우드 마이그레이션 통해 배운것들
[115]쿠팡 서비스 클라우드 마이그레이션 통해 배운것들[115]쿠팡 서비스 클라우드 마이그레이션 통해 배운것들
[115]쿠팡 서비스 클라우드 마이그레이션 통해 배운것들
 
AWS System Manager: Parameter Store를 사용한 AWS 구성 데이터 관리 기법 - 정창훈, 당근마켓 / 김대권, ...
AWS System Manager: Parameter Store를 사용한 AWS 구성 데이터 관리 기법 - 정창훈, 당근마켓 / 김대권, ...AWS System Manager: Parameter Store를 사용한 AWS 구성 데이터 관리 기법 - 정창훈, 당근마켓 / 김대권, ...
AWS System Manager: Parameter Store를 사용한 AWS 구성 데이터 관리 기법 - 정창훈, 당근마켓 / 김대권, ...
 
20200818 AWS Black Belt Online Seminar AWS Shield Advanced
20200818 AWS Black Belt Online Seminar AWS Shield Advanced20200818 AWS Black Belt Online Seminar AWS Shield Advanced
20200818 AWS Black Belt Online Seminar AWS Shield Advanced
 

En vedette

기술적 변화를 이끌어가기
기술적 변화를 이끌어가기기술적 변화를 이끌어가기
기술적 변화를 이끌어가기Jaewoo Ahn
 
Enterprise Docker
Enterprise DockerEnterprise Docker
Enterprise DockerLee Ji Eun
 
Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유
Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유
Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유Sang Seok Lim
 
Baseball data with r (@tech ver.) 공개본
Baseball data with r (@tech ver.) 공개본Baseball data with r (@tech ver.) 공개본
Baseball data with r (@tech ver.) 공개본경민 김
 
Command Line으로 분석하는 사용자 패턴
Command Line으로 분석하는 사용자 패턴Command Line으로 분석하는 사용자 패턴
Command Line으로 분석하는 사용자 패턴JeongMin Kwon
 
Node.js를 사용한 Big Data 사례연구
Node.js를 사용한 Big Data 사례연구Node.js를 사용한 Big Data 사례연구
Node.js를 사용한 Big Data 사례연구ByungJoon Lee
 
Front-End 개발의 괜찮은 선택 ES6 & React
Front-End 개발의 괜찮은 선택  ES6 & ReactFront-End 개발의 괜찮은 선택  ES6 & React
Front-End 개발의 괜찮은 선택 ES6 & React지수 윤
 
11st Legacy Application의 Spring Cloud 기반 MicroServices로 전환 개발 사례
11st Legacy Application의 Spring Cloud 기반 MicroServices로 전환 개발 사례11st Legacy Application의 Spring Cloud 기반 MicroServices로 전환 개발 사례
11st Legacy Application의 Spring Cloud 기반 MicroServices로 전환 개발 사례YongSung Yoon
 
코드로 인프라 관리하기 - 자동화 툴 소개
코드로 인프라 관리하기 - 자동화 툴 소개코드로 인프라 관리하기 - 자동화 툴 소개
코드로 인프라 관리하기 - 자동화 툴 소개태준 문
 
Syrup pay 인증 모듈 개발 사례
Syrup pay 인증 모듈 개발 사례Syrup pay 인증 모듈 개발 사례
Syrup pay 인증 모듈 개발 사례HyungTae Lim
 
Streaming platform Kafka in SK planet
Streaming platform Kafka in SK planetStreaming platform Kafka in SK planet
Streaming platform Kafka in SK planetByeongsu Kang
 
좌충우돌 ORM 개발기 2012 DAUM DEVON
좌충우돌 ORM 개발기 2012 DAUM DEVON좌충우돌 ORM 개발기 2012 DAUM DEVON
좌충우돌 ORM 개발기 2012 DAUM DEVONYounghan Kim
 
QnA blog using Django - ORM, 회원가입, 로그인/로그아웃
QnA blog using Django - ORM, 회원가입, 로그인/로그아웃QnA blog using Django - ORM, 회원가입, 로그인/로그아웃
QnA blog using Django - ORM, 회원가입, 로그인/로그아웃Kwangyoun Jung
 
Object Relational Mapping In Real World Applications
Object Relational Mapping In Real World ApplicationsObject Relational Mapping In Real World Applications
Object Relational Mapping In Real World ApplicationsPhilWinstanley
 
ORM을 활용할 경우의 설계, 개발 과정
ORM을 활용할 경우의 설계, 개발 과정ORM을 활용할 경우의 설계, 개발 과정
ORM을 활용할 경우의 설계, 개발 과정Javajigi Jaesung
 
What's new, what's hot in PHP 5.3
What's new, what's hot in PHP 5.3What's new, what's hot in PHP 5.3
What's new, what's hot in PHP 5.3Jeremy Coates
 
ORM: Object-relational mapping
ORM: Object-relational mappingORM: Object-relational mapping
ORM: Object-relational mappingAbhilash M A
 
JDXA, The KISS ORM for Android
JDXA, The KISS ORM for AndroidJDXA, The KISS ORM for Android
JDXA, The KISS ORM for AndroidDamodar Periwal
 
Object-Relational Mapping and Dependency Injection
Object-Relational Mapping and Dependency InjectionObject-Relational Mapping and Dependency Injection
Object-Relational Mapping and Dependency InjectionShane Church
 

En vedette (20)

기술적 변화를 이끌어가기
기술적 변화를 이끌어가기기술적 변화를 이끌어가기
기술적 변화를 이끌어가기
 
Enterprise Docker
Enterprise DockerEnterprise Docker
Enterprise Docker
 
Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유
Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유
Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유
 
Baseball data with r (@tech ver.) 공개본
Baseball data with r (@tech ver.) 공개본Baseball data with r (@tech ver.) 공개본
Baseball data with r (@tech ver.) 공개본
 
Command Line으로 분석하는 사용자 패턴
Command Line으로 분석하는 사용자 패턴Command Line으로 분석하는 사용자 패턴
Command Line으로 분석하는 사용자 패턴
 
Node.js를 사용한 Big Data 사례연구
Node.js를 사용한 Big Data 사례연구Node.js를 사용한 Big Data 사례연구
Node.js를 사용한 Big Data 사례연구
 
Front-End 개발의 괜찮은 선택 ES6 & React
Front-End 개발의 괜찮은 선택  ES6 & ReactFront-End 개발의 괜찮은 선택  ES6 & React
Front-End 개발의 괜찮은 선택 ES6 & React
 
11st Legacy Application의 Spring Cloud 기반 MicroServices로 전환 개발 사례
11st Legacy Application의 Spring Cloud 기반 MicroServices로 전환 개발 사례11st Legacy Application의 Spring Cloud 기반 MicroServices로 전환 개발 사례
11st Legacy Application의 Spring Cloud 기반 MicroServices로 전환 개발 사례
 
코드로 인프라 관리하기 - 자동화 툴 소개
코드로 인프라 관리하기 - 자동화 툴 소개코드로 인프라 관리하기 - 자동화 툴 소개
코드로 인프라 관리하기 - 자동화 툴 소개
 
Syrup pay 인증 모듈 개발 사례
Syrup pay 인증 모듈 개발 사례Syrup pay 인증 모듈 개발 사례
Syrup pay 인증 모듈 개발 사례
 
Streaming platform Kafka in SK planet
Streaming platform Kafka in SK planetStreaming platform Kafka in SK planet
Streaming platform Kafka in SK planet
 
좌충우돌 ORM 개발기 2012 DAUM DEVON
좌충우돌 ORM 개발기 2012 DAUM DEVON좌충우돌 ORM 개발기 2012 DAUM DEVON
좌충우돌 ORM 개발기 2012 DAUM DEVON
 
QnA blog using Django - ORM, 회원가입, 로그인/로그아웃
QnA blog using Django - ORM, 회원가입, 로그인/로그아웃QnA blog using Django - ORM, 회원가입, 로그인/로그아웃
QnA blog using Django - ORM, 회원가입, 로그인/로그아웃
 
Object Relational Mapping In Real World Applications
Object Relational Mapping In Real World ApplicationsObject Relational Mapping In Real World Applications
Object Relational Mapping In Real World Applications
 
ORM을 활용할 경우의 설계, 개발 과정
ORM을 활용할 경우의 설계, 개발 과정ORM을 활용할 경우의 설계, 개발 과정
ORM을 활용할 경우의 설계, 개발 과정
 
What's new, what's hot in PHP 5.3
What's new, what's hot in PHP 5.3What's new, what's hot in PHP 5.3
What's new, what's hot in PHP 5.3
 
ORM: Object-relational mapping
ORM: Object-relational mappingORM: Object-relational mapping
ORM: Object-relational mapping
 
JDXA, The KISS ORM for Android
JDXA, The KISS ORM for AndroidJDXA, The KISS ORM for Android
JDXA, The KISS ORM for Android
 
Object-Relational Mapping and Dependency Injection
Object-Relational Mapping and Dependency InjectionObject-Relational Mapping and Dependency Injection
Object-Relational Mapping and Dependency Injection
 
L18 Object Relational Mapping
L18 Object Relational MappingL18 Object Relational Mapping
L18 Object Relational Mapping
 

Similaire à SK플래닛_README_마이크로서비스 아키텍처로 개발하기

마이크로서비스 아키텍처로 개발하기
마이크로서비스 아키텍처로 개발하기마이크로서비스 아키텍처로 개발하기
마이크로서비스 아키텍처로 개발하기Jaewoo Ahn
 
AWS re:Invent 특집(2) – 서버리스(Serverless) 마이크로서비스를 위한 일곱 가지 모범 사례 (윤석찬)
AWS re:Invent 특집(2) – 서버리스(Serverless) 마이크로서비스를 위한 일곱 가지 모범 사례 (윤석찬)AWS re:Invent 특집(2) – 서버리스(Serverless) 마이크로서비스를 위한 일곱 가지 모범 사례 (윤석찬)
AWS re:Invent 특집(2) – 서버리스(Serverless) 마이크로서비스를 위한 일곱 가지 모범 사례 (윤석찬)Amazon Web Services Korea
 
개발자 지향 WAS : IBM WebSphere Liberty Server
개발자 지향 WAS : IBM WebSphere Liberty Server개발자 지향 WAS : IBM WebSphere Liberty Server
개발자 지향 WAS : IBM WebSphere Liberty ServerJungWoon Lee
 
[2017 AWS Startup Day] 서버리스 마이크로서비스로 일당백 개발조직 만들기
[2017 AWS Startup Day] 서버리스 마이크로서비스로 일당백 개발조직 만들기[2017 AWS Startup Day] 서버리스 마이크로서비스로 일당백 개발조직 만들기
[2017 AWS Startup Day] 서버리스 마이크로서비스로 일당백 개발조직 만들기Amazon Web Services Korea
 
Azure Databases for PostgreSQL MYSQL and MariaDB
Azure Databases for PostgreSQL MYSQL and MariaDBAzure Databases for PostgreSQL MYSQL and MariaDB
Azure Databases for PostgreSQL MYSQL and MariaDBrockplace
 
Cloud-Barista 제6차 오픈 컨퍼런스 : 멀티클라우드 인프라 서비스 연동 (CB-Spider)
Cloud-Barista 제6차 오픈 컨퍼런스 : 멀티클라우드 인프라 서비스 연동 (CB-Spider)Cloud-Barista 제6차 오픈 컨퍼런스 : 멀티클라우드 인프라 서비스 연동 (CB-Spider)
Cloud-Barista 제6차 오픈 컨퍼런스 : 멀티클라우드 인프라 서비스 연동 (CB-Spider)Cloud-Barista Community
 
Aws se-aws 경험기
Aws se-aws 경험기Aws se-aws 경험기
Aws se-aws 경험기YoungJin Lee
 
Cloud-Barista 제1차 오픈세미나 - CB-Spider : 멀티 클라우드 인프라 연동 프레임워크(1st Open Seminar, ...
Cloud-Barista 제1차 오픈세미나 - CB-Spider : 멀티 클라우드 인프라 연동 프레임워크(1st Open Seminar, ...Cloud-Barista 제1차 오픈세미나 - CB-Spider : 멀티 클라우드 인프라 연동 프레임워크(1st Open Seminar, ...
Cloud-Barista 제1차 오픈세미나 - CB-Spider : 멀티 클라우드 인프라 연동 프레임워크(1st Open Seminar, ...Cloud-Barista Community
 
데브옵스(DevOps) 문화 모범 사례와 구현 도구 살펴보기 – 박선준 :: AWS Builders Online Series
데브옵스(DevOps) 문화 모범 사례와 구현 도구 살펴보기 – 박선준 :: AWS Builders Online Series데브옵스(DevOps) 문화 모범 사례와 구현 도구 살펴보기 – 박선준 :: AWS Builders Online Series
데브옵스(DevOps) 문화 모범 사례와 구현 도구 살펴보기 – 박선준 :: AWS Builders Online SeriesAmazon Web Services Korea
 
유엔진 오픈소스 클라우드 플랫폼 (uEngine Microservice architecture Platform)
유엔진 오픈소스 클라우드 플랫폼 (uEngine Microservice architecture Platform)유엔진 오픈소스 클라우드 플랫폼 (uEngine Microservice architecture Platform)
유엔진 오픈소스 클라우드 플랫폼 (uEngine Microservice architecture Platform)uEngine Solutions
 
클라우드와 마이크로 서비스를 위한 새로운 시대의 경량화 WAS - IBM WAS Liberty 서버
클라우드와 마이크로 서비스를 위한 새로운 시대의 경량화 WAS - IBM WAS Liberty 서버클라우드와 마이크로 서비스를 위한 새로운 시대의 경량화 WAS - IBM WAS Liberty 서버
클라우드와 마이크로 서비스를 위한 새로운 시대의 경량화 WAS - IBM WAS Liberty 서버JungWoon Lee
 
Microservice Architecture
Microservice ArchitectureMicroservice Architecture
Microservice ArchitectureYoonsung Jung
 
[Td 2015]구름 위로 올려 어느 곳에서든 연결되는 서비스 azure 앱 서비스(이종인)
[Td 2015]구름 위로 올려 어느 곳에서든 연결되는 서비스 azure 앱 서비스(이종인)[Td 2015]구름 위로 올려 어느 곳에서든 연결되는 서비스 azure 앱 서비스(이종인)
[Td 2015]구름 위로 올려 어느 곳에서든 연결되는 서비스 azure 앱 서비스(이종인)Sang Don Kim
 
AWS와 함께하는 엔터프라이즈 비즈니스 어플리케이션 도입하기 :: 김양용 :: AWS Summit Seoul 2016
AWS와 함께하는 엔터프라이즈 비즈니스 어플리케이션 도입하기 :: 김양용 :: AWS Summit Seoul 2016AWS와 함께하는 엔터프라이즈 비즈니스 어플리케이션 도입하기 :: 김양용 :: AWS Summit Seoul 2016
AWS와 함께하는 엔터프라이즈 비즈니스 어플리케이션 도입하기 :: 김양용 :: AWS Summit Seoul 2016Amazon Web Services Korea
 
AWS 12월 웨비나 │성공적인 마이그레이션을 위한 클라우드 아키텍처 및 운영 고도화
AWS 12월 웨비나 │성공적인 마이그레이션을 위한 클라우드 아키텍처 및 운영 고도화AWS 12월 웨비나 │성공적인 마이그레이션을 위한 클라우드 아키텍처 및 운영 고도화
AWS 12월 웨비나 │성공적인 마이그레이션을 위한 클라우드 아키텍처 및 운영 고도화Amazon Web Services Korea
 
Cloud-Barista 제2차 오픈 컨퍼런스 : CB-Waterstrider-멀티 클라우드 서비스 공통 플랫폼 웹도구(Cloud-Bari...
Cloud-Barista 제2차 오픈 컨퍼런스 : CB-Waterstrider-멀티 클라우드 서비스 공통 플랫폼 웹도구(Cloud-Bari...Cloud-Barista 제2차 오픈 컨퍼런스 : CB-Waterstrider-멀티 클라우드 서비스 공통 플랫폼 웹도구(Cloud-Bari...
Cloud-Barista 제2차 오픈 컨퍼런스 : CB-Waterstrider-멀티 클라우드 서비스 공통 플랫폼 웹도구(Cloud-Bari...Cloud-Barista Community
 
Internet Scale Service Arichitecture
Internet Scale Service ArichitectureInternet Scale Service Arichitecture
Internet Scale Service ArichitectureDaeMyung Kang
 
클라우드 환경으로 데이터베이스 이전하기 - 강민석, AWS SR. Database SA
클라우드 환경으로 데이터베이스 이전하기 - 강민석, AWS SR. Database SA클라우드 환경으로 데이터베이스 이전하기 - 강민석, AWS SR. Database SA
클라우드 환경으로 데이터베이스 이전하기 - 강민석, AWS SR. Database SAAmazon Web Services Korea
 
Cloud-Barista 제2차 오픈 컨퍼런스 : Cloud-Barista 기술 및 커뮤니티 소개(Multi-Cloud Service Co...
Cloud-Barista 제2차 오픈 컨퍼런스 : Cloud-Barista 기술 및 커뮤니티 소개(Multi-Cloud Service Co...Cloud-Barista 제2차 오픈 컨퍼런스 : Cloud-Barista 기술 및 커뮤니티 소개(Multi-Cloud Service Co...
Cloud-Barista 제2차 오픈 컨퍼런스 : Cloud-Barista 기술 및 커뮤니티 소개(Multi-Cloud Service Co...Cloud-Barista Community
 

Similaire à SK플래닛_README_마이크로서비스 아키텍처로 개발하기 (20)

마이크로서비스 아키텍처로 개발하기
마이크로서비스 아키텍처로 개발하기마이크로서비스 아키텍처로 개발하기
마이크로서비스 아키텍처로 개발하기
 
AWS re:Invent 특집(2) – 서버리스(Serverless) 마이크로서비스를 위한 일곱 가지 모범 사례 (윤석찬)
AWS re:Invent 특집(2) – 서버리스(Serverless) 마이크로서비스를 위한 일곱 가지 모범 사례 (윤석찬)AWS re:Invent 특집(2) – 서버리스(Serverless) 마이크로서비스를 위한 일곱 가지 모범 사례 (윤석찬)
AWS re:Invent 특집(2) – 서버리스(Serverless) 마이크로서비스를 위한 일곱 가지 모범 사례 (윤석찬)
 
개발자 지향 WAS : IBM WebSphere Liberty Server
개발자 지향 WAS : IBM WebSphere Liberty Server개발자 지향 WAS : IBM WebSphere Liberty Server
개발자 지향 WAS : IBM WebSphere Liberty Server
 
[2017 AWS Startup Day] 서버리스 마이크로서비스로 일당백 개발조직 만들기
[2017 AWS Startup Day] 서버리스 마이크로서비스로 일당백 개발조직 만들기[2017 AWS Startup Day] 서버리스 마이크로서비스로 일당백 개발조직 만들기
[2017 AWS Startup Day] 서버리스 마이크로서비스로 일당백 개발조직 만들기
 
Azure Databases for PostgreSQL MYSQL and MariaDB
Azure Databases for PostgreSQL MYSQL and MariaDBAzure Databases for PostgreSQL MYSQL and MariaDB
Azure Databases for PostgreSQL MYSQL and MariaDB
 
Cloud-Barista 제6차 오픈 컨퍼런스 : 멀티클라우드 인프라 서비스 연동 (CB-Spider)
Cloud-Barista 제6차 오픈 컨퍼런스 : 멀티클라우드 인프라 서비스 연동 (CB-Spider)Cloud-Barista 제6차 오픈 컨퍼런스 : 멀티클라우드 인프라 서비스 연동 (CB-Spider)
Cloud-Barista 제6차 오픈 컨퍼런스 : 멀티클라우드 인프라 서비스 연동 (CB-Spider)
 
Aws se-aws 경험기
Aws se-aws 경험기Aws se-aws 경험기
Aws se-aws 경험기
 
Cloud-Barista 제1차 오픈세미나 - CB-Spider : 멀티 클라우드 인프라 연동 프레임워크(1st Open Seminar, ...
Cloud-Barista 제1차 오픈세미나 - CB-Spider : 멀티 클라우드 인프라 연동 프레임워크(1st Open Seminar, ...Cloud-Barista 제1차 오픈세미나 - CB-Spider : 멀티 클라우드 인프라 연동 프레임워크(1st Open Seminar, ...
Cloud-Barista 제1차 오픈세미나 - CB-Spider : 멀티 클라우드 인프라 연동 프레임워크(1st Open Seminar, ...
 
데브옵스(DevOps) 문화 모범 사례와 구현 도구 살펴보기 – 박선준 :: AWS Builders Online Series
데브옵스(DevOps) 문화 모범 사례와 구현 도구 살펴보기 – 박선준 :: AWS Builders Online Series데브옵스(DevOps) 문화 모범 사례와 구현 도구 살펴보기 – 박선준 :: AWS Builders Online Series
데브옵스(DevOps) 문화 모범 사례와 구현 도구 살펴보기 – 박선준 :: AWS Builders Online Series
 
유엔진 오픈소스 클라우드 플랫폼 (uEngine Microservice architecture Platform)
유엔진 오픈소스 클라우드 플랫폼 (uEngine Microservice architecture Platform)유엔진 오픈소스 클라우드 플랫폼 (uEngine Microservice architecture Platform)
유엔진 오픈소스 클라우드 플랫폼 (uEngine Microservice architecture Platform)
 
클라우드와 마이크로 서비스를 위한 새로운 시대의 경량화 WAS - IBM WAS Liberty 서버
클라우드와 마이크로 서비스를 위한 새로운 시대의 경량화 WAS - IBM WAS Liberty 서버클라우드와 마이크로 서비스를 위한 새로운 시대의 경량화 WAS - IBM WAS Liberty 서버
클라우드와 마이크로 서비스를 위한 새로운 시대의 경량화 WAS - IBM WAS Liberty 서버
 
Microservice Architecture
Microservice ArchitectureMicroservice Architecture
Microservice Architecture
 
[Td 2015]구름 위로 올려 어느 곳에서든 연결되는 서비스 azure 앱 서비스(이종인)
[Td 2015]구름 위로 올려 어느 곳에서든 연결되는 서비스 azure 앱 서비스(이종인)[Td 2015]구름 위로 올려 어느 곳에서든 연결되는 서비스 azure 앱 서비스(이종인)
[Td 2015]구름 위로 올려 어느 곳에서든 연결되는 서비스 azure 앱 서비스(이종인)
 
AWS와 함께하는 엔터프라이즈 비즈니스 어플리케이션 도입하기 :: 김양용 :: AWS Summit Seoul 2016
AWS와 함께하는 엔터프라이즈 비즈니스 어플리케이션 도입하기 :: 김양용 :: AWS Summit Seoul 2016AWS와 함께하는 엔터프라이즈 비즈니스 어플리케이션 도입하기 :: 김양용 :: AWS Summit Seoul 2016
AWS와 함께하는 엔터프라이즈 비즈니스 어플리케이션 도입하기 :: 김양용 :: AWS Summit Seoul 2016
 
AWS 12월 웨비나 │성공적인 마이그레이션을 위한 클라우드 아키텍처 및 운영 고도화
AWS 12월 웨비나 │성공적인 마이그레이션을 위한 클라우드 아키텍처 및 운영 고도화AWS 12월 웨비나 │성공적인 마이그레이션을 위한 클라우드 아키텍처 및 운영 고도화
AWS 12월 웨비나 │성공적인 마이그레이션을 위한 클라우드 아키텍처 및 운영 고도화
 
Cloud-Barista 제2차 오픈 컨퍼런스 : CB-Waterstrider-멀티 클라우드 서비스 공통 플랫폼 웹도구(Cloud-Bari...
Cloud-Barista 제2차 오픈 컨퍼런스 : CB-Waterstrider-멀티 클라우드 서비스 공통 플랫폼 웹도구(Cloud-Bari...Cloud-Barista 제2차 오픈 컨퍼런스 : CB-Waterstrider-멀티 클라우드 서비스 공통 플랫폼 웹도구(Cloud-Bari...
Cloud-Barista 제2차 오픈 컨퍼런스 : CB-Waterstrider-멀티 클라우드 서비스 공통 플랫폼 웹도구(Cloud-Bari...
 
Internet Scale Service Arichitecture
Internet Scale Service ArichitectureInternet Scale Service Arichitecture
Internet Scale Service Arichitecture
 
클라우드 환경으로 데이터베이스 이전하기 - 강민석, AWS SR. Database SA
클라우드 환경으로 데이터베이스 이전하기 - 강민석, AWS SR. Database SA클라우드 환경으로 데이터베이스 이전하기 - 강민석, AWS SR. Database SA
클라우드 환경으로 데이터베이스 이전하기 - 강민석, AWS SR. Database SA
 
Cloud-Barista 제2차 오픈 컨퍼런스 : Cloud-Barista 기술 및 커뮤니티 소개(Multi-Cloud Service Co...
Cloud-Barista 제2차 오픈 컨퍼런스 : Cloud-Barista 기술 및 커뮤니티 소개(Multi-Cloud Service Co...Cloud-Barista 제2차 오픈 컨퍼런스 : Cloud-Barista 기술 및 커뮤니티 소개(Multi-Cloud Service Co...
Cloud-Barista 제2차 오픈 컨퍼런스 : Cloud-Barista 기술 및 커뮤니티 소개(Multi-Cloud Service Co...
 
Serverless Architecture - 김현민
Serverless Architecture - 김현민Serverless Architecture - 김현민
Serverless Architecture - 김현민
 

Plus de Lee Ji Eun

유한 상태 기반의 한국어 형태소 분석기_이상호
유한 상태 기반의 한국어 형태소 분석기_이상호유한 상태 기반의 한국어 형태소 분석기_이상호
유한 상태 기반의 한국어 형태소 분석기_이상호Lee Ji Eun
 
컨텐츠 기반 A/B 테스트 구현 사례
컨텐츠 기반 A/B 테스트 구현 사례 컨텐츠 기반 A/B 테스트 구현 사례
컨텐츠 기반 A/B 테스트 구현 사례 Lee Ji Eun
 
Google AlphaGo, 어떻게 동작할까요?
Google AlphaGo, 어떻게 동작할까요?Google AlphaGo, 어떻게 동작할까요?
Google AlphaGo, 어떻게 동작할까요?Lee Ji Eun
 
FIDO 생체인증 기술 개발 사례
FIDO 생체인증 기술 개발 사례FIDO 생체인증 기술 개발 사례
FIDO 생체인증 기술 개발 사례Lee Ji Eun
 
납땜하는 개발자 이야기 @Tech판교
납땜하는 개발자 이야기 @Tech판교납땜하는 개발자 이야기 @Tech판교
납땜하는 개발자 이야기 @Tech판교Lee Ji Eun
 
T map network graph_t map spider 프로젝트 at_tech
T map network graph_t map spider 프로젝트 at_techT map network graph_t map spider 프로젝트 at_tech
T map network graph_t map spider 프로젝트 at_techLee Ji Eun
 
FIDO기반 생체인식 인증기술_SK플래닛@tech세미나판교
FIDO기반 생체인식 인증기술_SK플래닛@tech세미나판교FIDO기반 생체인식 인증기술_SK플래닛@tech세미나판교
FIDO기반 생체인식 인증기술_SK플래닛@tech세미나판교Lee Ji Eun
 
Deep learning 기반TmapPOI 추천기술개발사례
Deep learning 기반TmapPOI 추천기술개발사례Deep learning 기반TmapPOI 추천기술개발사례
Deep learning 기반TmapPOI 추천기술개발사례Lee Ji Eun
 
반응형 웹 기술 이해 V.2
반응형 웹 기술 이해 V.2반응형 웹 기술 이해 V.2
반응형 웹 기술 이해 V.2Lee Ji Eun
 
구글 인박스 히드라 프로그래밍
구글 인박스 히드라 프로그래밍구글 인박스 히드라 프로그래밍
구글 인박스 히드라 프로그래밍Lee Ji Eun
 
세션3 node.js의 의미와 자바의 대안
세션3 node.js의 의미와 자바의 대안세션3 node.js의 의미와 자바의 대안
세션3 node.js의 의미와 자바의 대안Lee Ji Eun
 
세션2 sencha touch 클라우드, sencha.io
세션2 sencha touch 클라우드, sencha.io세션2 sencha touch 클라우드, sencha.io
세션2 sencha touch 클라우드, sencha.ioLee Ji Eun
 
안드로이드 오픈마켓_보안이슈
안드로이드 오픈마켓_보안이슈안드로이드 오픈마켓_보안이슈
안드로이드 오픈마켓_보안이슈Lee Ji Eun
 
모바일광고플랫폼
모바일광고플랫폼모바일광고플랫폼
모바일광고플랫폼Lee Ji Eun
 
20120512 공개sw개발자대회 sk플래닛기업과제소개
20120512 공개sw개발자대회 sk플래닛기업과제소개20120512 공개sw개발자대회 sk플래닛기업과제소개
20120512 공개sw개발자대회 sk플래닛기업과제소개Lee Ji Eun
 

Plus de Lee Ji Eun (15)

유한 상태 기반의 한국어 형태소 분석기_이상호
유한 상태 기반의 한국어 형태소 분석기_이상호유한 상태 기반의 한국어 형태소 분석기_이상호
유한 상태 기반의 한국어 형태소 분석기_이상호
 
컨텐츠 기반 A/B 테스트 구현 사례
컨텐츠 기반 A/B 테스트 구현 사례 컨텐츠 기반 A/B 테스트 구현 사례
컨텐츠 기반 A/B 테스트 구현 사례
 
Google AlphaGo, 어떻게 동작할까요?
Google AlphaGo, 어떻게 동작할까요?Google AlphaGo, 어떻게 동작할까요?
Google AlphaGo, 어떻게 동작할까요?
 
FIDO 생체인증 기술 개발 사례
FIDO 생체인증 기술 개발 사례FIDO 생체인증 기술 개발 사례
FIDO 생체인증 기술 개발 사례
 
납땜하는 개발자 이야기 @Tech판교
납땜하는 개발자 이야기 @Tech판교납땜하는 개발자 이야기 @Tech판교
납땜하는 개발자 이야기 @Tech판교
 
T map network graph_t map spider 프로젝트 at_tech
T map network graph_t map spider 프로젝트 at_techT map network graph_t map spider 프로젝트 at_tech
T map network graph_t map spider 프로젝트 at_tech
 
FIDO기반 생체인식 인증기술_SK플래닛@tech세미나판교
FIDO기반 생체인식 인증기술_SK플래닛@tech세미나판교FIDO기반 생체인식 인증기술_SK플래닛@tech세미나판교
FIDO기반 생체인식 인증기술_SK플래닛@tech세미나판교
 
Deep learning 기반TmapPOI 추천기술개발사례
Deep learning 기반TmapPOI 추천기술개발사례Deep learning 기반TmapPOI 추천기술개발사례
Deep learning 기반TmapPOI 추천기술개발사례
 
반응형 웹 기술 이해 V.2
반응형 웹 기술 이해 V.2반응형 웹 기술 이해 V.2
반응형 웹 기술 이해 V.2
 
구글 인박스 히드라 프로그래밍
구글 인박스 히드라 프로그래밍구글 인박스 히드라 프로그래밍
구글 인박스 히드라 프로그래밍
 
세션3 node.js의 의미와 자바의 대안
세션3 node.js의 의미와 자바의 대안세션3 node.js의 의미와 자바의 대안
세션3 node.js의 의미와 자바의 대안
 
세션2 sencha touch 클라우드, sencha.io
세션2 sencha touch 클라우드, sencha.io세션2 sencha touch 클라우드, sencha.io
세션2 sencha touch 클라우드, sencha.io
 
안드로이드 오픈마켓_보안이슈
안드로이드 오픈마켓_보안이슈안드로이드 오픈마켓_보안이슈
안드로이드 오픈마켓_보안이슈
 
모바일광고플랫폼
모바일광고플랫폼모바일광고플랫폼
모바일광고플랫폼
 
20120512 공개sw개발자대회 sk플래닛기업과제소개
20120512 공개sw개발자대회 sk플래닛기업과제소개20120512 공개sw개발자대회 sk플래닛기업과제소개
20120512 공개sw개발자대회 sk플래닛기업과제소개
 

SK플래닛_README_마이크로서비스 아키텍처로 개발하기

  • 2. 오늘 얘기할 내용은 • 마이크로 서비스 아키텍처란? • 장단점은? • 무엇이 필요하고, 어떤 점을 고려해야 하는지? • 우리는 어떻게 하고 있는지?
  • 3. WAS 전통적인 Web App 아키텍처 Browser/ Client WAR UI A Service A Repository Database A
  • 5. WAS WAS 기능 추가 Browser/ Client WAR UI A Service A Repository Database Load balancer AB Service B Repository B
  • 6. 시스템 연계/통합 WAS WAS Browser/ Client WAR UI A Service A Repository Database Load balancer AB Service B Repository B D System C System
  • 7. 시스템 연계/통합 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
  • 8. 문제점 • 코드가 너무 커져서 유지보수하기 힘들어요. • 시스템을 분리하고 싶어요. • DB를 분리하고 싶어요. • 연계 시스템이 변경된대요. • 연계 시스템이 장애나서 우리 서비스도 장애예요. • 사소한 수정인데도 전체 배포를 하고, QA를 거쳐야 해요. • 새로운 걸 추가하는 건 상관없는데, 기존 로직/데이터를 변경하면 무슨 문제가 생길지 몰라요. • 저희도 새로운 버전/기술을 써보고 싶은데…
  • 9. 가면 갈수록 • 뭔가 바꾸는게 두려워진다. • 개발자들이 구닥다리 기술의 족쇄에서 벗어나지 못하고, 기술 격차는 계속 벌어진다. • 모든 것은 ‘차세대’가 해결해야 줄 것이다. (정말?)
  • 10. 나랑 상관없는 상상 속 단어들 Domain Driven Design Continuous Delivery On-demand Virtualization Elastic, Scalable, Resilience Polyglot Programming Infrastructure Automation Agile Development Reusability Self-government Team
  • 11. 마이크로 서비스 아키텍처의 배경 Domain Driven Design Continuous Delivery On-demand Virtualization Elastic, Scalable, Resilience Polyglot Programming Infrastructure Automation Agile Development Reusability Self-government Team
  • 13. Y축 확장 WAS WAR UI A Service A Repository Database AB Service B Repository B
  • 14. Y축 확장 Database A WAS WAR UI A Service A Repository WAS WAR B Service B Repository Database B
  • 15. 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
  • 16. 마이크로 서비스란? • 작고(small) • API로 다른 서비스와 연계하며(communicate with APIs) • 자율적이며(autonomous) • 한 가지 일을 잘하는데 초점을 맞춘 서비스(focused on doing one thing well)
  • 17. 장점 • Technology Heterogeneity • Resilience • Scaling • Ease of Deployment • Organizational Alignment • Composability • Replaceability
  • 18. 단점 • Complexity • Multiple Database & Transaction Management • Complicated Test • Require Automation for Deploy/Operation • Hard to develop features span multiple services
  • 19. 이거 SOA 얘기 아니에요? • 비슷하지만, 달라요. • SOA는 개념 상으로는 잘못되지 않았어요. • 다만 방식이 잘못되었을 뿐이죠. – SOAP Protocol – WS-* – Vendor-Driven – ESB가 모든 걸 다 해결해줄 거라는 잘못된 믿음 (그렇게 선전했던 나쁜 XX)
  • 20. MSA는 • Vendor Driven -> Service Company Driven • 오픈테크놀로지 기반 • SOAP/XML vs. REST/JSON • ‘스펙 먼저’가 아닌 ‘현실에서 검증된 Practice들’의 모음 • Agile 개념과의 결합 • Cloud 환경의 활용
  • 21. 야채샐러드하고요, 피자 1개, 햄버거 2개, 생크림케이크 주세요. 피자랑 샐러드는 같이 주세요. 햄버거 1개는 마요네즈 빼주세요. 케이크에는 딸기 토핑을 추가해주세고요. <SOAP 주문서> <서빙 테이블=3 주문번호=1234> <서빙 1> <동시에> <주문 1>야채샐러드, 수량 1</주문 1> <주문 2>피자<Convert>Pizza</Convert></주문 2> </동시에> </서빙 1> <서빙 2> <주문 3>햄버거2(1개는 마요네즈제외)</주문 3> </서빙 2> <서빙 3> <주문 4>생크림케이크<토핑><딸기>/토핑></주문 4> </서빙 3> </서빙> </SOAP 주문서> SOA with ESB 샐러드용 주문서 햄버거용 주문서 피자용 주문서 케이크용 주문서
  • 22. Event Broker orderReceived readyToServe orderServed GET /vendors/bakery/menu/cakes?q=strawberry+topping GET /menus POST /orders [ { vendor : “pizzaria”, items : [ { item : “피자”, count : 1 } ] }, { vendor : “salad”, items : [ { item : “샐러드”, count : 1 } ] } ] POST /vendors/burger/orders [ items : [ { item : “햄버거”, count : 1 } , { item : “햄버거”, count : 1 , option : “마요네즈 제외” } ] }, ] POST /vendors/bakery/orders [ items : [ { item : “생크림케이크”, count : 1 , option : “딸기토핑” } ] }, ] MSA with API Gateway
  • 23. 마이크로 서비스 모델링 • Domain Driven Design • Bounded Context • Contract-First(API-First) Design • Decomposed database • Event-Driven Architecture
  • 24. 모델링/구현 Tip • API를 먼저 정의하라. • API를 REST API Maturity Level 2 이상이 되도록 강제화하라. • API 문서를 유지하라(예: Swagger) • ORM을 활용하라 • DB에 너무 의존하지 마라 • 도메인 내부에서만 의미있는 값을 외부에 노출하는 것을 지양하라 • 마이크로 서비스가 별다른 설정 없이 바로 기동가능하게 하라 (예: Java의 경우, Spring Boot + Embedded WAS 활용)
  • 25. 클라이언트-서비스 간 통합 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 …
  • 26. 클라이언트-서비스 간 통합 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 …
  • 27. 클라이언트-서비스 간 통합 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
  • 28. 서비스 간 통신 Service A Service B HTTP Request/Response Event (Message) Broker Publish Event Service C Service D Subscribe Event
  • 31. MSA를 선택한 이유 Frontend/Backend 분리 회사의 Engineer Tech Tree와 동기화 코드 양이 커지고, 중복코드가 발생 코드의 양을 줄여서 누구나 쉽게 파악하도록 팀 전체의 Project Working Group별 Product 시스템 간 연계 증대 API 기반의 Contract 관리를 강제화 새로운 기술에 대한 도입 욕구 Micro-Service 단위로 구현에 자율성 부여 (Polyglot) 재사용성 향상 및 지속적인 발전 Micro-Service 단위의 재사용, 자유로운 리팩토링 회사 인프라의 뒷받침 On-Premise Cloud, CI와 연계된 배포 자동화(Jarvis), 향후 Docker와 같은 Container 기술과 연계
  • 32. 어떻게 개발하나요? Backend 개발자Frontend 개발자 UserStory 검토 Contract/API 설계 Frontend 개발 Backend 개발 Mock/Unit Test Unit Test API 연동 Load Test UserStory 종료
  • 34. Contract/API의 설계/공유 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
  • 35. 진짜 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
  • 36. 네, 합니다. 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
  • 37. 개발 환경의 문제 • 개발하다 보면, 여러 개의 마이크로서비스들을 구동시켜야 하는 경우가 많다. • 마이크로서비스마다 설정/기동방식이 상이한 경우, 다소 괴롭다. • 구동된 마이크로 서비스들을 위한 API Gateway를 빠르게 설정하기 • git clone/pull하는 것도 일이다.
  • 38. 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
  • 39. Whitebase • URL-based Router + Proxy Authentication Versioning Logging Routing Composition
  • 40. 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
  • 41. 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
  • 42. 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
  • 43. 변화 요약 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
  • 44. MSA로 진행하며 얻은 것 • 팀원들이 다루는 기술 범위가 크게 확장 • 최신 기술의 도입/실험에 부담이 없음 • 팀원 간의 경험 공유 활성화 • API 디자인 능력 향상 • 향후 변화/확장에 대해서도 아키텍처적 변화 없이 대응이 가능 • 높은 재활용성/조합 지원 • 향후 사내/대외 오픈소스화가 가능할 듯한 솔루션들
  • 45. MSA로 진행 시의 단점 • 초기 개발 시에는 개발 시간이 많이 소요됨 • MSA로 원활하게 개발하기 위한 기반 구성요소와 인프라 준비가 필요함 • 기존 개발 방식이 편하다고 주장하는 사람들로부터의 저항 • 서비스 간 연계 시 협의가 필요 • 여러 서비스에 걸치는 기능의 경우, 주체가 애매한 경우가 생김
  • 46. 제언 • 갑자기 한번에 MSA로 넘어가는 것은 쉽지 않은 작업입니다. • 기존 시스템에서 분할이 가능한 항목을 하나씩 분할해가거나, 신규 개발되는 기능을 하나씩 마이크로 서비스로 분리하여 추가해가는 것이 좋습니다. • MSA는 만능이 아니며, 조직 문화(점진적 발전, 구성원들의 Skill-up에 대한 관심과 투자)가 뒷받침해줘야 합니다. 조직 문화가 선행되지 않으면 차라리 시도하지 않는 것이 좋습니다.
  • 47. 질문/피드백 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 )); }