2018 All Rights Reserved 초판 1쇄발행 2018 10 15 지은이 펴낸이 펴낸곳 출판신고 2009 11 10 406 2009 000087 주소 159 3 3 B 전화 070 8201 9010 팩스 02 6280 0405 홈페이지 www jpub kr 원고투고 jeipub@gmail com 독자문의 readers jpub@gmail com 교재문의 jeipubmarketer@gmail com 편집부 소통 기획팀 회계팀 교정 교열 본문디자인 표지디자인 용지 인쇄 제본 ISBN 979 11 88621 41 5 93000 값 22 000 제이펍은독자여러분의아이디어와원고투고를기다리고있습니다. 책으로펴내고자하는아이디어나원고가있으신분께서는책의간단한개요와차례, 구성과저 ( 역 ) 자약력등을메일로보내주세요. jeipub@gmail.com
드리는말씀 이책에기재된내용을기반으로한운용결과에대해저자, 소프트웨어개발자및제공자, 제이펍출판사는일체의책임을지지않으므로양해바랍니다. 이책에기재한회사명및제품명은각회사의등록상표 ( 또는상표 ) 이며, 본문중에는 TM, C, R 등의기호를생략하고있습니다. 이책에서설명하고있는실제제품버전은독자의학습시점에따라책의버전과다를수있습니다. 책내용과관련된문의사항은지은이나출판사로연락주시기바랍니다. - 지은이 : architectstory@gmail.com - 출판사 : readers.jpub@gmail.com
차례 머리말 이책에대하여 베타리더후기 ix xii xv CHAPTER 01 마이크로서비스아키텍처의이해 1.1 소프트웨어아키텍처의이해 1 소프트웨어아키텍처란무엇인가? 1 1.2 마이크로서비스아키텍처 13 마이크로서비스아키텍처의이해 13 서비스지향아키텍처 15 왜마이크로서비스아키텍처인가? 22 CHAPTER 02 클라우드네이티브의이해 2.1 클라우드네이티브 26 클라우드네이티브애플리케이션 26 클라우드네이티브아키텍처 32 클라우드네이티브인프라 35 지속적통합과배포 37 데브옵스 40 2.2 컨테이너 42 컨테이너개념 42 리눅스컨테이너 45 도커컨테이너 47 차례 v
CHAPTER 03 마이크로서비스이해와기획 3.1 마이크로서비스이해 54 마이크로서비스개념 54 3.2 마이크로서비스기획 62 마이크로서비스식별전략 63 마이크로서비스를위한고려사항 74 CHAPTER 04 마이크로서비스아키텍처설계 4.1 마이크로서비스설계 81 커피전문점서비스이해 81 커피전문점마이크로서비스개념설계 84 커피전문점마이크로서비스구조설계 92 4.2 마이크로서비스아키텍처설계 102 마이크로서비스아키텍처구성 103 서비스구성체계 109 테스트체계 113 지속적통합및배포체계설계 116 모니터링체계설계 118 CHAPTER 05 마이크로서비스구현 5.1 마이크로서비스구성 121 개발환경구성 121 커피전문점마이크로서비스구성도및구성요소 124 5.2 마이크로서비스구현 136 커피주문마이크로서비스구현 136 회원확인마이크로서비스구현 145 vi 차례
CHAPTER 06 마이크로서비스아키텍처구축 6.1 마이크로서비스아키텍처구성 155 스프링클라우드아키텍처참조모델 155 스프링클라우드아키텍처구성요소 157 커피전문점마이크로서비스아키텍처구성도및구성요소 157 6.2 커피전문점마이크로서비스아키텍처구축 160 설정서버 160 유레카서버 163 줄서버 166 터빈서버 171 히스트릭스대시보드서버 174 CHAPTER 07 마이크로서비스빌드배포 7.1 마이크로서비스빌드단위 181 독립프로젝트 182 복수프로젝트 183 7.2 마이크로서비스배포형태 184 실행가능한압축파일 185 도커이미지 185 7.3 소스빌드및패키징 187 jar 빌드및패키징 188 war 빌드및패키징 192 도커이미지빌드및패키징 196 차례 vii
APPENDIX A 커피전문점서비스요약및실행 A.1 커피전문점서비스개요 199 커피전문점서비스개념도 199 커피전문점서비스시스템구성도및구성요소 200 A.2 커피전문점서비스및에코시스템기동 202 에코시스템기동 202 마이크로서비스기동 205 테스트테이블및데이터생성 206 A.3 커피전문점마이크로서비스실행 208 커피주문 208 주문처리상태확인 209 에코시스템조회 211 참고문헌 213 찾아보기 215 viii 차례
머리말 머리말 ix
Zuul Eureka Turbine Hystrix x 머리말
머리말 xi
이책에대하여 xii 이책에대하여
주요내용 1 2 3 4 5 6 SpringCloud Config sever Zuul Eureka Turbine Hystrix 7 jar war 다운로드및 A/S 마이크로서비스다운로드 https github com architectstory msa book git 마이크로서비스에코시스템다운로드 https github com architectstory msa architecture config server git https github com architectstory msa architecture eureka server git https github com architectstory msa architecture zuul server git 이책에대하여 xiii
https github com architectstory msa architecture turbine server git https github com architectstory msa architecture hystrixdashboard git 독자 A/S architectstory@gmail com readers jpub@gmail com xiv 이책에대하여
베타리더후기 제이펍은책에대한애정과기술에대한열정이뜨거운베타리더들로하여금출간되는모든서적에사전검증을시행하고있습니다. 김종욱 ( 네이버 ) 김진영 ( 야놀자 ) 베타리더후기 xv
윤영철 (SOCAR) DevOps 최희철 MSA 황도영 (NHN) MSA MSA MSA MSA MSA MSA 허원철 xvi 베타리더후기
CHAPTER 01 마이크로서비스아키텍처의이해 1.1 소프트웨어아키텍처의이해 소프트웨어아키텍처란무엇인가? software architecture 소프트웨어 구성요소 관계 구성요소 그림 1.1 소프트웨어아키텍처 1
UML Unified Modeling Language architect 운영자아키텍트백엔드개발자 화면개발자 품질담당자 이해하다 아키텍처 그림 1.2 아키텍처이해수준의차이 1 2 view 4+1 2 CHAPTER 01 마이크로서비스아키텍처의이해
논리적뷰 (Logical view) 구현뷰 (Implementation view) 유스케이스뷰 (Usecase view) 프로세스뷰 (Process view) 배치뷰 (Deployment view) 그림 1.3 4+1 뷰 logic view thread process process view implementation view deployment view usecase view 1 200 1.1 소프트웨어아키텍처의이해 3
시스템 소프트웨어 관계 그림 1.4 아키텍처의역할 logic 4 CHAPTER 01 마이크로서비스아키텍처의이해
소프트웨어아키텍처스타일? style software architecture style 1.1 소프트웨어아키텍처의이해 5
아키텍처 아키텍처를어떻게? 아키텍처스타일 아키텍트 아키텍처접근방향제시 시스템 아키텍처스타일 메시지전달? 어떻게 이벤트처리? 해결하나? 피어투피어패턴 (Peer to Peer Patten) 이벤트 - 버스패턴 (Event-Bus Pattern) Bus Peer Peer Event Listener 아키텍처스타일 아키텍처패턴 그림 1.5 소프트웨어아키텍처스타일과패턴 monolith 아키텍처와아키텍트역할의변화 package 1 000 Java class 6 CHAPTER 01 마이크로서비스아키텍처의이해
애플리케이션 일부기능만수정 기능 애플리케이션배포 시스템 그림 1.6 단일애플리케이션배포 1 6 2 3 cloud PaaS Platform as a Service 단일어플리케이션 분할 서비스 서비스 서비스 서비스 그림 1.7 모놀리스에서마이크로서비스로변화 1.1 소프트웨어아키텍처의이해 7
1 8 1 8 8 CHAPTER 01 마이크로서비스아키텍처의이해
개발 1 팀 아키텍처팀 공통팀 개발 2 팀 품질팀 그림 1.8 회색지대 1 8 1.1 소프트웨어아키텍처의이해 9
소프트웨어아키텍트 소프트웨어구성 하드웨어구성 테크니컬아키텍트 화면기술구성 소프트웨어 & 시스템아키텍처 네트워크구성 프론트엔드아키텍트 프레임워크구축 데이터구성 인프라아키텍트 프레임워크아키텍트 데이터아키텍트 그림 1.9 아키텍처역할유형 1 9 10 CHAPTER 01 마이크로서비스아키텍처의이해
AI 클라우드사업자 PaaS/IaaS SaaS 개발 / 운영플랫폼 인공지능 블록체인 이해 솔루션제시 빅데이터 솔루션아키텍트 사용자 그림 1.10 아키텍트역할변화 SaaS Software as a Service PaaS Platform as a Service IaaS Infra as a Service SaaS AI 1.1 소프트웨어아키텍처의이해 11
on premise 12 CHAPTER 01 마이크로서비스아키텍처의이해
1.2 마이크로서비스아키텍처 마이크로서비스아키텍처의이해 microservice architecture 1.2 마이크로서비스아키텍처 13
애플리케이션 서비스 서비스 분할 데이터 데이터 서비스 서비스 데이터 데이터 데이터 그림 1.11 모놀리스아키텍처와마이크로서비스아키텍처 2 3 resource scale up tuning eco system * risk * 14 CHAPTER 01 마이크로서비스아키텍처의이해
서비스지향아키텍처 조직 A 조직 B 업무 업무업무업무 반영 사용 서비스서비스서비스 그림 1.12 서비스지향 1.2 마이크로서비스아키텍처 15
서비스 계약 서비스소비자 버전 1 버전 2 버전 N 그림 1.13 서비스계약 1 2 서비스요청 요청경로변경 응답지연 서비스 서비스 그림 1.14 서비스가용성 L4 L7 16 CHAPTER 01 마이크로서비스아키텍처의이해
circuit breaker 서비스 권한확인 서비스 그림 1.15 서비스권한 transaction 서비스 데이터전달 서비스 데이터의일시적불일치 그림 1.16 BASE 트랜잭션 BASE Basically Available Soft State Eventual Consistency basically available optimistic locking queue soft state 1.2 마이크로서비스아키텍처 17
eventual consistency 클라이언트 클라이언트 시작 장애 흐름제어 A 서비스 A 서비스 A 서비스 대체서비스 수평확장 모니터링 & 대응 그림 1.17 서비스관리 SOA? ownership 비즈니스 서비스지향 SOA 마이크로서비스아키텍처 그림 1.18 SOA 와마이크로서비스아키텍처공통점 18 CHAPTER 01 마이크로서비스아키텍처의이해
SOA SOA SOA ESB Enterprise Service Bus SOA 마이크로서비스 작은서비스하나에집중 상대적크기 SOA 서비스 비즈니스에집중 그림 1.19 서비스의상대적크기와관심사 CRM Customer Relationship Management 1.2 마이크로서비스아키텍처 19
마이크로서비스 마이크로서비스 조직 ( 팀 ) 마이크로서비스 SOA 업무미들웨어시스템서비스조합개발 업무팀 공통팀 하나의팀에서개발및관리 그림 1.20 서비스오너십 업무 / 기술 / 개발조직이상이함 개발팀 SOA SOA 마이크로서비스아키텍처 서비스 SOA 서비스공유최소화 서비스공유최대화 그림 1.21 서비스의공유지향점 SOA SOA ESB REST API Application Programming 20 CHAPTER 01 마이크로서비스아키텍처의이해
Interface 마이크로서비스아키텍처 SOA 서비스오픈 RESTful 서비스 웹서비스 서비스공유 REST API WSDL/UDDI/ESB API 미들웨어 그림 1.22 API 와미들웨어 SOA ESB RESTful API SOA SOA UDDI Universal Description Discovery and Integration WSDL Web Services Description Language WSDL UDDI stub SOAP Simple Object Access Protocol WSDL RESTful API SOA SOA 1.2 마이크로서비스아키텍처 21
SOA 1 1 표 1.1 마이크로서비스아키텍처와 SOA 특징비교 SOA 사상 서비스지향 서비스지향 서비스오너십 조직 ( 팀 ) 단위자율성부여 조직 ( 팀 ) 간협업 서비스크기 SOA 대비작음 마이크로서비스아키텍처대비큼 서비스공유정보 서비스간독립 서비스공유 서비스공유방식 API 서비스공유를위한미들웨어 서비스통신방식 RESTful API 등 SOAP, WSDL, UDDI, ESB 등 왜마이크로서비스아키텍처인가? IT 22 CHAPTER 01 마이크로서비스아키텍처의이해
Happy Path Happy Path Happy Path 1.2 마이크로서비스아키텍처 23
시나리오 사상 실체화 프로토타입 단계 1 단계 2 단계 3 예외 예외 서비스요건 Happy Path 서비스 그림 1.23 Happy Path 1 23 24 CHAPTER 01 마이크로서비스아키텍처의이해
CHAPTER 03 마이크로서비스이해와기획 53
3.1 마이크로서비스이해 마이크로서비스개념? 모놀리스애플리케이션 마이크로서비스 그림 3.1 마이크로서비스 monolith 54 CHAPTER 03 마이크로서비스이해와기획
마이크로서비스 관계 마이크로서비스 마이크로서비스 그림 3.2 마이크로서비스간관계 3.1 마이크로서비스이해 55
비즈니스 비즈니스 변화 / 요건 반영 급속한변화 / 요건 빠른대응 모놀리스애플리케이션 마이크로서비스 그림 3.3 작은서비스 Eric Evans Domain Driven Design bounded context ubiquitous language CRM Customer Relationship Management CRM 56 CHAPTER 03 마이크로서비스이해와기획
10 CRM call center VOC Voice Of Customer VOC VOC CRM 애플리케이션 고객관리기능 고객서비스 VOC 관리기능 계약관리기능 계약서비스 CRM VOC 서비스 그림 3.4 서비스분할 CRM 3.1 마이크로서비스이해 57
고객관리팀 계약관리팀 고객서비스 VOC 관리팀 계약서비스 CRM VOC 서비스 그림 3.5 서비스 - 팀관계 VOC 서비스경계 A 서비스 B 서비스 C 서비스 그림 3.6 독립된서비스 58 CHAPTER 03 마이크로서비스이해와기획
CHAPTER 05 마이크로서비스구현 5.1 마이크로서비스구성 PC * 개발환경구성 PC PC 5 1 * Github JDK Git Gradle Jenkins 121
PC 환경 Kafka Server Kafka Zookeeper Jenkins Gradle Git JDK Eclispe IDE Springboot(1.5.10) Eclipse Plug-In (STS, Gradle, Git) JDK Library lombok 1.16.20 lombok-utils 1.16.20 spring-kafka spring-boot-starter-web spring-boot-starter-data-jpa spring-boot-starter-jdbc spring-boot-starter-actuator spring-cloud-starter-config spring-cloud-starter-eureka-server spring-cloud-starter-zuul spring-cloud-starter-ribbon spring-cloud-starter-turbine spring-cloud-starter-hystrix spring-cloud-starter-hystrix-dashboard spring-cloud-starter-feign mybatis-spring-boot-starter com.h2database:h2 5.1 커피전문점서비스개발소프트웨어 PC Kafka Server Eclipse PC 5 1 표 5.1 설치소프트웨어 카프카서버 (Kafka Server) 2.12-1-1.0 메시지발행및구독을위한시스템 JDK 1.8 자비개발도구키트 (tool kit) 이클립스 (Eclipse) Oxygen 자바프로그램개발을위한통합개발도구 이클립스플러그인 (Eclipse Plug-In) STS 스프링소스도구모음 그래들 (Gradle) 4.8 라이브러리의존성관리도구 스프링부트 (Springboot) 1.5.10 스프링프레임워크스타터키트 (starter kit) 라이브러리 (Library) 젠킨스 (Jenkins) 도커 (Docker) 오픈소스 자바기반의오픈소스라이브러리, 스프링클라우드, 넷플릭스라이브러리 (Netflix OSS) 등 소스코드빌드및패키징 도커파일, 이미지, 컨테이너생성, AWS EC2 환경에설치 122 CHAPTER 05 마이크로서비스구현
library 5 2 표 5.2 라이브러리 * 버전상세정보는 git source 내 build.gradle 참고. Lombok lombok 1.16.20 lombok-utils 1.16.20 자바클래스멤버 (member) 변수에대한 setter, getter 함수를자동으로생성해주는라이브러리 *eclipse 연결방법은아래의사이트참고 https://projectlombok.org/setup/eclipse Kafka spring-kafka 1.3.2 카프카 (Kafka) 라이브러리 Springboot Spring Cloud Mybatis spring-boot-starter-web spring-boot-starter-data-jpa spring-boot-starter-jdbc spring-boot-starter-actuator spring-cloud-starter-config 스프링부트기반웹스타터 (web starter) JPA 라이브러리 JDBC 라이브러리 스프링부트상태관리라이브러리 환경설정 (config) 관리를위한라이브러리 spring-cloud-starter-eureka 유레카 (Eureka) 라이브러리 ( 서비스등록감지 ) spring-cloud-starter-zuul 줄 (Zuul) 라이브러리 ( 서비스라우팅 ) spring-cloud-starter-ribbon 리본 (Ribbon) 라이브러리 ( 서비스로드밸런서 ) spring-cloud-starter-turbine 터빈 (Turbine) 라이브러리 ( 스트림메시지수집 ) spring-cloud-starter-hystrix 히스트릭스라이브러리 ( 서킷브레이커 ) spring-cloud-starter-hystrixdashboard spring-cloud-starter-feign org.mybatis.spring.boot: mybatis-spring-boot-starter 히스트릭스대시보드라이브러리 마이크로서비스간서비스호출 자바퍼시스턴스 (Persistance) 프레임워크 H2 com.h2database:h2 자바기반오픈소스관계형데이터베이스 5.1 마이크로서비스구성 123
Eclipse Gradle 커피전문점마이크로서비스구성도및구성요소 5 2 회원확인마이크로서비스 확인 커피주문마이크로서비스 주문처리상태확인마이크로서비스 주문내역 주문내역 주문저장 발행 구독 내역저장 내역조회 회원데이터 주문데이터 큐잉시스템 주문데이터 그림 5.2 커피전문점마이크로서비스구성도 5 3 표 5.3 커피전문점마이크로서비스구성요소 커피주문 커피주문처리서비스 msa-service-coffee-order 회원확인 회원가입여부확인서비스 msa-service-coffee-member 주문처리상태확인 주문처리상태확인서비스 msa-service-coffee-status 124 CHAPTER 05 마이크로서비스구현
5 4 표 5.4 커피전문점마이크로서비스자바프로젝트구성요소 msa-book 마이크로서비스루트프로젝트 msa-service-coffee-order msa-service-coffee-member msa-service-coffee-status domain/model domain/repository domain/service springboot/configuration springboot/messageq springboot/repository springboot/rest springboot/service springboot/configuration springboot/repository springboot/rest springboot/configuration springboot/messageq springboot/repository springboot/rest 엔티티와밸류오브젝트데이터처리업무로직환경설정큐잉시스템연계데이터베이스연계 REST API 서비스환경설정데이터베이스연계 REST API 환경설정큐잉시스템연계데이터베이스연계 REST API msa book 5.1 마이크로서비스구성 125
루트프로젝트 settings gradle build gradle settings gradle build gradle 그림 5.3 msa-book settings.gradle settings gradle include 126 CHAPTER 05 마이크로서비스구현
마이크로서비스프로젝트 빌드 Maven Repository build.gradle 라이브러리목록명세 다운로드 5.4 build.gradle 역할 그림 5.5 msa-book build.gradle 5.1 마이크로서비스구성 127
build gradle plug in task initsourcefolder src resources src resources dependencies lombok juint lombok setter getter repository lombok<version> jar PC eclipse exe 커피주문마이크로서비스프로젝트 그림 5.6 msa-service-coffee-order project 128 CHAPTER 05 마이크로서비스구현
binding JPA 그림 5.7 msa-service-coffee-order build.gradle kafka 회원확인마이크로서비스프로젝트 (msa-service-member) JPA MyBatis SQL 5.1 마이크로서비스구성 129