Part1클라우드네이티브로의변화
1장클라우드네이티브애플리케이션이란?
1.1지금까지의이야기
1.2클라우드네이티브란무엇인가?
1.2.1확장성
1.2.2느슨한결합
1.2.3탄력성
1.2.4관리용이성
1.2.5관찰가능성
1.3클라우드네이티브는왜중요한가?
요약
2장왜Go가클라우드네이티브세상을지배하는가?
2.1Go를만들게된계기
2.2클라우드네이티브세계를위한기능
2.2.1컴포지션과구조타이핑
2.2.2이해하기쉬운언어
2.2.3CSP스타일의동시성
2.2.4빠른빌드속도
2.2.5언어의안정성
2.2.6메모리보안
2.2.7성능
2.2.8정적링크
2.2.9정적타이핑
요약
Part2클라우드네이티브Go의구성
3장Go프로그래밍기초
3.1기본데이터타입
3.1.1불린
3.1.2간단한숫자
3.1.3복소수
3.1.4문자열
3.2변수
3.2.1단축변수선언
3.2.2제로값
3.2.3공백식별자
3.2.4상수
3.3컨테이너타입:배열,슬라이스,맵
3.3.1배열
3.3.2슬라이스
3.3.3맵
3.4포인터
3.5제어구조
3.5.1for의재미
3.5.2if구문
3.5.3switch구문
3.6에러제어
3.6.1에러정의하기
3.7함수에재미를더하기:가변인자와클로저
3.7.1함수
3.7.2가변인자함수
3.7.3익명함수와클로저
3.8구조체,메서드,인터페이스
3.8.1구조체
3.8.2메서드
3.8.3인터페이스
3.8.4타입임베딩을통한컴포지션
3.9장점:동시성
3.9.1고루틴
3.9.2채널
3.9.3Select
요약
4장클라우드네이티브패턴
4.1Context패키지
4.1.1Context가하는일
4.1.2Context생성
4.1.3Context종료시점과타임아웃정의
4.1.4요청범위값의정의
4.1.5Context사용하기
4.2이장의구성
4.3안정성패턴
4.3.1서킷브레이커
4.3.2디바운스
4.3.3재시도
4.3.4스로틀
4.3.5타임아웃
4.4동시성패턴
4.4.1팬인
4.4.2팬아웃
4.4.3퓨처
4.4.4샤딩
요약
5장클라우드네이티브서비스구축
5.1서비스를만들어봅시다
5.1.1키-값저장소란?
5.2요구사항
5.2.1멱등성이란무엇이고왜중요할까?
5.2.2궁극적인목표
5.3제너레이션0:핵심기능
5.3.1아주간단한API
5.4제너레이션1:모놀리스
5.4.1net/http패키지를이용한HTTP서버구성
5.4.2gorilla/mux패키지를이용한HTTP서버구성
5.4.3RESTful서비스만들기
5.4.4동시성이슈로부터안전한데이터구조만들기
5.5제너레이션2:리소스상태유지
5.5.1트랜잭션로그란무엇일까?
5.5.2트랜잭션로그파일에상태저장하기
5.5.3외부데이터베이스에상태저장하기
5.6제너레이션3:전송계층보안구현
5.6.1전송계층보안
5.6.2사설키와인증서파일
5.6.3웹서비스를HTTPS로보호하기
5.6.4전송계층요약
5.7키-값저장소의컨테이너화
5.7.1생초보를위한도커기초
5.7.2키-값저장소컨테이너만들기
5.7.3컨테이너데이터의외부화
요약
Part3클라우드네이티브특징
6장신인성
6.1클라우드네이티브의핵심은무엇인가?
6.2가장중요한것은신인성이다
6.3신인성은무엇이고왜중요한가?
6.3.1신인성:더이상운영만을위한것이아니다
6.4신인성확보
6.4.1결함예방
6.4.2결함감내
6.4.3결함제거
6.4.4결함예측
6.5TheTwelve-FactorApp과의지속적인관련성
6.5.1코드베이스
6.5.2의존성
6.5.3설정
6.5.4백엔드서비스
6.5.5빌드,릴리즈,실행
6.5.6프로세스
6.5.7데이터격리
6.5.8확장성
6.5.9폐기가능성
6.5.10개발/프로덕션환경일치
6.5.11로그
6.5.12관리프로세스
요약
7장확장성
7.1확장성이란무엇일까?
7.1.1다양한형태의확장
7.24가지대표적인병목
7.3스테이트와스테이트리스
7.3.1애플리케이션스테이트와리소스스테이트의차이
7.3.2스테이트리스의장점
7.4지연된확장:효율성
7.4.1LRU캐시를이용한효율적캐싱
7.4.2효율적인동기화
7.4.3메모리릭
7.4.4효율성이란
7.5서비스아키텍처
7.5.1모놀리스시스템아키텍처
7.5.2마이크로서비스시스템아키텍처
7.5.3서버리스아키텍처
요약
8장느슨한결합
8.1강한결합
8.1.1강한결합의다양한형태
8.2서비스간의통신
8.3요청-응답메시징
8.3.1일반적인요청-응답구현
8.3.2net/http패키지를이용한HTTP요청발행
8.3.3gRPC를이용한원격프로시저호출
8.4플러그인을이용한로컬리소스의느슨한결합
8.4.1플러그인패키지를통한프로세스내부플러그인
8.4.2RPC를이용한해시코프의Go플러그인시스템
8.5육각형아키텍처
8.5.1아키텍처
8.5.2육각형서비스구현
요약
9장탄력성
9.1왜탄력성이문제인가
9.2시스템이실패한다는의미는무엇인가?
9.2.1탄력성을높이는여러가지방법
9.3연쇄적인실패
9.3.1과부하방지
9.4다시시도하기:요청재시도
9.4.1백오프알고리즘
9.4.2서킷브레이킹
9.4.3타임아웃
9.4.4멱등법칙
9.5서비스중복성
9.5.1중복성을위한설계
9.5.2오토스케일링
9.6건강한헬스체크
9.6.1인스턴스가‘건강하다’는것은어떤의미일까?
9.6.2헬스체크의세가지타입
9.6.3페일오픈
요약
10장관리용이성
10.1관리용이성은무엇이고왜신경써야할까요?
10.2애플리케이션설정하기
10.2.1설정모범사례
10.2.2환경변수를이용한설정
10.2.3커맨드라인인자를이용한설정
10.2.4파일을이용한설정
10.2.5Viper:설정패키지를위한스위스군용칼
10.3피처플래그를이용한기능관리
10.3.1기능플래그의진화
10.3.2제너레이션0:초기구현
10.3.3제너레이션1:하드코딩된피처플래그
10.3.4제너레이션2:설정할수있는플래그
10.3.5제너레이션3:동적인피처플래그
요약
11장관찰가능성
11.1관찰가능성이란무엇인가?
11.1.1관찰가능성은왜필요한가?
11.1.2관찰가능성은‘전통적인’모니터링과어떻게다른가?
11.2관찰가능성의세가지기둥
11.3OpenTelemetry
11.3.1OpenTelemetry컴포넌트
11.4트레이싱
11.4.1트레이싱의개념
11.4.2OpenTelemetry를이용한트레이싱
11.4.3모두하나로합치기:트레이싱
11.5지표
11.5.1푸시,풀방식의지표수집비교
11.5.2OpenTelemetry의지표
11.5.3모두하나로합치기:지표
11.6로깅
11.6.1로깅모범사례
11.6.2Go표준로그패키지를이용한로깅
11.6.3Zap로깅패키지
요약