Go로 구현하는 클라우드 네이티브 애플리케이션 [클라우드와 MSA 기반의 고성능 웹앱 개발하기]
- 원서명Cloud Native programming with Golang: Develop microservice-based high performance web apps for the cloud with Go (ISBN 9781787125988)
- 지은이미나 안드라오스(Mina Andrawos), 마틴 헬미크(Martin Helmich)
- 옮긴이박병주
- ISBN : 9791161756264
- 35,000원
- 2022년 04월 29일 펴냄
- 페이퍼백 | 508쪽 | 188*235mm
- 시리즈 : 프로그래밍 언어
책 소개
소스 코드 파일은 여기에서 내려 받으실 수 있습니다.
https://github.com/AcornPublishing/cloud-native-golang
본문에 쓰인 컬러 이미지는 여기에서 내려 받으세요.
요약
도커와 쿠버네티스의 개발 언어인 Go를 사용해 AWS상의 여러 핵심 서비스로 구성되는 마이크로서비스 아키텍처(MSA) 기반의 클라우드 네이티브 애플리케이션 개발을 다룬다. 기본적인 Go 언어 문법과 웹 개발 기초 지식이 있는 독자를 대상으로 현대적인 애플리케이션 구현에 필요한 아키텍처, 보안, 배포, 모니터링, 디자인 패턴 등 전반적인 지식을 실제 코드를 통해 학습할 수 있다.
이 책에서 다루는 내용
◆ 현대적인 소프트웨어 애플리케이션 아키텍처 이해
◆ 다른 서비스와 효과적으로 통신할 수 있는 안전한 마이크로서비스 구현
◆ 카프카, Rabbitmq, AWS SQS와 같은 메시지 큐를 활용한 이벤트 주도 아키텍처
◆ 몽고DB, AWS의 다이나모DB와 같은 현대적인 핵심 데이터베이스 기술 이해
◆ 컨테이너와 쿠버네티스 활용
◆ AWS 기초 탐구
◆ S3, SQS, 다이나모DB 등 아마존 클라우드의 핵심 서비스와 연계된 Go 언어 활용
◆ 타입스크립트를 사용한 프론트엔드 애플리케이션 작성
◆ 현대적인 애플리케이션의 지속적 배포 구현
이 책의 대상 독자
보안성, 회복력(탄력성), 견고성, 확장성을 갖춘 클라우드 네이티브 애플리케이션 구축을 원하는 Go 개발자를 대상으로 한다. 웹 서비스와 웹 프로그래밍의 기초 지식은 이 책을 마치는 데 큰 도움이 될 것이다.
이 책의 구성
1장, ‘현대적인 마이크로서비스 아키텍처’에서는 클라우드 기반 애플리케이션의 일반적인 기능과 마이크로서비스 아키텍처를 설명한다.
2장, ‘REST API를 사용한 마이크로서비스 구축’에서는 Go 언어로 현대적인 마이크로서비스를 만드는 방법을 설명하는데, 중요하고 고려해야 하는 주제를 다룬다.
3장, ‘마이크로서비스 보안’에서는 마이크로서비스를 안전하게 하는 방법을 보여준다. Go 언어로 어떻게 인증서와 HTTPS를 다루는지 알아본다.
4장, ‘메시지 큐를 사용한 비동기 마이크로서비스 아키텍처’에서는 메시지 큐를 사용해 비동기 마이크로서비스 아키텍처를 구현하는 방법을 보여준다.
5장, ‘리액트로 프론트엔드 구축’에서는 자바스크립트 세계로 잠시 떠나 마이크로서비스 기반 프로젝트의 웹 프론트엔드를 리액트 프레임워크로 어떻게 구축하는지 보여준다.
6장, ‘컨테이너로 애플리케이션 배포’에서는 애플리케이션 컨테이너를 사용해 이식과 재현이 가능한 방식으로 Go 애플리케이션을 배포하는 방법을 보여준다.
7장, ‘AWS I: 기초, Go를 위한 AWS SDK와 EC2’는 AWS 생태계를 다루는 두 개의 장 중 첫 번째다. 7장에서는 AWS의 실용적인 세부 사항을 다룬다.
8장, ‘AWS II: S3, SQS, API 게이트웨이, 다이나모DB’에서는 AWS 생태계를 좀 더 상세하게 다룬다. AWS 세계에서 인기 있는 서비스들로 더 깊이 들어갈 것이다.
9장, ‘지속적인 배포’에서는 Go 애플리케이션을 위한 기본적인 지속적인 배포 파이프라인 구현 방법을 설명한다. 이를 위해 지속적인 배포CD, 지속적 배포의 기본 원칙을 기술하고 Travis CI와 깃랩 같은 도구를 사용해 간단한 파이프라인 구현 방법을 설명한다.
10장, ‘애플리케이션 모니터링’에서는 프로메테우스와 그라파나를 사용해 마이크로서비스 아키텍처를 어떻게 모니터링하는지 보여준다.
11장, ‘마이그레이션’에서는 예전부터 사용한 모놀리식 애플리케이션을 클라우드에 준비된 현대적인 마이크로서비스 애플리케이션으로 마이그레이션할 때 고려해야 하는 실용적인 요소와 접근 방식을 다룬다.
12장, ‘Go가 나아갈 방향’에서는 전통적인 방식의 대안적 통신 프로토콜, AWS 외 기타 클라우드 제공자 및 차세대 빅 트렌드로 자리 잡을 새로운 아키텍처 패러다임과 같은 탐구할 가치가 있는 현대적인 클라우드 관련 기술을 다룬다.
목차
목차
- 1장. 현대적인 마이크로서비스 아키텍처
- 왜 Go 언어인가?
- 기본 설계 목표
- 클라우드 서비스 모델
- 클라우드 애플리케이션 아키텍처 패턴
- 12 요소 앱
- 마이크로서비스란 무엇인가?
- 마이크로서비스 배포
- REST 웹 서비스와 비동기식 메시징
- MyEvents 플랫폼
- 요약
- 02장. Rest API를 사용한 마이크로서비스 구축
- 배경
- 마이크로서비스란?
- 마이크로서비스의 내부
- 마이크로서비스란?
- RESTful 웹 API
- Gorilla 웹 툴킷
- Restful API 구현
- 지속성 계층
- 몽고DB
- 몽고DB와 Go 언어
- RESTful API 핸들러 함수 구현
- 요약
- 배경
- 03장. 마이크로서비스 보안
- HTTPS
- 대칭 암호화 방식
- HTTPS에서 대칭키 알고리듬
- 비대칭 암호화 방식
- HTTP에서 비대칭 암호화 방식
- 대칭 암호화 방식
- Go에서의 안전한 웹 서비스
- 인증서 얻기
- OpenSSL
- generate_cert.go
- Go에서 HTTPS 서버 구축
- 인증서 얻기
- 요약
- HTTPS
- 04장. 메시지 큐를 사용한 비동기 마이크로서비스 아키텍처
- 발행/구독 패턴
- 예약 서비스 소개
- 이벤트 콜라보레이션
- RabbitMQ로 발행/구독 구현
- 고급 메시지 큐잉 프로토콜
- 도커로 하는 RabbitMQ 빠른 시작
- 고급 RabbitMQ 설정
- Go로 RabbitMQ 연결
- AMQP 메시지 발행과 구독
- 이벤트 배출자 작성
- 이벤트 구독자 작성
- 예약 서비스 작성
- 이벤트 소싱
- 아파치 카프카로 발행/구독과 이벤트 소싱 구현
- 도커로 카프카 빨리 시작
- 아파치 카프카의 기본 원칙
- Go로 카프카에 연결
- 카프카로 메시지 발행
- 카프카에서 메시지 소비
- 요약
- 05장. 리액트로 프론트엔드 구축
- 리액트 시작
- Node.js와 타입스크립트 설정
- 리액트 프로젝트 초기화
- 리액트 기본 원칙
- MyEvents 프론트엔드 시동 걸기
- 이벤트 리스트 구현
- 자신의 클라이언트 가져오기
- 이벤트 리스트 구성 요소 구축
- 백엔드 서비스에서 CORS 활성화
- 이벤트 리스트 테스트
- 라우팅과 내비게이션 추가
- 예약 프로세스 구현
- 요약
- 리액트 시작
- 06장. 컨테이너로 애플리케이션 배포
- 컨테이너란?
- 도커 소개
- 간단한 컨테이너 실행
- 자신만의 이미지 작성
- 컨테이너들의 네트워킹
- 볼륨으로 작업
- 컨테이너 작성
- 백엔드 서비스들을 위한 컨테이너 작성
- 더 작은 이미지들을 위한 정적 컴파일 기능 사용
- 프론트엔드용 컨테이너 작성
- 컨테이너 작성
- 도커 컴포즈로 애플리케이션 배포
- 이미지 발행
- 애플리케이션을 클라우드에 배포
- 쿠버네티스 소개
- MiniKube로 로컬 쿠버네티스 설정
- 쿠버네티스의 핵심 개념
- 서비스
- 지속 볼륨
- MyEvents를 쿠버네티스로 배포
- RabbitMQ 브로커 생성
- 몽고DB 컨테이너 생성
- 쿠버네티스에서 이미지 사용 가능하게 만들기
- MyEvents 구성 요소 배포
- HTTP 인그레스 구성
- RabbitMQ 브로커 생성
- 요약
- 07장. AWS I: 기초, Go를 위한 AWS SDK와 EC2
- AWS 기초
- AWS 콘솔
- AWS 커맨드라인 인터페이스(CLI)
- AWS 리전과 존
- AWS 태그
- AWS 일래스틱 빈스톡
- AWS 서비스
- GO를 위한 AWS SDK
- AWS 리전 구성
- AWS SDK 인증 구성
- IAM 사용자 생성
- IAM 역할 생성
- Go를 위한 AWS SDK의 기초
- 세션
- 서비스 클라이언트
- 네이티브 데이터 타입
- 공유 구성
- 페이지 매기기 메서드
- 대기
- 에러 처리
- EC2
- EC2 인스턴스 생성
- EC2 인스턴스 생성
- 리눅스나 맥OS 머신에서 EC2 인스턴스 접속
- 윈도우에서 EC2 접속
- 보안 그룹
- GO를 위한 AWS SDK
- 요약
- AWS 기초
- 08장. AWS II: S3, SQS, API 게이트웨이, 다이나모DB
- S3
- S3 구성
- SQS
- AWS API 게이트웨이
- 다이나모DB
- 다이나모DB 구성 요소
- 속성 값 데이터 타입
- 기본키
- 보조 인덱스
- 테이블 생성
- Go 언어와 다이나모DB
- 다이나모DB 구성 요소
- 요약
- S3
- 09장. 지속적인 배포
- 프로젝트 설정
- 버전 관리 설정
- 의존성 벤더링
- Travis CI 사용
- 쿠버네티스에 배포
- GitLab 사용
- GitLab 설정
- GitLab CI 설정
- GitLab 사용
- 요약
- 프로젝트 설정
- 10장. 애플리케이션 모니터링
- 프로메테우스와 그라파나 설정
- 프로메테우스의 기본
- 프로메테우스 초기 구성 파일 생성
- 도커로 프로메테우스 실행
- 도커에서 그라파나 실행
- 지표 내보내기
- Go 애플리케이션에서 프로메테우스 클라이언트 사용
- 프로메테우스 스크래핑 대상 구성
- 맞춤형 지표 내보내기
- 프로메테우스를 쿠버네티스에서 실행
- 요약
- 프로메테우스와 그라파나 설정
- 11장. 마이그레이션
- 모놀리식 애플리케이션이란?
- 마이크로서비스란?
- 모놀리식 애플리케이션을 마이크로서비스로 마이그레이션
- 사람과 기술
- 모놀리식 애플리케이션을 여러 조각으로 자르기
- 어떻게 코드를 깨뜨릴까?
- 글루 코드
- 마이크로서비스 디자인 패턴
- 이타적 아키텍처
- 4계층 연계 플랫폼
- 도메인 주도 설계에서 경계 맥락
- 데이터 일관성
- 데이터 일관성을 위한 이벤트 주도 아키텍처
- 이벤트 소싱
- CQRS
- 요약
- 12장. Go가 나아갈 방향
- 마이크로서비스 통신
- 프로토콜 버퍼
- GRPC
- AWS 추가 사항
- 다이나모DB 스트림
- AWS에서의 오토스케일링
- 아마존 관계형 데이터베이스 서비스
- 기타 클라우드 제공자
- 마이크로소프트 애저
- 구글 클라우드 플랫폼
- 오픈스택
- 클라우드에서 컨테이너 실행
- 서버리스 아키텍처
- 마이크로서비스 통신