책 소개
소스 코드 파일은 여기에서 내려 받으실 수 있습니다.
요약
마이크로서비스에 대한 소개부터 개발, 배포, 모니터링까지 전반적인 개념을 다루고 있다. 마이크로서비스의 개발 프로세스, 테스트, 배포 및 모니터링에 대해 학습하며, 이와 관련해 도커, 세네카, PM2 등 다양한 도구도 함께 살펴본다. 독자들은 이 책을 통해 마이크로서비스 개발에 필요한 Node.js의 개념과 더불어 좋은 테스트 커버리지를 갖는 고품질 마이크로서비스를 작성하고 모니터링 방법을 학습할 수 있다.
이 책의 대상 독자
Node.js에 어느 정도 경험이 있으며, 세네카와 마이크로서비스를 배우기 원하는 개발자를 위한 책이다. 이 책의 70%는 실무적인 내용이고(따라서 많은 코드를 작성하게 된다), 30%는 이론이다. 이론을 기반으로 생성된 코드는 독자가 새로운 소프트웨어의 패턴을 적용하는 데 도움이 될 것이다.
이 책의 구성
1장, ‘마이크로서비스 아키텍처’에서는 마이크로서비스 지향 아키텍처의 장점과 단점을 살펴본다. 1장은 이 책의 나머지 부분에 대한 기초가 된다.
2장, ‘마이크로서비스, 그리고 세네카와 PM2’에서는 마이크로서비스의 구축 방법으로 Node.js, 세네카, PM2를 소개한다. 2장에서는 Node.js 애플리케이션의 구조를 살펴보고, PM2를 이용해 애플리케이션을 실행하는 방법을 설명한다. 그리고 세네카와 PM2에 대한 몇 가지 대안에 대해 자세하게 살펴본다.
3장, ‘모놀리스에서 마이크로서비스로’에서는 마이크로서비스를 이용해 유기적인 성장(계획되지 않은 소프트웨어 변경)을 처리하는 방법에 대해 설명한다. 그리고 모놀리식(monolithic) 애플리케이션을 마이크로서비스로 분할하는 방법에 대해서도 다룬다.
4장, ‘첫 번째 마이크로서비스 작성에서는 첫 번째 마이크로서비스의 작성 방법에 대해 설명한다.
5장, ‘보안과 추적성’에서는 현대적인 시스템의 두 가지 중요한 측면인 보안과 추적성을 다루는 방법에 대해 설명한다. 정보를 안전하고 유지하고, 행동을 추적할 수 있도록 만들어야 한다. 이 장에서는 세네카를 이용해 작업하는 방법을 살펴본다.
6장. ‘Node.js 마이크로서비스 테스트와 문서화’에서는 주요한 프레임워크(모카(Mocha)와 차이(Chai))를 이용한 Node.js의 테스팅을 소개한다. 또한 가상 객체 서비스를 위해 시논Sinon(또 다른 프레임워크)도 이용할 것이다. 이 책에서는 마이크로서비스의 문서화를 위해서 스웨거(Swagger)를 선택했다.
7장, ‘마이크로서비스 모니터링’에서는 PM2를 이용해 마이크로서비스를 모니터링 하는 방법을 설명한다. 이 같은 고급 도구를 최대한 활용하기 위해 PM2와 주요 메트릭과 함께 이용한다.
8장, ‘마이크로서비스 배포’에서는 PM2를 이용해 다양한 환경에 마이크로서비스를 배포하는 방법을 설명한다. 단일 명령어로 애플리케이션 생태계를 관리하고 마이크로서비스 아키텍처를 통해 도입되는 오버헤드를 감소시키는 방법을 설명한다. Node.js에서 애플리케이션의 배포뿐 아니라 일반 애플리케이션에서의 배포에 대해서도 가장 진보된 시스템 중 하나인 도커에 대해서도 살펴본다.
목차
목차
- 1장. 마이크로서비스 아키텍처
- 마이크로서비스의 필요성
- 모놀리식 소프트웨어
- 현실에서의 마이크로서비스
- 마이크로서비스 지향 아키텍처
- 장점
- 단점
- 주요 설계 원칙
- 비즈니스 단위가 컴포넌트는 아니다
- 스마트한 서비스와 독립적인 처리 능력이 없는 통신 파이프분산화
- 기술적 정렬
- 마이크로서비스 크기
- 마이크로서비스의 주요 장점
- 탄력성
- 확장성
- 기술적 이질성
- 교체 가능성
- 독립성
- 교체 가능성이 중요한 이유
- 배포 용이성
- SOA vs 마이크로서비스
- 왜 Node.jsdlsrk?
- API 집합
- Node.js의 전망
- 요약
- 마이크로서비스의 필요성
- 2장. 마이크로서비스, 그리고 세네카와 PM2
- Node.js의 필요성
- Node.js, npm, 세네카, PM2의 설치
- npm
- 첫 번째 프로그램 - Hello World
- Node.js의 쓰레드 모델
- 모듈형 조직화의 모범 사례
- 자바스크립트
- SOLID 설계 원칙
- Node.js, npm, 세네카, PM2의 설치
- 세네카 - 마이크로서비스 프레임워크
- 제어의 역전 처리
- 세네카에서의 패턴 매칭
- Patrun - 패턴 매칭 라이브러리
- 패턴 재사용
- 플러그인 작성
- 웹 서버 통합
- PM2 - Node.js를 위한 태스크 러너
- 단일 쓰레드 애플리케이션과 예외
- PM2 - 업계 표준 태스크 러너 사용
- 요약
- Node.js의 필요성
- 3장. 모놀리스에서 마이크로서비스로
- 먼저, 모놀리스가 있었다
- 유기적 성장에 대한 대처 방법
- 적절한 추상적 수준
- 그 후, 마이크로서비스가 등장했다
- 마이크로서비스의 단점
- 모놀리스 분할
- 모놀리스 분할 문제 - 데이터 관련 사항
- 조직적 정렬
- 요약
- 먼저, 모놀리스가 있었다
- 4장. 첫 번째 Node.js 마이크로서비스 작성
- 마이크로머스 - 개요
- 제품 관리자 - 두 가지 측면을 갖는 핵심 요소
- 제품 목록 가져오기
- 카테고리 별로 가져오기
- ID 별로 가져오기
- 제품 추가하기
- 제품 제거하기
- 제품 편집하기
- 모든 기능을 연결하기
- 익스프레스와 통합하기 - REST API 생성 방법
- 이메일 전송기 - 일반적 문제
- 이메일 전송 방법
- 인터페이스 정의하기
- Mandrill 설정
- 실습 - 마이크로서비스에 Mandrill 통합하기
- 대체 전략
- 주문 관리자
- 마이크로서비스 정의하기 - 비-로컬 데이터 수집 방법
- 주문 관리자 - 코드
- 원격 서비스 호출
- 완벽함보다는 탄력성
- UI - API 집합체
- 프런트엔드 마이크로서비스의 필요성
- 코드
- 서비스 품질 저하 - 실패가 재앙이 되지 않는 경우
- 회로 차단기
- 세네카 - 삶을 더 쉽게 만드는 간단한 퍼즐
- 세네카와 프라미스
- 디버깅
- 요약
- 5장. 보안과 추적성
- 논리적인 인프라스트럭처 보안
- SSH - 통신 암호화하기
- 애플리케이션 보안
- 일반적인 보안 위협 - 최신 보안 상태 유지 방법
- 주입크로스 사이트 스크립팅
- 크로스 사이트 요청 위조
- 오픈 리다이렉트
- 효과적인 코드 리뷰
- 일반적인 보안 위협 - 최신 보안 상태 유지 방법
- 추적성
- 로깅
- 요청 추적
- 감사
- HTTP 코드
- 1xx - 정보 제공
- 2xx - 성공 코드
- 3xx - 리다이렉션
- 4xx - 클라이언트 오류
- 5xx -서버 오류
- 마이크로서비스에서 HTTP 코드가 문제되는 이유
- 요약
- 논리적인 인프라스트럭처 보안
- 6장. Node.js 마이크로서비스 테스트와 문서화
- 기능 테스트
- 자동화 테스트 피라미드
- 단위 테스트
- 통합 테스트
- 종단간 테스트
- 얼마나 많이 테스트해야 과도한가?
- Node.js에서 마이크로서비스 테스트Chai
- Mocha
- Sinon.JS - 가상 객체 생성 프레임워크
- 실제 마이크로서비스에서의 테스트
- 수동 테스트 - 필요악
- 자동화 테스트 피라미드
- 마이크로서비스 문서화
- Swagger를 통한 API 문서화
- Swagger 정의로부터 프로젝트 생성
- 요약
- 기능 테스트
- 7장. 마이크로서비스 모니터링
- 서비스 모니터링
- PM2와 Keymetrics를 이용한 모니터링
- 문제 진단애플리케이션 예외 처리 모니터링
- 사용자 정의 메트릭
- PM2와 Keymetrics를 이용한 모니터링
- 시미언 아미 - 스포티파이에서의 액티브 모니터링
- 처리량과 성능 저하
- 요약
- 서비스 모니터링
- 8장. 마이크로서비스 배포
- 소프트웨어 배포 개념
- 지속적인 통합
- 지속적인 전달
- PM2를 통한 배포
- PM2 - 에코시스템
- PM2를 통한 마이크로서비스 배포
- 서버 구성
- 도커 - 소프트웨어 전달을 위한 컨테이너
- 컨테이너 설정
- 도커 설치
- 이미지 선택
- 컨테이너 실행
- 필요한 소프트웨어 설치
- 변경 사항 저장
- Node.js 애플리케이션 배포
- 도커 컨테이너 생성 자동화
- 컨테이너 설정
- 배우기는 쉽고 마스터하기는 어려운 Node.js 이벤트 루프
- Node.js 애플리케이션 클러스터링
- 애플리케이션 로드 밸런싱
- NGINX 상태 점검
- 패시브 상태 점검
- 액티브 상태 점검
- NGINX 상태 점검
- 소프트웨어 배포 개념
도서 오류 신고
정오표
정오표
[p.84 : 아래서 5행 - p.85 : 8행]
->
[p.112 : 3행 - p.113 : 2행]
"따라서 해결책은 간단하다. ~ '첫 번째 마이크로서비스의 확장'을 달성했다."
->
(삭제)
[p.128 : 제품 추가하기 소스 코드 6행]
products.category = args.category;
->
(삭제)
[p129 : 제품 편집하기 소스 코드 첫 행]
seneca.edit({area: "product", action: "edit"}, function(args,
->
seneca.add({area: "product", action: "edit"}, function(args,
[p.129 : 제품 제거하기 소스 코드 5행]
done(err, null);
->
(들여쓰기)done(err, null);
[p.131 : 소스 코드 5행]
products.category = args.category;
->
(삭제)
[p.133 : 소스 코드 9행]
[p.144 : 3행]
할 수 없는 것이
->
할 수 있는 것이
[p.148 : 4행]
수행하다면,
->
수행한다면,
[p.182 : 중간 명령어]
npm install ?g node-inspector
->
npm install -g node-inspector