책 소개
2022년 세종도서 학술부문 선정도서
소스 코드 파일은 여기에서 내려 받으실 수 있습니다.
요약
마이크로서비스는 더 이상 일부 전문가만을 위한 영역이 아니며, 작은 프로젝트를 위한 개념도 아니다. 주요 클라우드 서비스인 AWS, 애저, 구글 모두 적극적으로 지원하는 소프트웨어와 인프라의 설계 방법이다. 어떠한 IT 프로젝트를 시작하더라도 마이크로서비스를 선택할 것을 고민해야 하고, 기존의 시스템도 마이크로서비스로 대체할 방법을 찾기도 한다. 이 과정에서 활용할 수 있는 마이크로서비스의 장점과 좀 더 일반적인 도구인 도커, 쿠버네티스, 테라폼을 사용한 구현 방법을 알아보자.
추천의 글
“마이크로서비스를 이해하고 구현하는 데 필요한 모든 도구를 소개하는 최고의 안내서다.”
“모든 마이크로서비스 개발자를 위한 인프라 참고서의 결정판이다.”
“마이크로서비스를 도커, 쿠버네티스, 테라폼을 사용한 클라우드 기반으로 개발하기 위한 확실한 도약을 보여주는 놀랍고도 실용적인 책이다.”
“마이크로서비스 구현을 위한 최신 클라우드 기술을 광범위하게 실용적으로 보여준다.”
이 책에서 다루는 내용
◆ 마이크로서비스 앱 개발과 테스트
◆ 클라우드 기업 서비스 사용
◆ 자동 테스트 적용
◆ 코드형 인프라 구현과 CD(continuous delivery) 파이프라인 구성
◆ 마이크로서비스 모니터링, 관리, 문제 해결
이 책의 대상 독자
마이크로서비스를 다루는 데 필요한 실용적인 내용을 배우고 싶은 독자를 대상으로 한다. 실제로 앱을 운영하기까지 필요한 도구를 어떻게 연계하는지 분명한 가이드가 필요한 독자에게 도움을 줄 수 있다. 코딩 기술을 설명하지는 않으므로 기본적인 코딩 기술을 알고 있어야 한다.
이 책의 구성
1장, ‘마이크로서비스를 왜 쓰는가’에서는 마이크로서비스를 소개하고 마이크로서비스를 왜 사용해야 하는지 설명한다.
2장, ‘첫 마이크로서비스 만들기’에서는 Node.js와 자바스크립트를 사용해 간단한 마이크로서비스를 제작해본다.
3장, ‘첫 마이크로서비스 게시’에서는 배포를 준비하기 위한 마이크로서비스의 패키징과 게시(publishing)에 사용하는 도커를 소개한다.
4장, ‘마이크로서비스 데이터 관리’에서는 다중 마이크로서비스의 스케일 업(scale up)과 함께 개발 환경에서 앱을 시뮬레이션하기 위한 도커 컴퍼스(Docker Compose)를 소개한다.
5장, ‘마이크로서비스 간의 통신’에서는 전체 앱의 라이브 리로드를 위한 개발 환경을 업그레이드한다.
6장, ‘운영 환경 구축’에서는 테라폼과 쿠버네티스를 소개한다.
7장, ‘CD 파이프라인’에서는 쿠버네티스 클러스터에 마이크로서비스를 배포하기 위해 테라폼을 사용한다.
8장, ‘마이크로서비스의 자동 테스트’에서는 여러 레벨에 걸쳐 마이크로서비스를 자동으로 테스트하는 방법을 살펴본다.
9장, ‘플릭스튜브 탐색’에서는 예제 앱을 간단하게 다루고 지금까지 배운 예제 앱을 배포하는 기술을 다시 살펴본다.
10장, ‘튼튼한 마이크로서비스’에서는 신뢰할 수 있고 내결함성(fault tolerant)을 갖춘 마이크로서비스를 만드는 방법을 알아보고, 앱이 잘 동작하도록 모니터하는 방법을 다룬다.
11장, ‘확장성으로 가는 길’에서는 자신의 마이크로서비스 앱을 사업이나 개발 팀의 규모가 커짐에 따라서 실제로 스케일을 조정하는 방법을 가지고 이 책에서 다룬 내용들을 정리한다.
목차
목차
- 1장. 마이크로서비스를 왜 쓰는가
- 1.1 이 책은 실용서다
- 1.2 무엇을 배울까?
- 1.3 미리 알아야 할 지식
- 1.4 복잡성 관리
- 1.5 마이크로서비스란 무엇인가
- 1.6 마이크로서비스 앱이란 무엇인가
- 1.7 모놀리스의 문제점
- 1.8 왜 마이크로서비스를 많이 사용할까?
- 1.9 마이크로서비스의 장점
- 1.10 마이크로서비스의 단점
- 1.11 마이크로서비스 최신 도구 사용
- 1.12 마이크로서비스 앱의 설계
- 1.13 예제 응용프로그램
- 요약
- 2장. 첫 마이크로서비스 만들기
- 2.1 새로운 도구
- 2.2 코드 가져오기
- 2.3 Node.js를 사용하는 이유
- 2.4 개발 원칙
- 2.5 단일 서비스 개발 환경 구성
- 2.5.1 깃 설치
- 2.5.2 코드 복제
- 2.5.3 비주얼 스튜디오 코드 받기
- 2.5.4 Node.js 설치
- 2.6 비디오 스트리밍용 HTTP 서버 만들기
- 2.6.1 Node.js 프로젝트 만들기
- 2.6.2 익스프레스 설치
- 2.6.3 익스프레스 설치
- 2.6.4 간단한 웹서버 시작하기
- 2.6.5 스트리밍 비디오 추가
- 2.6.6 마이크로서비스 설정
- 2.6.7 운영 환경 설치
- 2.6.8 빠른 반복을 위한 라이브 리로딩
- 2.6.9 2장의 완성된 코드 실행
- 2.7 Node.js 검토
- 2.8 배움을 이어 가기
- 요약
- 3장. 첫 마이크로서비스 게시
- 3.1 새로운 도구
- 3.2 코드 받기
- 3.3 컨테이너의 개념
- 3.4 이미지의 개념
- 3.5 도커를 사용하는 이유
- 3.6 도커로 수행할 작업
- 3.7 도커로 개발 환경 확장하기
- 3.7.1 도커 설치
- 3.7.2 도커 설치 확인
- 3.8 마이크로서비스 패키징
- 3.8.1 도커 파일 만들기
- 3.8.2 도커 이미지 패키징과 검사
- 3.8.3 컨테이너에서 마이크로서비스 부팅하기
- 3.9 마이크로서비스 게시하기
- 3.9.1 프라이빗 컨테이너 레지스트리 생성하기
- 3.9.2 마이크로서비스를 레지스트리에 푸시하기
- 3.9.3 레지스트리에서 마이크로서비스 부팅하기
- 3.10 도커 정리하기
- 3.11 배움을 이어 가기
- 요약
- 4장. 마이크로서비스 데이터 관리
- 4.1 새로운 도구
- 4.2 코드 다운받기
- 4.3 도커 컴포즈로 마이크로서비스 개발하기
- 4.3.1 도커 컴포즈를 사용하는 이유
- 4.3.2 도커 컴포즈 설치
- 4.3.3 도커 컴포즈 파일 만들기
- 4.3.4 마이크로서비스 앱 부팅
- 4.3.5 앱 실행
- 4.3.6 앱 종료
- 4.3.7 도커 컴포즈를 운영 환경에 사용한다면?
- 4.4 앱에 파일 저장소 추가
- 4.4.1 애저 저장소 사용하기
- 4.4.2 비디오 스트리밍 마이크로서비스 업데이트
- 4.4.3 새로운 마이크로서비스를 도커 컴포즈 파일에 추가하기
- 4.4.4 업데이트한 앱 테스트하기
- 4.4.5 클라우드 저장소와 클러스터 저장소의 비교
- 4.4.6 우리가 해낸 것
- 4.5 데이터베이스를 앱에 추가하기
- 4.5.1 MongoDB를 사용하는 이유
- 4.5.2 개발 환경에 데이터베이스 서버 추가하기
- 4.5.3 운영 환경에 데이터베이스 서버 추가
- 4.5.4 마이크로서비스-데이터베이스 또는 앱-데이터베이스
- 4.5.5 우리가 해낸 것
- 4.6 도커 컴포즈 다시 보기
- 4.7 배움을 이어 가기
- 요약
- 5장. 마이크로서비스 간의 통신
- 5.1 새로운 도구와 익숙한 도구 소개
- 5.2 코드 다운받기
- 5.3 마이크로서비스 간의 대화
- 5.4 히스토리 마이크로서비스 소개
- 5.5 빠른 개발 주기를 위한 라이브 리로드
- 5.5.1 히스토리 마이크로서비스의 보조 기능
- 5.5.2 마이크로서비스에 라이브 리로드 추가
- 5.5.3 개발과 운영 환경의 도커파일 구분
- 5.5.4 라이브 리로드를 위한 도커 컴포즈 파일 업데이트
- 5.5.5 라이브 리로드 테스트하기
- 5.5.6 개발 환경에서 운영 모드 테스트하기
- 5.5.7 우리가 해낸 것
- 5.6 마이크로서비스의 통신 방법들
- 5.6.1 직접 메시징
- 5.6.2 간접 메시징
- 5.7 HTTP를 사용한 직접 메시징
- 5.7.1 HTTP를 사용하는 이유
- 5.7.2 특정 마이크로서비스에 직접 메시지 전달하기
- 5.7.3 HTTP POST 메시지 보내기
- 5.7.4 HTTP POST 메시지 수신하기
- 5.7.5 업데이트한 앱 테스트
- 5.7.6 순차적 직접 메시지
- 5.7.7 우리가 해낸 것
- 5.8 래빗MQ를 사용한 간접 메시징
- 5.8.1 래빗MQ를 사용하는 이유
- 5.8.2 간접 메시지의 대상 마이크로서비스 찾기
- 5.8.3 래빗MQ 서버 만들기
- 5.8.5 래빗MQ 대시보드 살펴보기
- 5.8.5 마이크로서비스의 메시지 큐 연결
- 5.8.6 단일 수신자를 위한 간접 메시징
- 5.8.7 다중 수신 메시지
- 5.8.8 간접 메시징 제어
- 5.8.9 우리가 해낸 것
- 5.9 마이크로서비스 통신 다시 보기
- 5.10 배움을 이어 가기
- 요약
- 6장. 운영 환경 구축
- 6.1 새로운 도구
- 6.2 코드 다운로드
- 6.3 운영 환경 구축
- 6.4 코드형 인프라
- 6.5 쿠버네티스에 마이크로서비스 호스팅하기
- 6.5.1 쿠버네티스를 사용하는 이유
- 6.6.2 쿠버네티스 동작 원리
- 6.6 애저 CLI 사용하기
- 6.6.1 애저 CLI 설치
- 6.6.2 애저 인증
- 6.6.3 쿠버네티스 버전
- 6.6.4 우리가 해낸 것
- 6.7 테라폼으로 인프라 만들기
- 6.7.1 테라폼을 사용하는 이유
- 6.7.2 테라폼 설치
- 6.7.3 테라폼 프로젝트 설치
- 6.8 애저 리소스 그룹 만들기
- 6.8.1 테라폼을 사용해 진화하는 설계
- 6.8.2 인프라 생성 스크립트
- 6.8.3 테라폼 초기화
- 6.8.4 테라폼 초기화의 부산물
- 6.8.6 플러그인 버전
- 6.8.6 인프라 구성하기
- 6.8.7 테라폼 상태의 이해
- 6.8.8 인프라 제거와 재생성
- 6.8.9 우리가 해낸 것
- 6.9 컨테이너 레지스트리 생성
- 6.9.1 인프라의 지속적인 개선
- 6.9.2 컨테이너 레지스트리 생성
- 6.9.3 테라폼 OUTPUT
- 6.9.4 우리가 해낸 것
- 6.10 설정 데이터 공유를 위한 리펙토링
- 6.10.1 지속적인 인프라 개선
- 6.10.2 테라폼 변수 소개
- 6.11 쿠버네티스 클러스터 만들기
- 6.11.1 클러스터 생성 스크립트
- 6.11.2 애저의 클러스터 인증
- 6.11.3 클러스터 구성하기
- 6.11.4 우리가 해낸 것
- 6.12 쿠버네티스로 작업하기
- 6.12.1 쿠버네티스 인증
- 6.12.2 쿠버네티스 CLI
- 6.12.3 쿠버네티스 대시보드
- 6.12.4 우리가 해낸 것
- 6.13 테라폼 다시 보기
- 6.14 배움을 이어 가기
- 요약
- 7장. CD 파이프라인
- 7.1 새로운 도구와 익숙한 도구
- 7.2 코드 다운받기
- 7.3 지속적인 인프라 개선
- 7.4 지속적인 서비스 제공과 배포
- 7.5 테라폼으로 컨테이너 배포하기
- 7.5.1 쿠버네티스 제공자 설정하기
- 7.5.2 데이터베이스 배포
- 7.5.3 CD 준비 작업
- 7.5.4 새 데이터베이스 서버 테스트하기
- 7.5.5 래빗MQ 배포와 테스트
- 7.5.6 보안의 강화
- 7.5 테라폼으로 첫 마이크로서비스 배포하기
- 7.6.1 지역변수를 사용한 동작 설정
- 7.6.2 도커 이미지 빌드와 게시
- 7.6.3 컨테이너 레지스트리 인증
- 7.6.4 video - streaming 마이크로서비스 배포
- 7.6.5 마이크로서비스 테스트하기
- 7.6.6 우리가 해낸 것
- 7.7 비트버킷 파이프라인을 사용한 CD
- 7.7.1 비트버킷 파이프라인을 사용하는 이유
- 7.7.2 비트버킷에서 예제 코드 가져오기
- 7.7.3 배포 쉘 스크립트 만들기
- 7.7.4 테라폼 상태 정보 관리
- 7.7.5 비트버킷 파이프라인 스크립트
- 7.7.6 환경변수 설정하기
- 7.7.7 배포 파이프라인 테스트
- 7.7.8 배포 파이프라인 디버깅
- 7.7.9 우리가 해낸 것
- 7.8 배움을 이어 가기
- 요약
- 8장. 마이크로서비스의 자동 테스트
- 8.1 새로운 도구
- 8.2 코드 다운받기
- 8.3 마이크로서비스 테스트
- 8.4 자동 테스트
- 8.5 제스트를 사용한 테스트
- 8.5.1 제스트를 쓰는 이유
- 8.5.2 제스트 설치
- 8.5.3 math 라이브러리 테스트
- 8.5.4 첫 번째 제스트 테스트
- 8.5.5 테스트의 첫 실행
- 8.5.6 제스트를 사용한 라이브 리로드
- 8.5.7 테스트 실패 해석하기
- 8.5.8 npm을 사용한 제스트 호출
- 8.5.9 테스트 세트의 활용
- 8.5.10 제스트를 사용한 모형 만들기
- 8.5.11 지금까지 해낸 일
- 8.6 단위 테스트
- 8.6.1 메타데이터 마이크로서비스
- 8.6.2 제스트로 단위 테스트 만들기
- 8.6.3 테스트 실행
- 8.6.4 지금까지 완료한 것
- 8.7 통합 테스트
- 8.7.1 테스트 코드
- 8.7.2 MongoDB 데이터베이스 실행
- 8.7.3 데이터베이스 초기 데이터 가져오기
- 8.7.4 제스트로 통합 테스트 만들기
- 8.7.5 테스트 실행
- 8.7.6 지금까지 완료한 것
- 8.8 E2E 테스트
- 8.8.1 싸이프러스 소개
- 8.8.2 싸이프러스 설치
- 8.8.3 싸이프러스 사용자 인터페이스 시작
- 8.8.4 초기 데이터 설정
- 8.8.5 앱 부팅하기
- 8.8.6 싸이프러스로 E2E 테스트 만들기
- 8.8.7 싸이프러스를 npm으로 호출하기
- 8.8.8 지금까지 완료한 것
- 8.9 CD 파이프라인 자동 테스트
- 8.10 테스트 검토
- 8.11 배움을 이어 가기
- 요약
- 9장. 플릭스튜브 탐색
- 9.1 새로운 도구는 없다
- 9.2 코드 다운로드
- 9.3 필수 기술 점검
- 9.4 플릭스튜브 개요
- 9.4.1 플릭스튜브 마이크로서비스
- 9.4.2 마이크로서비스 프로젝트 구조
- 9.4.3 플릭스튜브 프로젝트 구조
- 9.5 개발 환경에서 플릭스튜브 실행하기
- 9.5.1 마이크로서비스 부팅하기
- 9.5.2 앱 부팅하기
- 9.6 개발 환경에서 플릭스튜브 테스트하기
- 9.6.1 제스트로 마이크로서비스 테스트하기
- 9.6.2 싸이프러스로 앱 테스트하기
- 9.7 플릭스튜브 심층 분석
- 9.7.1 초기 데이터
- 9.7.2 스토리지 모형화
- 9.7.3 게이트웨이
- 9.7.4 사용자 인터페이스
- 9.7.5 비디오 스트리밍
- 9.7.6 비디오 업로드
- 9.8 테라폼으로 운영 환경에 플릭스튜브를 수동으로 배포하기
- 9.8.1 테라폼 스크립트 구조
- 9.8.2 사전 준비 사항
- 9.8.3 애저 인증
- 9.8.4 스토리지 설정
- 9.8.5 앱의 배포
- 9.8.6 정상 동작 확인하기
- 9.8.7 해체 작업
- 9.8.8 테라폼 모듈
- 9.9 운영 환경 지속적 배포
- 9.9.1 사전 준비 사항
- 9.9.2 코드 리포지터리 구성
- 9.9.3 백엔드 준비하기
- 9.9.4 배포 쉘 스크립트
- 9.9.5 플릭스튜브 CD 설정
- 9.9.6 CD 파이프라인 테스트
- 9.9.7 자동 테스트 추가
- 9.10 다시 보기
- 9.11 미래의 플릭스튜브
- 9.12 배움을 이어 가기
- 요약
- 10장. 튼튼한 마이크로서비스
- 10.1 튼튼한 마이크로서비스 유지하기
- 10.2 마이크로서비스 모니터링
- 10.2.1 개발 환경의 로깅
- 10.2.2 오류 처리
- 10.2.3 도커 컴포즈로 로깅하기
- 10.2.4 쿠버네티스의 기본 로깅
- 10.2.5 쿠버네티스에 대한 자신만의 로그 수집
- 10.2.6 기업용 로깅, 모니터링과 알림
- 10.2.7 쿠버네티스 헬스 체크를 사용한 자동 재시작
- 10.2.8 여러 개의 마이크로서비스 추적하기
- 10.3 마이크로서비스 디버깅
- 10.3.1 디버깅 프로세스
- 10.3.2 운영 환경 마이크로서비스 디버깅
- 10.4 신뢰성과 복원
- 10.4.1 방어적 프로그래밍 실행
- 10.4.2 방어적 테스트 실행
- 10.4.3 데이터 보호
- 10.4.4 복제와 다중화
- 10.4.5 문제 격리와 원활한 기능 축소
- 10.4.6 내결함성을 위한 간단한 기술
- 10.4.7 내결함성을 위한 고급 기술
- 10.5 배움을 이어 가기
- 요약
- 11장. 확장성으로 가는 길
- 11.1 확장성은 미래다
- 11.2 개발 프로세스 확장
- 11.2.1 여러 팀
- 11.2.2 독립적인 마이크로서비스
- 11.2.3 코드 리포지터리 분리
- 11.2.4 CD 파이프라인 분리
- 11.2.5 메타리포
- 11.2.6 다중 환경 만들기
- 11.2.7 운영 워크플로
- 11.3 성능 확장성
- 11.3.1 클러스터의 수직 확장
- 11.3.2 클러스터의 수평 확장
- 11.3.3 개별 마이크로서비스의 수직 확장
- 11.3.4 클러스터의 탄력적인 확장
- 11.3.5 개별 마이크로서비스를 탄력적으로 확장하기
- 11.3.6 데이터베이스 확장
- 11.3.7 인프라 변경 관리
- 11.4 보안
- 11.4.1 신뢰 모델
- 11.4.2 민감한 설정
- 11.5 마이크로서비스 리팩토링
- 11.6 마이크로서비스 예산
- 11.7 단순하게 출발하기
- 11.8 배움을 이어 가기
- 요약
- 부록 A 베이그런트를 사용한 개발 환경 만들기
- 부록 B 마이크로서비스 치트키
도서 오류 신고
정오표
정오표
[p.88 : 7행]
chapter-2example-3\index.js:7
->
chapter-2\example-3\index.js:7
[p.164]
set STORAGEACCESSKEY
->
set STORAGEACCOUTNAME
[p.202 : 예제 5.4]
package.jsob
->
package.json
[p.286 : 그림]
SHH 터널
->
SSH 터널