마이크로 서비스 아키텍처로 개발하기 안재우 Platform Architecture 팀 SK Planet.

Slides:



Advertisements
Similar presentations
Proprietary ETRI 광대역통합망연구단 1 ETRI Technology Marketing Strategy ETRI Technology Marketing Strategy IT R&D Global Leader 지식 협업 융합서비스 플랫폼 기술 배 현 주
Advertisements

박재언 류호성 구창모 김승엽. Why Cloud Computing 클라우드 컴퓨팅 등장 배경 3 천문학적으로 늘어나는 컴퓨터 와 네트워크 장비의 증가 매일 쏟아지는 방대한 데이터 및 다 양한 사용자 환경지원 요구 확대 복잡한 IT 기술의 진화 및 관리의 어려움 지속적으로.
Web Based Data Warehouse Query Tool 이화여자대학교 2002 년 컴퓨터학과 졸업프로젝트 14 조.
Smart Phone Game 쇼군 적용 사례 ㈜블루솜 Global Top Cloud Service Provider Bluesom Co.,Ltd.
Kt ds devpack 공지내용 1. kt ds devpack 소개 2. 제공내용 및 신청방법.
작성자조성웅 작성일자 기본환경 1. Java : Eclipse : Tomcat : 6.0 이상 4. DB : MySQL File System : DFS 6. Framework - Spring : JPA 및 CXF.
의료정보팀 박수완 강남세브란스병원 GANGNAM SEVERANCE HOSPITAL.
최현섭, 김기손, 김보라, 염호남 지도교수 : 김일민 교수. 1. 무엇을 만들었습니까 ? 후배선배 동문 기반의 취업 정보 교류 플랫폼.
SDU 재학생 및 신. 편입 학생을 대상으로 “ 클라우드 컴퓨팅 ” 에 대해서 알아보는 특강을 준비하였습니다. 본 특강은 컴퓨팅 산업에서 가장 큰 화두로 성장하고 있는 “ 클라우드컴퓨팅 (Cloud Computing) 에 대한 기초 적 이해와 클라우드 컴퓨팅에서 사용되는.
0 Sytem Architecture Eric Lim AKAON. 1/44 Ⅰ. 아키텍처 개요 Ⅱ. 아키텍처 물리 설계 Ⅲ. 아키텍처 구성도 ( 예 ) Ⅳ. 고려사항.
더존다스 경영전략과 비젼 1 ERP 개발부문
프로젝트 제안서 날씨대로 기분대로 팀원 박효민 신준범 정민섭 안성원
시스템 개요 진화 과정 RIA & X-Internet Web Client/Server Main FRame
D-Guard Security Suites 제품 소개서
Crystal Reports .NET ASTech System.
김 형 진 전북대학교 IT응용시스템공학과 웹 서비스 개념과 기술 Chapter 김 형 진 전북대학교 IT응용시스템공학과.
Mobile Cloud Messaging Package
APPEON SOLUTION INTRODUCTION.
KMS/Portal 에서의 효율적인 정보검색
프로젝트2 Web Programming 강의노트: vrlab.suwon.ac.kr/mwlee
개발자에게 SharePoint Services 란 무엇인가?
Web Programming 강의 소개
웹어플리케이션 보안 Web application security
10장. 웹 서비스 공격 (Attacking Web Service)
Knowledge Enterprise Portal Solution(iKEP)
Knowledge Enterprise Portal Solution(iKEP)
IPCC Full Solutions Billit All IP Contact Center llllBillit -IP_PBX
팀 명: Con Spirito 팀 원: 경주리 김다정 김소담 최은미
Chapter 01 : Java EE 개요. chapter 01 : Java EE 개요.
Introduction to Web Service Computing
웹 서비스 (Web Services).
Toad for SQL Server 제품 소개서 – 프로넷소프트㈜.
KD Navien Smart Customer Service Mobile Web
1장. JSP 및 Servlet을 활용한 동적 웹 프로그래밍 소개 제1장.
Azure WebApp on Linux와 .NET Core
1강 01장. 웹과 자바.
Chapter 01 : Java EE 개요. chapter 01 : Java EE 개요.
NTAS 소개 (Network Transaction Application Server)
임베디드 프로그래밍 Lecture #
Web Services 웹서비스 도입 및 확산에 따른 기대효과 1.
Socket & Plug 기반의 u-Banking Platform
This is presentation About Team Introduction S.O.A. Sensor Of Arduino.
선진사 Benchmarking 결과보고 통합 ERP 구축 전담반.
(Network Transaction Application Server)
Web상에서의 Network Management
BAF Team IT Engineering Center
웹 서비스 (Web Services).
인프라 업무 Portal 사이트 Archon 2.0 목 차 Ⅰ. Concept Ⅱ. SOA Ⅲ. Web
SOAP 클라이언트 개발 Guide
컴퓨터 소프트웨어 설계 및 실험 년 1학기 실험계획 -.
TERUWA OPENSTACK 커피는 역시 떼루와.
HUCHEMS e-Procurement System
전자상거래 구축을 위한 EC/EDI Solution 제안서.
웹 다이어리 완료보고서 이상제 정영석.
Google Cloud Platform을 이용한 서버 인프라 구축
3. Spring 프레임워크의 IoC 컨테이너 개념
웹 성능 및 부하 테스트(Load Test)를 통한 소프트웨어 품질 향상방안
나의 삶과 금융경제 설계전략 당신의 인생은 안녕하십니까 Team . 승승장구.
WSDL 의공학과 3학년 김 기 흔.
컴퓨터 소프트웨어 설계 및 실험 년 1학기 실험계획 -.
NTAS 소개 (Network Transaction Application Server)
myfood.com 상명대 맛집 홈페이지 구축 제안서
성공적인 웹사이트 구축 (2) 변화 발전하는 Site의 미래를 예측 반영해야 함.
이번 시간에는... 지난 시간까지 제 1장을 통해 모바일의 정의와 개념, 시작과 발전, 기술과 서비스 및 그 전략을 살펴봄으로써 모바일 산업에 대한 전반적인 이해를 쌓았습니다. 이번시간 부터는 제 2장 모바일 기술을 통해, 무선 인터넷을 위한 컨텐츠 제작 기술, 네트워크.
Architecture.
Smart Mobile & Unique Technology
AJAX Technology for Web2.0
Eclipse를 이용한 Embedded Linux 응용 프로그램 개발
K PaaS-TA 앱 개발.
이러다 클라우드.
Presentation transcript:

