Go 언어를 활용한 마이크로서비스 개발 [매끄럽고 견고하면서도 효율적인 마이크로서비스 구현]
- 원서명Building Microservices with Go: Develop seamless, efficient, and robust microservices with Go (ISBN 9781786468666)
- 지은이닉 잭슨(Nic Jackson)
- 옮긴이이상식
- ISBN : 9791161751900
- 30,000원
- 2018년 07월 27일 펴냄
- 페이퍼백 | 460쪽 | 188*235mm
- 시리즈 : acorn+PACKT, 프로그래밍 언어
책 소개
소스 코드 파일은 여기에서 내려 받으실 수 있습니다.
요약
마이크로서비스의 아키텍처를 소개한다. API 디자인•컨테이너화(Docker)•테스트•공통 아키텍처 패턴 등 마이크로서비스의 구축에 필수적인 내용부터 모니터링•보안•배포 등 서비스 운용과 관련된 고려 사항까지, 마이크로서비스의 설계와 개발 전반에 대해 다룬다. 마이크로서비스를 매끄럽고 견고하면서도 효율적으로 구현할 수 있도록 지원하는 Go의 언어적인 특성과 프레임워크를 비롯한 Go의 스택을 소개한다.
이 책에서 다루는 내용
█ 마이크로서비스 계획 및 마이크로서비스 아키텍처 설계
█ RESTful API와 데이터베이스를 사용한 마이크로서비스 작성
█ 마이크로서비스 설계에 사용하는 일반적인 용어와 패턴 이해
█ 마이크로서비스의 수평적 규모확장에 사용하는 도구와 자동화 방법
█ 개발 주기를 획기적으로 개선해줄 Docker 및 Docker Compose를 사용한 컨테이너화 사용법
█ 모니터링, 로깅, 서비스 탐색, 자동화를 통한 서비스 확장으로 안전하게 시스템을 관리하는 법
█ Go 언어를 사용한 마이크로서비스 테스트 및 API 통합 테스트
이 책의 대상 독자
처음으로 마이크로서비스 아키텍처를 사용해 프로젝트에 적용할 만한 기술을 찾고 있는 개발자
이 책의 구성
1장, ‘마이크로 서비스 소개’에서는 Go 언어가 마이크로서비스 구축에 적합한 이유를 살펴보고, 기본적인 마이크로서비스를 작성하는 데 필요한 모든 구성 요소를 갖춘 표준 라이브러리를 살펴본다. 먼저 표준 요소를 살펴보면 나중에 설명하는 프레임워크가 얼마나 유용한지 더 잘 알 수 있다.
2장, ‘좋은 API 디자인하기’에서는 좋은 API의 조건을 살펴본다. REST와 RPC의 차이점을 설명하면서 REST와 RPC을 소개한다. 또한 API 작성 및 버전 관리의 우수 사례를 검토한다.
3장, ‘Docker 소개’에서는 Docker 이미지로 애플리케이션을 래핑하는 방법과 개발 절차의 일부로 Docker 및 Docker Compose를 사용하는 방법을 설명한다. 애플리케이션에 필요한 작고 가벼운 이미지를 만드는 방법과 함께 Docker를 사용하고 Dockerfiles를 작성하는 좋은 관행도 알아본다.
4장, ‘테스트’에서는 마이크로서비스가 최고의 품질을 보장할 수 있도록 하는 다양한 기술을 소개한다. 단위 테스트, 행위 테스트 및 성능 테스트를 살펴보고 주요 테스트 프레임워크에 대한 실질적인 조언과 지식을 제공한다.
5장, ‘공통 패턴’에서는 마이크로서비스 아키텍처에서 자주 사용되는 표준 패턴 중 일부를 소개한다. 부하 분산, 회로 차단, 서비스 탐색 및 자동 조종 패턴을 자세히 살펴보고 이를 Go 언어에 맞게 구현하면 어떻게 되는지 살펴본다.
6장, ‘마이크로서비스 프레임워크’에서는 마이크로서비스에 필요한 많은 공통 기능을 구현하는 프레임워크를 살펴본다. 사용 예시를 통해 프레임워크들을 비교하고 대조해 본다.
7장, ‘로깅 및 모니터링’에서는 서비스가 올바르게 작동하는지 확인하기 위한 필수 기술을 알아보고, 정상 동작하지 않는 경우를 성공적으로 진단하고 디버깅하기 위한 모든 정보를 수집할 수 있도록 한다. 간단한 측정치 및 타이밍 정보를 위해 StatsD를 사용하는 방법, 로그 파일 정보를 처리하는 방법, 더 상세한 데이터를 기록하기 위한 접근 방법 및 서비스의 전체적인 개요를 제공하는 NewRelic과 같은 플랫폼을 알아본다.
8장, ‘보안’에서는 마이크로서비스의 인증, 권한 부여 및 보안을 살펴본다. JWT에 대해 알아보고, 요청을 확인하고 보안을 유지하기 위한 미들웨어의 구현 방법을 알아본다. 더 넓은 관점에서 TLS 암호화를 구현하는 이유, 서비스 간 비신뢰의 원칙을 적용하는 이유에 대해서도 설명한다.
9장, ‘이벤트 중심 아키텍처’에서는 이벤트를 사용해 마이크로서비스가 공동 작업을 수행할 수 있도록 하는 일반적인 패턴을 설명한다. 가장 일반적인 이벤트 패턴 중 두 가지를 배우고, Go에서 이를 구현할 수 있는 방법을 살펴본다. 또한 도메인 주도 디자인의 도입과 유비쿼터스 언어의 사용이 소프트웨어 개발 프로세스에 어떻게 도움이 되는지 알아본다.
10장, ‘지속적인 딜리버리’에서는 지속적인 딜리버리의 개념을 설명한다. 그 다음 이 책의 앞부분에서 작성한 간단한 애플리케이션 중 하나에 대한 지속적인 딜리버리 설정을 자세히 알아본다.
목차
목차
- 1장. 마이크로서비스 소개
- net/http로 간단한 웹 서버 만들기
- JSON 읽기 및 쓰기
- Go 구조체를 JSON으로 마샬링하기
- JSON을 Go 구조체로 언마샬링하기
- net/http를 사용한 라우팅
- 경로
- 편리한 핸들러
- FileServer
- NotFoundHandler
- RedirectHandler
- StripPrefix
- TimeoutHandler
- 정적 파일 핸들러
- 핸들러 만들기
- 컨텍스트
- Background
- WithCancel
- WithDeadline
- WithTimeout
- WithValue
- 컨텍스트 사용하기
- Go 표준 라이브러리의 RPC
- 간단한 RPC 예제
- HTTP를 통한 RPC
- HTTP를 통한 JSON-RPC
- 요약
- 2장. 좋은 API 디자인하기
- RESTful API
- URI
- URI 형식
- REST 서비스를 위한 URI 경로 설계
- HTTP 동사
- URI query design
- 응답 코드
- HTTP 헤더
- 자바스크립트에서 API에 접근하기
- RPC API
- RPC API 디자인
- Filtering
- API 버전 관리
- 시맨틱 버전 관리
- REST API의 버전 관리 형식
- RPC API 버전 관리 형식
- 객체 타입 표준화
- 날짜
- API 문서화
- REST 기반 API
- RPC 기반 API
- 요약
- RESTful API
- 3장. Docker 소개
- Docker 컨테이너 소개
- Docker 설치
- Docker 볼륨
- 유니온 파일 시스템
- 볼륨 마운트
- Docker 포트
- 이름을 지정해 시작한 컨테이너 제거하기
- Docker 네트워킹
- 브리지 네트워킹
- 호스트 네트워킹
- 네트워크 단절
- 오버레이 네트워크
- 사용자 정의 네트워크 드라이버
- 사용자 정의 브리지 네트워크 만들기
- Dockerfiles 작성
- Docker용 애플리케이션 코드 빌드하기
- Dockerfiles로 이미지 빌드하기
- 컨테이너에서 데몬 실행하기
- Docker Compose
- 리눅스에 Docker Compose 설치하기
- 서비스 시작
- compose 파일의 위치 지정
- 프로젝트 이름 지정
- 요약
- 4장. 테스트
- 테스트 피라미드
- 단위 테스트
- 의존성 주입과 모의 객체 만들기
- 코드 커버리지
- Docker Compose로 테스트하기
- 벤치마킹 및 프로파일링
- 벤치마크
- 프로파일링
- 요약
- 테스트 피라미드
- 5장. 공통 패턴
- 실패에 대비한 설계
- 패턴
- 이벤트 처리
- 타임 아웃
- 백 오프
- 회로 차단
- 상태 점검
- 쓰로틀링
- 서비스 탐색
- 부하 분산
- 캐싱
- 요약
- 6장. 마이크로서비스 프레임워크
- 좋은 마이크로서비스 프레임워크의 조건
- Micro
- 설정
- 코드 생성
- 도구 지원(CI/CD, 크로스 플랫폼)
- 유지보수 가능성
- 형식(REST/RPC)
- 패턴
- 언어 독립성
- 다른 프레임워크와의 인터페이스 기능
- 효율성
- 품질
- 오픈 소스
- 보안
- 지원
- 확장성
- Micro에 대해 배운 것
- Kite
- 설정
- 코드 생성
- 도구 지원
- 유지보수 가능성
- 형식
- 패턴
- 언어 독립성
- 효율성
- 품질
- 오픈 소스
- 보안
- 지원
- 확장성
- Kite 종합
- gRPC
- 설정
- 코드 생성
- 도구 지원
- 유지보수 가능성
- 형식
- 패턴
- 언어 독립성
- 효율성
- 품질
- 오픈 소스
- 보안
- 지원
- 확장성
- gRPC에 대한 정리
- 요약
- 7장. 로깅 및 모니터링
- 로깅 모범 사례
- 측정지표
- 측정 지표로 가장 잘 표현되는 데이터 타입
- 명명 규칙
- 저장소 및 조회
- Grafana
- 로깅
- 상호 연관 ID를 사용한 분산 트레이스
- Elasticsearch, Logstash 및 Kibana(ELK)
- Kibana
- 예외
- 패닉 및 복구
- 요약
- 8장. 보안
- 암호화 및 서명
- 대칭 키 암호화
- 공개 키 암호화
- X.509 디지털 인증서
- TLS / SSL
- 외부에 대한 보안
- 2계층 또는 3계층 방화벽
- 웹 애플리케이션 방화벽
- API 게이트웨이
- DDoS 방지
- 애플리케이션 보안
- 예방
- 탐지
- 대응
- 복구
- 권한 혼동
- 공격자가 방화벽을 우회 할 수 있는 방법
- 시나리오
- 입력 유효성 검사
- TLS
- 데이터 저장소 보안
- OWASP
- 인증 및 권한 부여
- 암호 해싱
- JWT
- 보안 메시지
- 공유 암호
- 대용량 메시지의 비대칭 암호화
- 유지 보수
- 컨테이너 패치
- 소프트웨어 업데이트
- 애플리케이션 코드 패치
- 로깅
- 요약
- 암호화 및 서명
- 9장. 이벤트 주도 아키텍처
- 동기식과 비동기식 처리의 차이점
- 동기식 처리
- 비동기식 처리
- 비동기 메시지의 유형
- 풀/큐 메시징
- 푸시 메시징
- 명령과 조회의 역할 분리(CQRS)
- 도메인 주도 설계
- DDD의 정의
- 기술적 부채
- DDD의 세부 구조
- 소프트웨어
- Kafka
- NATS.io
- AWS SNS/SQS
- Google Cloud Pub/Sub
- 요약
- 동기식과 비동기식 처리의 차이점
- 10장. 지속적인 딜리버리
- 지속적인 딜리버리의 개념
- 수동 배포
- 지속적인 딜리버리의 이점
- 지속적인 딜리버리의 여러 관점
- 지속적인 딜리버리 프로세스
- 개요
- 컨테이너 오케스트레이션의 정의
- 컨테이너 오케스트레이션의 옵션
- 불변 인프라의 정의
- Terraform
- 공급자
- Terraform 구성 엔트리 포인트
- VPC 모듈
- 출력 변수
- 인프라 구축
- 예제 애플리케이션
- 지속적인 딜리버리 작업 흐름
- 요약
- 지속적인 딜리버리의 개념
도서 오류 신고
정오표
정오표
[p.41 : 7행]
, omitempty
->
,omitempty
[p.41 : 9행]
, string
->
,string
[p.45 : 아래에서 9행]
{"Name": "World}
->
{"Name":"World"}
[p.45 : 아래에서 8행]
{"Name":"World"}
->
{"name": "World"}
[p.47 : 밑에서 3행 코드 주석 추가]
[p.48 : 아래에서 2행]
인코더와 반대되는 작업인 인코더라는
->
인코더와 반대되는 작업인 디코더라는
[p.49 : 5행]
ServerMux의 인스턴스인
->
ServeMux의 인스턴스인
[p.49 : 아래에서 1행]
ServerMux
->
ServeMux
[p.49 : 아래에서 2행]
ServerMux
->
ServeMux
[p.51 : 1행]
ServerMux는
->
ServeMux는
[p.51 : 밑에서 11행]
search.google.com/ 및 /ServerMux와
->
search.google.com/ 및 /ServeMux와
[p.56 : 밑에서 4행]
500 에러가
->
400 에러가
[p.64]
[p.65]
[p.69]
[p.70]
[p.71]
[p.72]
[p.103 : 코드 31행]
if callback != " {
->
if callback != "" {
[p.190]
[p205]
[p.206]