Go 성능 최적화 가이드
Description
가장 효율적이고 실용적인 소프트웨어를 향한 여정
개발자들이여 ‘Go’ 하라!
기술 발전과 빠른 시장 변화, 늘어나는 시스템 복잡성으로 인해 개발자들은 ‘소프트웨어 효율성’이라는 불편한 주제를 피하곤 한다. 그러나 개발 비용을 줄이고 비즈니스에서 성공하려면 관찰 가능성에 기반한 성능 최적화가 필수다. 이 책은 어떤 개발자라도 소프트웨어 효율성을 효과적으로, 전문적으로 쉽게 다루도록 돕는 데 초점을 맞추었다. 이를 위해 필자는 더 빠른 시스템 성능을 구현하고 더 적은 자원을 소모하는 데 필요한 도
구와 지식을 구체적으로 제공한다.
저자

바르틀로미에플로트카

바르틀로미에(바르텍)플로트카는구글시니어소프트웨어엔지니어(구레드햇수석소프트웨어엔지니어)이며,현CNCF(https://cncf.io)TAG관찰가능성그룹의기술리드다.Go로작성한인기있고안정적인,성능과효율성중심의분산시스템을만드는작업과관련된관찰가능성구현에기여해왔다.프로메테우스,gRPC에코시스템의라이브러리를포함한다양한오픈소스프로젝트의핵심메인테이너다.2017년에는파비안라인아르츠와함께타노스(https://thanos.io)라는인기있는오픈소스분산타임시리즈데이터베이스를만들었다.이프로젝트는저렴하면서도효율적인메트릭모니터링을지향함으로써수백개의성능및효율성개선을이뤘다.바르텍은Go의가독성,신뢰성,효율성에깊은관심을기울여왔고,수많은도구를만드는데기여했다.또한블로그포스팅과가이드를통해,개발자들이실용적이면서도효율적인Go애플리케이션을작성할수있도록돕고있다.

목차

Chapter1소프트웨어효율성이중요한이유
1.1성능의뒷면
1.2효율성에관한일반적인오해
1.3코드의성능을끌어올리는열쇠
1.4마치며

Chapter2효율적인Go언어
2.1Go에대해알아야할기본사항들
2.2고급언어요소
2.3Go는정말빠를까?
2.4마치며

Chapter3효율성완전정복
3.1낭비제거이상의최적화는제로섬게임
3.2최적화작업의어려움
3.3목표에대한확실한이해
3.4효율성문제에대처하는태도
3.5최적화설계수준들
3.6효율성인식개발절차
3.7마치며

Chapter4Go의CPU자원사용법
4.1최신컴퓨터구조의CPU
4.2어셈블리어
4.3Go컴파일러이해
4.4CPU와메모리벽문제
4.5스케줄러
4.6언제동시성을사용할것인가?
4.7마치며

Chapter5Go의메모리자원사용법
5.1메모리관련성
5.2메모리문제유무파악
5.3물리적메모리
5.4운영체제메모리관리
5.5Go메모리관리
5.6마치며

Chapter6효율성관찰가능성
6.1관찰가능성
6.2[예시]레이턴시계측
6.3효율성메트릭의의미체계
6.4마치며

Chapter7데이터기반효율성평가
7.1복잡도분석
7.2벤치마킹의기술
7.3실험의신뢰성
7.4벤치마킹수준
7.5마치며

Chapter8벤치마킹
8.1마이크로벤치마크
8.2마이크로벤치마킹팁과트릭
8.3매크로벤치마크
8.4일반적인매크로벤치마킹워크플로
8.5마치며

Chapter9데이터기반병목현상분석
9.1효율성을위한근본원인분석
9.2Go에서의프로파일링
9.3프로파일링시그널추출
9.4공통계측프로파일링
9.5조언과요령
9.6마치며

Chapter10최적화예제
10.1Sum예제
10.2레이턴시최적화하기
10.3메모리사용량최적화하기
10.4동시성을이용한레이턴시최적화
10.5추가사항:고정관념벗어나기
10.6마치며

Chapter11최적화패턴
11.1일반패턴
11.2‘세가지R’최적화방법
11.3리소스누수방지
11.4사전할당의중요성
11.5배열로인한문제:메모리남용
11.6메모리재사용과풀링
11.7마치며
11.8다음나아갈단계는?

APPENDIXA레이턴시냅킨수학계산

찾아보기

출판사 서평

[이책의핵심내용]
이책은Go언어를단순히효과적(Effective)으로작성하는것을넘어효율적(Efficient)으로소프트웨어를개발하는방법을알려준다.저자는효율성의의미를정의하는것에서부터이야기를시작하여,컴퓨터성능의발전과하드웨어비용의감소로인해간과하기쉬운최적화의필요성과실용적인수행방법에대해설명한다.이책은개발자기술면접에서자주언급되는시간복잡도와공간복잡도분석수준을넘어서,소프트웨어의효율성을측정해개선이필요한부분을찾고어떻게유의미한개선을할수있는지와개발프로세스전반에적용할수있는모범사례들을소개한다.이는Go언어뿐만아니라다른언어에도충분히적용가능한내용으로다른언어를주로사용하는개발자에게도유익한내용이될것이다.

[이책의대상독자]
 Go또는다른최신프로그래밍언어들로프로그램을설계·생성·변경하려는소프트웨어개발자들
 데브옵스,사이트신뢰성엔지니어,시스템관리자,플랫폼팀등소프트웨어를운영하는분들
 소프트웨어효율성을높이고비용을절감하려는매니저,프로덕트매니저,리더들

[이책의구성]
 1장:효율성의개념과소프트웨어효율성이중요한이유를다룬다.
 2장:효율성측면에서Go언어를소개한다.
 3장:최적화를어떻게생각하고접근해야할지설명한다.효율성을개선하려면오랜시간이필요하지만체계적으로접근하면많은시간과노력을아낄수있다.
 4~5장:레이턴시,CPU,메모리자원을다룬다.그리고운영체제와Go가이것들을어떻게추상화하는지설명한다.
 6장:소프트웨어최적화와관련해데이터기반의사결정의의미를다룬다.
 7장:실험의신뢰성과복잡도분석을논의한다.
 8~9장:벤치마킹과프로파일링기법을설명한다.
 10~11장:다양한최적화예제를10장에서보여주고,마지막11장에서는Go커뮤니티에서경험한다양한효율성패턴과기법에대해공부하고요약한다.


[추천사]
『Go성능최적화가이드』는놀라우면서도통찰력있는책으로,소프트웨어효율성에대한생각을바꿔줄것이다.이를통해,독자들은코드를최적화하면서데이터에기반한평가를하고,최적화가가능한패턴인지알아차리는방법을배울것이다.코드를작성할때효율성을생각하게하고,이를쉽게해내는데이책이큰도움이되리라확신한다!
_사스와타무케르지(레드헷엔지니어)

Go언어가배우기쉽고성능도좋다는것은이미널리알려져있다.이를방증하듯,국내에서도Go언어관련행사에몰려드는사람들의수가점점증가하고있다.하지만'쉽다'는부분엔동감해도'좋다'는부분엔여전히의구심을품는이들이있다.이책에서는Go언어런타임뒤에숨겨진컴퓨터의물리적특징과프로젝트에서Go를사용할때고려할사항들을살펴본다.또한Go로작성된프로그램의성능을측정하는방법과현대적인배포환경에서이를더욱최적화하는방법까지안내하며'효율적으로더좋은'프로그램을만들수있도록돕는다.Go언어를진지한목적으로사용하려는사람들에게이책을적극추천한다.나는Go언어가처음배포될때부터10년넘게주력언어로Go를사용해왔다.GolangKorea의오거나이저를역임했고현재는42dot에서백엔드엔지니어로일하며실무에Go언어를적극사용하고있다.
_이호민(42dot백엔드엔지니어,20년차개발자)

『Go성능최적화가이드』를읽으면서Go코드의효율성에대한깊이있는관점을얻을수있었다.Go커뮤니티에서활동하며많은자료를접해왔지만,이책은다른책들과차별화된내용을제공한다.특히,초보자도이해하기쉽게구성되어있어Go성능최적화방법을습득하는데큰도움이될것이다.Go개발자라면이책을통해Go의내부까지깊이있는인사이트를얻어가길바란다.
_한성민(GolangKorea오거나이저,MLGDE)