마이크로 서비스 아키텍처로 개발하기 안재우 Platform Architecture 팀 SK Planet

About me SK 플래닛 Platform Architecture 팀 전 NCSOFT 인프라플랫폼팀 전 닷넷엑스퍼트 수석컨설턴트

오늘 얘기할 내용은 마이크로 서비스 아키텍처란 ? 장단점은 ? 무엇이 필요하고, 어떤 점을 고려해야 하는지 ? 우리는 어떻게 하고 있는지 ?

WAS 전통적인 Web App 아키텍처 Browser/ Client WAR UI A Service A Repository Database A

WAS 이중화 / 로드밸런싱 Browser/ Client WAR UI A Service A Repository Database Load balancer A

WAS 기능 추가 Browser/ Client WAR UI A Service A Repository Database Load balancer A B Service B Repository B

시스템 연계 / 통합 WAS Browser/ Client WAR UI A Service A Repository Database Load balancer A B Service B Repository B D System C System

시스템 연계 / 통합 WAS Browser/ Client WAR UI A Service A Repository Database Load balancer A B Service B Repository B E System D System F SystemC System G System

문제점 코드가 너무 커져서 유지보수하기 힘들어요. 시스템을 분리하고 싶어요. DB 를 분리하고 싶어요. 연계 시스템이 변경된대요. 연계 시스템이 장애나서 우리 서비스도 장애예요. 사소한 수정인데도 전체 배포를 하고, QA 를 거쳐야 해요. 새로운 걸 추가하는 건 상관없는데, 기존 로직 / 데이터를 변경하면 무슨 문제가 생길지 몰라요. 저희도 새로운 버전 / 기술을 써보고 싶은데 …

가면 갈수록 뭔가 바꾸는게 두려워진다. 개발자들이 구닥다리 기술의 족쇄에서 벗어나지 못하고, 기술 격차는 계속 벌어진다. 모든 것은 ‘ 차세대 ’ 가 해결해야 줄 것이다. ( 정말 ?)

나랑 상관없는 상상 속 단어들 Domain Driven Design Domain Driven Design Continuous Delivery Continuous Delivery On-demand Virtualization On-demand Virtualization Elastic, Scalable, Resilience Elastic, Scalable, Resilience Polyglot Programming Polyglot Programming Infrastructure Automation Infrastructure Automation Agile Development Agile Development Reusability Self-government Team Self-government Team

마이크로 서비스 아키텍처의 배경 Domain Driven Design Domain Driven Design Continuous Delivery Continuous Delivery On-demand Virtualization On-demand Virtualization Elastic, Scalable, Resilience Elastic, Scalable, Resilience Polyglot Programming Polyglot Programming Infrastructure Automation Infrastructure Automation Agile Development Agile Development Reusability Self-government Team Self-government Team

Scale Cube

Y 축 확장 WAS WAR UI A Service A Repository Database A B Service B Repository B

Y 축 확장 Database A WAS WAR UI A Service A Repository WAS WAR B Service B Repository Database B

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 LB MS-A MS-B LB MS-A MS-C LB MS-A MS-D LB Security Logging Version … … Security Logging Version … … Security Logging Version … … Security Logging Version … …

클라이언트 - 서비스 간 통합 API Gateway Client A (Web) Client B (App) MS-A MS-B MS-A MS-C MS-A MS-D Security Logging Version … …

클라이언트 - 서비스 간 통합 API Gateway Client A (Web) Client B (App) 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 Event (Message) Broker Publish Event Service C Service D Subscribe Event

Service Discovery Client/API Gateway MS-A LB MS-A MS-B LB Security Logging Version … … Security Logging Version … … Client/API Gateway MS-A HA Proxy MS-A MS-B HA Proxy Security Logging Version … … Security Logging Version … … Service Registry

Blue/Green Deployment

MSA 를 선택한 이유 Frontend/Backend 분리회사의 Engineer Tech Tree 와 동기화 코드 양이 커지고, 중복코드가 발생 코드의 양을 줄여서 누구나 쉽게 파악하도록 팀 전체의 ProjectWorking 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 TestUnit Test API 연동 Load Test UserStory 종료

Contract/API 의 설계 / 공유

API Workspace Product 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 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 MS-A HA Proxy Service Registry Service Agent MS-A Container MS-AHA 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) L4 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 Content Router 변화 요약 - After Browser/ Client L4 Content Router Content Router A UI B UI C UI D UI API Gateway (Whitebase) 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 Service Registry Event Broker Config Service Config Service

변화 요약 BeforeNow or soonFuture ArchitectureMonolithic DB 공유형 통합 Micro-Services, VM 기반 Loosely-Coupled (API/Event) Container 기반 가상화 Self-Healing Application1 Web App9 UIs 14 Services 더욱 세분화 Data1 MySQL10 MySQL 2 Redis 1 ZooKeeper Maria DB PostgreSQL 또다른 NoSQL Tech StackJava 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"; id, domain )); }