gRPC 시작에서 운영까지 [도커와 쿠버네티스를 위한 클라우드 네이티브 애플리케이션 구축]
- 원서명gRPC: Up and Running: Building Cloud Native Applications with Go and Java for Docker and Kubernetes (ISBN 9781492058335)
- 지은이카순 인드라시리(Kasun Indrasiri), 다네쉬 쿠루푸(Danesh Kuruppu)
- 옮긴이한성곤
- ISBN : 9791161754635
- 25,000원
- 2020년 11월 12일 펴냄
- 페이퍼백 | 284쪽 | 188*235mm
- 시리즈 : 클라우드 컴퓨팅
책 소개
소스 코드 파일은 여기에서 내려 받으실 수 있습니다.
https://github.com/switchover/grpc-up-and-running
요약
클라우드 및 마이크로서비스 아키텍처의 출현으로 오늘날 애플리케이션은 프로세스간 통신 기술을 사용해 연결되며, gRPC는 가장 널리 사용되는 효율적인 통신 기술 중 하나이다. 이 책은 gRPC를 처음 시작하는 아키텍트에게 애플리케이션 간 통신 설계를 위한 깊이 있는 이해를 제공한다. 또한 개발자들이 gRPC를 실제 서비스에 적용할 때 필요한 인증과 권한 관리, 확장을 위한 로드 밸런싱 등 다양한 고급 기술도 실제 사례를 중심으로 Go와 Java 언어를 통해 제시한다.
이 책에서 다루는 내용
■ gRPC의 기본 사항을 이해하고 유사한 기술과 비교하기
■ 실제 사례를 통한 gRPC 통신 패턴 확인
■ gRPC 통신 프로토콜의 내부 세부 사항
■ 인터셉터, 멀티플렉싱, 에러 처리 등의 고급 gRPC 기능 탐색
■ 통신 채널을 보호하고 사용자를 인증하기
■ gRPC 애플리케이션 수명 주기에 따라 테스트, CI/CD 통합, 도커, 쿠버네티스 배포
이 책의 대상 독자
여러 프로세스 간 통신 기술을 사용해 분산 애플리케이션과 마이크로서비스를 구축하는 개발자를 위한 책이다. 개발자가 분산된 애플리케이션이나 마이크로서비스를 개발하려면 gRPC의 기본 사항과 함께 서비스 간 통신이 필요한 때와 사용하는 방법, 실제 환경에서의 모범 사례 등을 배워야 한다. 아울러 마이크로서비스나 클라우드 네이티브 아키텍처를 채택하고 서비스 통신 방식을 설계하는 아키텍트는 다른 기술과 비교해보고, 언제 사용해야 하는지, 또는 언제 사용하지 말아야 하는지 등의 지침을 제공해야 하기 때문에 많은 인사이트를 얻을 수 있다.
이 책을 읽는 개발자와 아키텍트는 프로세스 간 통신 기술, 서비스 지향 아키텍처(SOA, Service-Oriented Architecture), 마이크로서비스와 같은 기본적인 분산 컴퓨팅의 기본 지식이 있다고 가정한다.
이 책의 구성
실제 적용 사례를 통해 이론적인 개념을 설명하며, Go 언어와 자바를 사용한 코드 예제를 광범위하게 활용해 각 개념에 대한 실무 경험을 제공한다. 이 책은 다음과 같이 8개의 장으로 구성됐다.
1장, ‘gRPC 소개’에서는 gRPC 기본 사항의 기초 지식을 제공하고 REST, GraphQL, 다른 RPC 기술과 같은 유사한 프로세스 간 통신 기술 스타일을 비교한다.
2장, ‘gRPC 시작’에서는 Go 언어와 자바를 사용해 완전한 gRPC 애플리케이션 구축의 첫 번째 경험을 제공한다.
3장, ‘gRPC 통신 패턴’에서는 실제 예제를 통해 gRPC 통신 패턴을 살펴본다.
4장, ‘gRPC: 동작 원리’에서는 gRPC 내부에 관심이 있는 고급 사용자를 위한 장으로, 서버와 클라이언트 간 gRPC 통신의 모든 단계와 네트워크상 동작 방식을 설명한다.
5장, ‘gRPC: 고급 기능’에서는 인터셉터(interceptors), 데드라인(deadlines), 메타데이터(metadata) 멀티플렉싱(multiplexing), 로드밸런싱(load balancing) 등과 같은 주요 고급 기능을 설명한다.
6장, ‘보안 적용 gRPC’에서는 통신 채널을 보호하는 방법과 gRPC 애플리케이션에 대한 사용자 인증과 접근 제어에 대한 포괄적인 이해를 제공한다.
7장, ‘서비스 수준 gRPC 실행’에서는 gRPC 애플리케이션의 전체 개발 주기(development life cycle)를 살펴본다. gRPC 애플리케이션의 테스팅, CI/CD와의 통합, 도커(Docker), 쿠버네티스 배포와 실행, 상태 확인을 알아본다.
8장, ‘gRPC 생태계’에서는 gRPC의 유용한 지원 요소들을 설명한다. 대부분의 프로젝트는 gRPC 기반의 실제 애플리케이션을 구축할 때 유용하다.
목차
목차
- 1장. gRPC 소개
- gRPC
- 서비스 정의
- gRPC 서버
- gRPC 클라이언트
- 클라이언트-서버 메시지 흐름
- 프로세스 간 통신의 역사
- 기존 RPC
- SOAP
- REST
- gRPC의 시작
- 왜 gRPC인가?
- 다른 프로토콜과의 비교: 그래프QL과 쓰리프트
- gRPC 실사례
- 넷플릭스
- etcd
- 드롭박스
- 요약
- gRPC
- 2장. gRPC 시작
- 서비스 정의 작성
- 메시지 정의
- 서비스 정의
- 구현
- 서비스 개발
- gRPC 클라이언트 개발
- 빌드와 실행
- Go 서버 빌드
- Go 클라이언트 빌드
- Go 서버와 클라이언트 실행
- 자바 서버 빌드
- 자바 클라이언트 빌드
- 자바 서버와 클라이언트 실행
- 요약
- 서비스 정의 작성
- 3장. gRPC 통신 패턴
- 단순 RPC(단일 RPC)
- 서버 스트리밍 RPC
- 클라이언트 스트리밍 RPC
- 양방향 스트리밍 RPC
- 마이크로서비스 통신을 위한 gRPC
- 요약
- 4장. gRPC: 동작 원리
- RPC 흐름
- 프로토콜 버퍼를 사용한 메시지 인코딩
- 인코딩 기술
- 길이-접두사 지정 메시지 프레이밍
- HTTP/2를 통한 gRPC
- 요청 메시지
- 응답 메시지
- gRPC 통신 패턴에서의 메시지 흐름 이해
- gRPC 구현 아키텍처
- 요약
- 5장. gRPC: 고급 기능
- 인터셉터
- 서버 측 인터셉터
- 클라이언트 측 인터셉터
- 데드라인
- 취소 처리
- 에러 처리
- 멀티플렉싱
- 메타데이터
- 메타데이터 생성과 조회
- 메타데이터 전송과 수신: 클라이언트 측
- 메타데이터 전송과 수신: 서버 측
- 네임 리졸버
- 로드밸런싱
- 로드밸런서 프록시
- 클라이언트 측 로드밸런싱
- 압축
- 요약
- 인터셉터
- 6장. 보안 적용 gRPC
- TLS를 사용한 gRPC 채널 인증
- 단방향 보안 연결 활성화
- mTLS 보안 연결 활성화
- gRPC 호출 인증
- 베이직 인증 사용
- OAuth 2.0 사용
- JWT 사용
- 구글 토큰 기반 인증 사용
- 요약
- TLS를 사용한 gRPC 채널 인증
- 7장. 서비스 수준 gRPC 실행
- gRPC 애플리케이션 테스트
- gRPC 서버 테스트
- gRPC 클라이언트 테스트
- 부하 테스트
- 지속 통합
- 배포
- 도커로의 배포
- 쿠버네티스로의 배포
- 관찰 가능성
- 메트릭
- 로그
- 추적
- 디버깅과 문제 해결
- 추가 로깅 활성화
- 요약
- gRPC 애플리케이션 테스트
- 8장. gRPC 생태계
- gRPC 게이트웨이
- gRPC를 위한 HTTP/JSON 트랜스코딩
- gRPC 서버 리플렉션 프로토콜
- gRPC 미들웨어
- 상태 확인 프로토콜
- gRPC 상태 프로브
- 다른 생태계 프로젝트
- 요약
도서 오류 신고
정오표
정오표
코드 수정 사항은 여기에서 살펴보실 수 있습니다.
https://github.com/switchover/grpc-up-and-running
[p.38 : 2행]
폴리글랏(ployglot)
->
폴리글랏(polyglot)
[p.45 : 4행]
기존 클라이언트-서버 통신에 근본적으로 다른 접근 방법의 고정된 계약 방식을 사용한다.
->
기존의 클라이언트-서버 통신에 근본적으로 다른 접근 방식을 제공한다. 반면 gRPC는 클라이언트와 서버간 원격 메서드에 고정된 계약 방식을 사용한다.
[p.54 : 두 번째 코드 2-4]
코드 2-4
->
코드 2-5
[p.66 : 옮긴이 메모]
코드 2-4
->
코드 2-5
[p.217 : 16행 ghz 명령 실행]
(-d 옵션 뒤쪽 공백 추가 및 0.0.0.0:50051 -> localhost:50051변경)
->
[p.220 : 20행 docker 빌드 명령]
(뒤쪽 “.” 추가)
docker image build -t grpc-productinfo-server -f server/Dockerfile
->
docker image build -t grpc-productinfo-server -f server/Dockerfile .
[p.257 : 맨 하단 curl 호출 부분]
(마지막 라인은 명령이 아닌 출력 내용으로 뒤쪽 \ 부분 삭제)
$ curl -X POST http://localhost:8081/v1/product \
-d '{"name": "Apple", "description": "iphone7", "price": 699}' \
"38e13578-d91e-11e9"
->
$ curl -X POST http://localhost:8081/v1/product \
-d '{"name": "Apple", "description": "iphone7", "price": 699}'
(* 마지막 "38e13578-d91e-11e9" 라인은 출력된 결과로 생성된 제품 ID입니다.)