도커와 쿠버네티스의 개발 언어인 Go를 사용해 AWS상의 여러 핵심 서비스로 구성되는 마이크로서비스 아키텍처(MSA) 기반의 클라우드 네이티브 애플리케이션 개발을 다룬다. 기본적인 Go 언어 문법과 웹 개발 기초 지식이 있는 독자를 대상으로 현대적인 애플리케이션 구현에 필요한 아키텍처, 보안, 배포, 모니터링, 디자인 패턴 등 전반적인 지식을 실제 코드를 통해 학습할 수 있다.
Contents
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 서버 구축
__요약
04장. 메시지 큐를 사용한 비동기 마이크로서비스 아키텍처
__발행/구독 패턴
__예약 서비스 소개
__이벤트 콜라보레이션
__RabbitMQ로 발행/구독 구현
____고급 메시지 큐잉 프로토콜
____도커로 하는 RabbitMQ 빠른 시작
____고급 RabbitMQ 설정
____Go로 RabbitMQ 연결
____AMQP 메시지 발행과 구독
____이벤트 배출자 작성
____이벤트 구독자 작성
____예약 서비스 작성
__이벤트 소싱
__아파치 카프카로 발행/구독과 이벤트 소싱 구현
____도커로 카프카 빨리 시작
____아파치 카프카의 기본 원칙
____Go로 카프카에 연결
____카프카로 메시지 발행
____카프카에서 메시지 소비
__요약
05장. 리액트로 프론트엔드 구축
__리액트 시작
____Node.js와 타입스크립트 설정
____리액트 프로젝트 초기화
__리액트 기본 원칙
____MyEvents 프론트엔드 시동 걸기
____이벤트 리스트 구현
______자신의 클라이언트 가져오기
__이벤트 리스트 구성 요소 구축
____백엔드 서비스에서 CORS 활성화
____이벤트 리스트 테스트
____라우팅과 내비게이션 추가
____예약 프로세스 구현
__요약
06장. 컨테이너로 애플리케이션 배포
__컨테이너란?
__도커 소개
____간단한 컨테이너 실행
____자신만의 이미지 작성
____컨테이너들의 네트워킹
__볼륨으로 작업
____컨테이너 작성
______백엔드 서비스들을 위한 컨테이너 작성
____더 작은 이미지들을 위한 정적 컴파일 기능 사용
____프론트엔드용 컨테이너 작성
__도커 컴포즈로 애플리케이션 배포
__이미지 발행
__애플리케이션을 클라우드에 배포
__쿠버네티스 소개
____MiniKube로 로컬 쿠버네티스 설정
____쿠버네티스의 핵심 개념
____서비스
____지속 볼륨
____MyEvents를 쿠버네티스로 배포
______RabbitMQ 브로커 생성
________몽고DB 컨테이너 생성
________쿠버네티스에서 이미지 사용 가능하게 만들기
________MyEvents 구성 요소 배포
________HTTP 인그레스 구성
__요약
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 접속
________보안 그룹
__요약
08장. AWS II: S3, SQS, API 게이트웨이, 다이나모DB
__S3
____S3 구성
__SQS
__AWS API 게이트웨이
__다이나모DB
____다이나모DB 구성 요소
______속성 값 데이터 타입
____기본키
____보조 인덱스
____테이블 생성
____Go 언어와 다이나모DB
__요약
09장. 지속적인 배포
__프로젝트 설정
____버전 관리 설정
____의존성 벤더링
__Travis CI 사용
__쿠버네티스에 배포
____GitLab 사용
______GitLab 설정
______GitLab CI 설정
__요약
10장. 애플리케이션 모니터링
__프로메테우스와 그라파나 설정
____프로메테우스의 기본
____프로메테우스 초기 구성 파일 생성
______도커로 프로메테우스 실행
______도커에서 그라파나 실행
__지표 내보내기
____Go 애플리케이션에서 프로메테우스 클라이언트 사용
____프로메테우스 스크래핑 대상 구성
____맞춤형 지표 내보내기
__프로메테우스를 쿠버네티스에서 실행
__요약
11장. 마이그레이션
__모놀리식 애플리케이션이란?
__마이크로서비스란?
__모놀리식 애플리케이션을 마이크로서비스로 마이그레이션
____사람과 기술
____모놀리식 애플리케이션을 여러 조각으로 자르기
____어떻게 코드를 깨뜨릴까?
____글루 코드
__마이크로서비스 디자인 패턴
____이타적 아키텍처
____4계층 연계 플랫폼
____도메인 주도 설계에서 경계 맥락
______데이터 일관성
______데이터 일관성을 위한 이벤트 주도 아키텍처
______이벤트 소싱
______CQRS
__요약
12장. Go가 나아갈 방향
__마이크로서비스 통신
____프로토콜 버퍼
____GRPC
__AWS 추가 사항
____다이나모DB 스트림
____AWS에서의 오토스케일링
____아마존 관계형 데이터베이스 서비스
__기타 클라우드 제공자
____마이크로소프트 애저
____구글 클라우드 플랫폼
____오픈스택
__클라우드에서 컨테이너 실행
__서버리스 아키텍처
__요약
Author
미나 안드라오스,마틴 헬미크,박병주
Go 언어를 개인적, 전문적으로 사용해 깊은 경험을 쌓은 숙련된 엔지니어다. Go 언어에 대한 글과 교재를 정기적으로 저술하고 Go의 오픈소스 프로젝트를 공유하며 다양한 복잡도를 가진 수많은 Go 애플리케이션을 작성했다. Go 이외에는 자바, C#, 파이썬, C++ 기술을 보유하고 있으며, 다양한 데이터베이스와 소프트웨어 아키텍처로 작업하고 있다. 또한 소프트웨어 개발을 위한 애자일 방법론에도 능숙하다. 소프트웨어 개발 외에는 스크럼 마스터링, 기술 영업, 소프트웨어 제품 관리에 대한 실무 경험이 있다.
Go 언어를 개인적, 전문적으로 사용해 깊은 경험을 쌓은 숙련된 엔지니어다. Go 언어에 대한 글과 교재를 정기적으로 저술하고 Go의 오픈소스 프로젝트를 공유하며 다양한 복잡도를 가진 수많은 Go 애플리케이션을 작성했다. Go 이외에는 자바, C#, 파이썬, C++ 기술을 보유하고 있으며, 다양한 데이터베이스와 소프트웨어 아키텍처로 작업하고 있다. 또한 소프트웨어 개발을 위한 애자일 방법론에도 능숙하다. 소프트웨어 개발 외에는 스크럼 마스터링, 기술 영업, 소프트웨어 제품 관리에 대한 실무 경험이 있다.