Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

31,018 views

Published on

오픈테크넷 서밋(Open Technet Summit) 2015에서 발표했던 마이크로서비스 아키텍처 세션 자료입니다.
* 마이크로서비스 아키텍처란?
* 장단점은?
* 무엇이 필요하고, 어떤 점을 고려해야 하는지?
* 우리는 어떻게 하고 있는지?

Published in: Software
  • If only we knew about this 10 years ago! I wasted a ton of money on garbage 'stop snoring' products like mouth guards, throat sprays, lozenges and nasal strips, to name just a few! None of them worked. My doctor explained to me that the only way I was going to fix my snoring was with an operation, although he did say it was a last resort. I am so glad I didn't risk it because after finding your program my snoring has considerably decreased! If only I knew about this 10 years ago! ♣♣♣ http://t.cn/AigiN2V1
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • -- DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT -- ......................................................................................................................... ......................................................................................................................... Download FULL PDF EBOOK here { http://bit.ly/2m6jJ5M } ......................................................................................................................... (Unlimited)
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • accessibility Books Library allowing access to top content, including thousands of title from favorite author, plus the ability to read or download a huge selection of books for your pc or smartphone within minutes ,Download or read Ebooks here ... ......................................................................................................................... Download FULL PDF EBOOK here { http://bit.ly/2m6jJ5M }
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • accessibility Books Library allowing access to top content, including thousands of title from favorite author, plus the ability to read or download a huge selection of books for your pc or smartphone within minutes ,Download or read Ebooks here ... ......................................................................................................................... Download FULL PDF EBOOK here { http://bit.ly/2m6jJ5M }
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • accessibility Books Library allowing access to top content, including thousands of title from favorite author, plus the ability to read or download a huge selection of books for your pc or smartphone within minutes DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download Full EPUB Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... ...................................ALL FOR EBOOKS................................................. Cookbooks, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

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

  1. 1. 마이크로 서비스 아키텍처로 개발하기 안재우 Platform Architecture팀 SK Planet
  2. 2. About me • SK 플래닛 Platform Architecture 팀 • 전 NCSOFT 인프라플랫폼팀 • 전 닷넷엑스퍼트 수석컨설턴트
  3. 3. 오늘 얘기할 내용은 • 마이크로 서비스 아키텍처란? • 장단점은? • 무엇이 필요하고, 어떤 점을 고려해야 하는지? • 우리는 어떻게 하고 있는지?
  4. 4. WAS 전통적인 Web App 아키텍처 Browser/ Client WAR UI A Service A Repository Database A
  5. 5. WAS WAS 이중화/로드밸런싱 Browser/ Client WAR UI A Service A Repository Database Load balancer A
  6. 6. WAS WAS 기능 추가 Browser/ Client WAR UI A Service A Repository Database Load balancer AB Service B Repository B
  7. 7. 시스템 연계/통합 WAS WAS Browser/ Client WAR UI A Service A Repository Database Load balancer AB Service B Repository B D System C System
  8. 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. 9. 문제점 • 코드가 너무 커져서 유지보수하기 힘들어요. • 시스템을 분리하고 싶어요. • DB를 분리하고 싶어요. • 연계 시스템이 변경된대요. • 연계 시스템이 장애나서 우리 서비스도 장애예요. • 사소한 수정인데도 전체 배포를 하고, QA를 거쳐야 해요. • 새로운 걸 추가하는 건 상관없는데, 기존 로직/데이터를 변경하면 무슨 문제가 생길지 몰라요. • 저희도 새로운 버전/기술을 써보고 싶은데…
  10. 10. 가면 갈수록 • 뭔가 바꾸는게 두려워진다. • 개발자들이 구닥다리 기술의 족쇄에서 벗어나지 못하고, 기술 격차는 계속 벌어진다. • 모든 것은 ‘차세대’가 해결해야 줄 것이다. (정말?)
  11. 11. 나랑 상관없는 상상 속 단어들 Domain Driven Design Continuous Delivery On-demand Virtualization Elastic, Scalable, Resilience Polyglot Programming Infrastructure Automation Agile Development Reusability Self-government Team
  12. 12. 마이크로 서비스 아키텍처의 배경 Domain Driven Design Continuous Delivery On-demand Virtualization Elastic, Scalable, Resilience Polyglot Programming Infrastructure Automation Agile Development Reusability Self-government Team
  13. 13. Scale Cube http://theartofscalability.com
  14. 14. Y축 확장 WAS WAR UI A Service A Repository Database AB Service B Repository B
  15. 15. Y축 확장 Database A WAS WAR UI A Service A Repository WAS WAR B Service B Repository Database B
  16. 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. 17. 마이크로 서비스란? • 작고(small) • API로 다른 서비스와 연계하며(communicate with APIs) • 자율적이며(autonomous) • 한 가지 일을 잘하는데 초점을 맞춘 서비스(focused on doing one thing well)
  18. 18. 장점 • Technology Heterogeneity • Resilience • Scaling • Ease of Deployment • Organizational Alignment • Composability • Replaceability
  19. 19. 단점 • Complexity • Multiple Database & Transaction Management • Complicated Test • Require Automation for Deploy/Operation • Hard to develop features span multiple services
  20. 20. 이거 SOA 얘기 아니에요? • 비슷하지만, 달라요. • SOA는 개념 상으로는 잘못되지 않았어요. • 다만 방식이 잘못되었을 뿐이죠. – SOAP Protocol – WS-* – Vendor-Driven – ESB가 모든 걸 다 해결해줄 거라는 잘못된 믿음 (그렇게 선전했던 나쁜 XX)
  21. 21. MSA는 • Vendor Driven -> Service Company Driven • 오픈테크놀로지 기반 • SOAP/XML vs. REST/JSON • ‘스펙 먼저’가 아닌 ‘현실에서 검증된 Practice들’의 모음 • Agile 개념과의 결합 • Cloud 환경의 활용
  22. 22. 마이크로 서비스 모델링 • Domain Driven Design • Bounded Context • Contract-First(API-First) Design • Decomposed database • Event-Driven Architecture
  23. 23. 모델링/구현 Tip • API를 먼저 정의하라. • API를 REST API Maturity Level 2 이상이 되도록 강제화하라. • API 문서를 유지하라(예: Swagger) • ORM을 활용하라 • DB에 너무 의존하지 마라 • 도메인 내부에서만 의미있는 값을 외부에 노출하는 것을 지양하라 • 마이크로 서비스가 별다른 설정 없이 바로 기동가능하게 하라 (예: Java의 경우, Spring Boot + Embedded WAS 활용)
  24. 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. 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. 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. 27. 서비스 간 통신 Service A Service B HTTP Request/Response Event (Message) Broker Publish Event Service C Service D Subscribe Event
  28. 28. 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
  29. 29. Blue/Green Deployment http://martinfowler.com/bliki/BlueGreenDeployment.html
  30. 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. 31. 어떻게 개발하나요? Backend 개발자Frontend 개발자 UserStory 검토 Contract/API 설계 Frontend 개발 Backend 개발 Mock/Unit Test Unit Test API 연동 Load Test UserStory 종료
  32. 32. Contract/API의 설계/공유
  33. 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. 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. 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. 36. 개발 환경의 문제 • 개발하다 보면, 여러 개의 마이크로서비스들을 구동시켜야 하는 경우가 많다. • 마이크로서비스마다 설정/기동방식이 상이한 경우, 다소 괴롭다. • 구동된 마이크로 서비스들을 위한 API Gateway를 빠르게 설정하기 • git clone/pull하는 것도 일이다.
  37. 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. 38. Whitebase • URL-based Router + Proxy Authentication Versioning Logging Routing Composition
  39. 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. 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. 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. 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. 43. MSA로 진행하며 얻은 것 • 팀원들이 다루는 기술 범위가 크게 확장 • 최신 기술의 도입/실험에 부담이 없음 • 팀원 간의 경험 공유 활성화 • API 디자인 능력 향상 • 향후 변화/확장에 대해서도 아키텍처적 변화 없이 대응이 가능 • 높은 재활용성/조합 지원 • 향후 사내/대외 오픈소스화가 가능할 듯한 솔루션들
  44. 44. MSA로 진행 시의 단점 • 초기 개발 시에는 개발 시간이 많이 소요됨 • MSA로 원활하게 개발하기 위한 기반 구성요소와 인프라 준비가 필요함 • 기존 개발 방식이 편하다고 주장하는 사람들로부터의 저항 • 서비스 간 연계 시 협의가 필요 • 여러 서비스에 걸치는 기능의 경우, 주체가 애매한 경우가 생김
  45. 45. 제언 • 갑자기 한번에 MSA로 넘어가는 것은 쉽지 않은 작업입니다. • 기존 시스템에서 분할이 가능한 항목을 하나씩 분할해가거나, 신규 개발되는 기능을 하나씩 마이크로 서비스로 분리하여 추가해가는 것이 좋습니다. • MSA는 만능이 아니며, 조직 문화(점진적 발전, 구성원들의 Skill-up에 대한 관심과 투자)가 뒷받침해줘야 합니다. 조직 문화가 선행되지 않으면 차라리 시도하지 않는 것이 좋습니다.
  46. 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 )); }

×