클라우드 네이티브 Go : 불안정한 환경 안에서 신뢰할 수 있는 서비스 구축하기

클라우드 네이티브 Go : 불안정한 환경 안에서 신뢰할 수 있는 서비스 구축하기

$35.00
Description
Go 프로그래밍으로 배우는 클라우드 네이티브 서비스의 모든 것!
도커(Docker), 쿠버네티스(Kubernetes), 프로메테우스(Prometheus) 같은 클라우드 네이티브 기술의 공통점은 무엇일까요? 바로 Go라는 프로그래밍 언어로 만들어졌다는 것입니다. 이 책은 Go의 장점을 활용해 예측할 수 없는 환경에서도 확장 가능하면서 탄력적인 클라우드 네이티브 서비스를 개발하는 방법을 알려줍니다. 특히 Go 프로그래밍 언어가 지닌 로 레벨의 특징, 미들레벨의 디자인 패턴, 하이레벨 아키텍처 고려 사항 등에 맞춘 애플리케이션의 구조과 구성을 확인할 수 있습니다.

이 책에서는 Go를 이용해 간단하지만 모든 기능을 갖춘 분산 키-값 저장소를 구축합니다. 저장소를 구축하면서 중급에서 고급 개발자까지 참고할 수 있는 클라우드 네이티브 관리와 배포 문제를 해결하는 모범 사례를 확인할 수 있습니다. 그리고 왜 클라우드 네이티브 서비스를 개발하는 프로그래밍 언어로 Go를 채택했는지를 자연스럽게 알 수 있습니다.
저자

매튜A.티트무스

분자생물학학위를취득한경험이있는소프트웨어개발업계의전문가입니다.클라우드네이티브기술과Go프로그래밍언어의얼리어답터이자옹호자이며,프로덕션품질시스템구축에필요한사항에관해열정적인관심이있습니다.분산시스템을관찰하고조정하는전략을구현하는데많은시간을보내는중입니다.

목차

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로깅패키지
요약

출판사 서평

[옮긴이의말]

클라우드는모든인프라리소스의가상화를표방하며등장해한정된자원에대한활용도를극대화했습니다.그렇지만여전히레거시인프라가만들어두었던개념과틀을벗어나지못하는경우가많았고,가상화계층때문에발생하는여러가지인프라관점의불이익에대한불만의목소리도상존했습니다.왜이런현상이일어난것일까요?여느사회적변화와마찬가지로클라우드가탄생했다고하여기존에사용되던모든것이어느날아침에바뀔수는없었기때문입니다.초기클라우드는레거시인프라와굉장히많이닮아있었고일부영역에서의변화정도로받아들여졌던것이큰이유라고생각합니다.클라우드라는구름을살짝걷어내보니약간달라보일뿐그동안익숙했던것과크게다르지않다는것을사람들이알아챘던것입니다

이책은왜Go가클라우드혹은클라우드만을위한프로그래밍언어로최적의선택인지를차근차근풀어나갑니다.어떠한언어적특성이Go를클라우드에최적화된프로그래밍언어로만들어주는것일까요?도대체클라우드가가진특징이무엇이길래그에걸맞은산출물을만들수있는프로그래밍언어의탄생을고대하게만든것일까요?이책의저자매튜A.티트무스는기본적인Go의특징을가볍게살펴보고,Go의어떤특성으로개발된소프트웨어산출물이클라우드환경에서최적의효용성을만들어내는지차근차근풀어나갑니다.

Go에익숙하지않더라도다른프로그래밍언어에어느정도숙달된독자라면어렵지않게이책의내용을이해할수있을것으로믿어의심치않습니다.책의마지막장을덮을즈음에는여러분머릿속가득Go의코드들이난장을펼치고있길기대해봅니다!

이책의특징
클라우드네이티브애플리케이션이다른소프트웨어아키텍처와어떻게다른지확인합니다.
Go프로그래밍언어를이용해확장가능한분산서비스를설계하는방법을이해합니다.
채널이나고루틴같은Go의로레벨특징을활용해안정적인클라우드네이티브서비스를구현하는방법을익힙니다.
‘서비스안정성’의개념을익히고,‘클라우드네이티브’와어떤관계가있는지알아봅니다.
다양한패턴,추상화,도구를적용하여복잡한분산시스템을구축하고관리하는방법이무엇인지알아봅니다.