Go 언어로 배우는 웹 애플리케이션 개발
저자

시미즈요이치로

저자:시미즈요이치로

1986년일본사이타마현가와구치시에서태어났다.속도와정밀도를다루는소프트웨어개발을동경해리코IT설루션(RicohITSolutions)에서일했으며,2017년SaaS형클라우드서비스회사인freee회계를거쳐2019년인터넷서비스를제공하는BASE에서근무했다.현재블록체인컨설팅업체인레이어엑스(LayerX)에서소프트웨어엔지니어로일하고있다.C,C++,C#,루비,PHP등다양한언어를실무에사용했으며,그중Go언어를가장좋아한다.



역자:김완섭

약15년간일본,한국,싱가포르에서IT및GIS/LBS분야업무를담당했다.일본에서는일본정부기관을대상으로한시스템통합(SI)업무를담당했으며,야후재팬으로직장을옮겨야후맵개발담당시니어엔지니어로근무했다.한국에서는SK에서티맵등내비게이션지도데이터담당매니저로근무했으며,현재는싱가포르에서독일계회사의솔루션아키텍트로근무하고있다.저서로는《나는도쿄롯폰기로출근한다》(삶과지식,2014)가있으며,역서로는《21개의작고재미난파이썬프로젝트》(2021),《그림으로공부하는IT인프라구조,개정판》(이상제이펍,2020)등40여종이있다.

목차

옮긴이머리말xiii
베타리더후기xiv
감사의글xvi
이책에대하여xvii

CHAPTER1Go언어알아보기
001프로그래밍언어의탄생배경을알아야하는이유003
002망설여질때는간단한것을선택하기006

CHAPTER2context패키지
003context패키지개요009
004왜context패키지를사용하는가?011
005중단알림013
006중단알림받기015
007context.Context타입값에데이터포함시키기018
008context.Context타입값을처리할때주의점020
009context.Context타입값에포함되는정보022
010context.Context타입값의정보가서버에전달되는가?025
011기존코드가context.Context타입값을인수로받지않는경우026

CHAPTER3database/sql패키지
012database/sql패키지의기본처리031
013sql.Open함수는한번만사용033
014Xxx메서드와XxxContext가존재할때는XxxContext메서드사용035
015*sql.Row타입값을반환하는메서드만sql.ErrNoRows발생036
016트랜잭션을사용할때는defer문으로Rollback메서드호출038
017database/sql패키지대신많이사용하는오픈소스패키지041

CHAPTER4가시성과Go
018public/private과exported/unexported의차이045

CHAPTER5GoModules
019모듈과패키지051
020GoModules053
021GoModules시작방법055
022GoModules에서자주사용하는명령058
023의존대상코드에디버그코드추가059
024GoModules를실현하는생태계061
025프라이빗모듈을사용한개발062
026자체작성패키지의버전관리064

CHAPTER6Go와객체지향프로그래밍
027객체지향에준하는프로그래밍언어의조건067
028Go에서는서브클래스화사용불가069
029내장과상속071

CHAPTER7인터페이스
030사용자가최소한의인터페이스정의하기077
031라이브러리로서의인터페이스반환079
032인터페이스사용시주의점081

CHAPTER8오류처리
033오류087
034웹애플리케이션에서의panic사용법101

CHAPTER9익명함수및클로저
035Go에서함수를다루는방법105
036상태를가진함수만들기107
037고루틴이용시익명함수에서외부함수의참조피하기109

CHAPTER10환경변수적용방법
038Go에서의환경변수처리113
039환경변수관련테스트116

CHAPTER11Go와의존성주입
040의존관계역전원칙121
041database/sql/driver패키지와DIP122
042DIP에준하는구현124
043과도한추상화(인터페이스활용)주의129

CHAPTER12미들웨어패턴
044미들웨어를만드는법133
045복원미들웨어135
046접속로그미들웨어137
047요청바디를로그에남기는미들웨어138
048상태코드및응답바디를저장하는미들웨어140
049context.Context타입값에정보를부여하는미들웨어142
050웹애플리케이션자체의미들웨어패턴143

CHAPTER13실습내용에대해
051실습진행방식147
052개발할웹애플리케이션개요149

CHAPTER14HTTP서버만들기
053프로젝트초기화155
054웹서버실행하기159
055리팩터링과테스트코드161
056포트번호를변경할수있도록만들기170

CHAPTER15개발환경정비하기
057도커를사용한실행환경177
058Makefile추가하기183
059깃허브액션을사용한지속적통합환경185

CHAPTER16HTTP서버를약한결합구성으로변경하기
060환경변수로부터설정불러오기193
061시그널처리하기198
062Server구조체정의하기202
063라우팅정의를분할한NewMux정의하기205
064run함수를다시리팩터링하기208

CHAPTER17엔드포인트추가하기
065entity.Task타입정의와영구저장방법의임시구현213
066헬퍼함수를구현하기216
067태스크를등록하는엔드포인트구현220
068테이블주도테스트와골든테스트를조합한테스트코드223
069태스크목록을반환하는엔드포인트구현227
070HTTP핸들러를라우팅으로설정하기229
071동작검증231

CHAPTER18RDBMS를사용한데이터베이스처리구현하기
072MySQL실행환경구축235
073RDBMS처리구현242
074RDBMS관련기능을테스트하기위한코드구현251

CHAPTER19기능별로HTTP핸들러구현분할하기
075HTTP핸들러에서RDBMS를사용한영구저장처리하기261
076HTTP핸들러기능분할267
077gogenerate명령을사용한목자동생성268
078목코드자동생성270
079사용자등록기능작성277
080동작확인283

CHAPTER20레디스와JWT를사용한인증및권한
081이번장에서구현하는기능287
082레디스준비288
083JWT의서명준비297
084JWT를사용한액세스토큰작성299
085사용자로그인엔드포인트구현315
086미들웨어패턴을사용한인증기능327
087요청에포함된인증과권한정보를사용한엔드포인트보호329
088동작확인339

찾아보기347

출판사 서평

Go의인기가계속고(Go)공행진하는이유가궁금하다면?

구글에서개발한오픈소스의프로그래밍언어인Go는간결하면서도높은신뢰성을자랑한다.웹서비스개발,웹앱개발,스마트폰앱개발,IoT시스템개발등효율적인소프트웨어개발에특화된언어이며,표준패키지만으로도고성능웹애플리케이션을개발할수있다.

이책의저자는베테랑고퍼로서Go언어의장점을십분활용해RESTAPI웹애플리케이션에개발에필요한필수지식을알려준다.찾기어려운Go언어의필수패키지및표준패키지사용법,외부오픈소스를사용한코딩기법,그리고Go언어를접했을때겪을수있는다양한문제를함께고민하면서코드를간결하게작성하는방법을소개한다.

총20장으로구성된이책은크게두개의파트로나눌수있다.전반부에서는개발자를위한팁을다룬다.Go언어의개념을알아보고,context패키지와database/sql패키지를소개한다.public/private과exported/unexported의차이,Go패키지관리툴인GoModules과Go언어에반영된객체지향요소,설계의유연성을높이고보수용이성을향상시키기위한인터페이스사용법은물론예외를사용하지않고이상사태를다루는방법,Go에서의함수사용법,환경변수적용방법,미들웨어패턴을설명한다.

후반부에서는본격적으로Go언어를활용해ToDo웹애플리케이션을개발한다.깃허브저장소를만든후HTTP서버코드를작성하고명령줄에서간단하게웹서버를실행해본다.이어서HTTP서버를약한결합구성으로변경하고,ToDo웹애플리케이션의태스크와관련된엔드포인트와RDBMS를활용해데이터베이스처리를구현한다.기능별로패키지를분할하도록HTTP핸들러의구조를리팩터링한후마지막으로인증및권한기능을새롭게추가하면서ToDo웹애플리케이션서버개발을마무리한다.특히최소한의코딩만한후테스트나추가코드의문제점은무엇인지찾아가면서점진적으로기능을추가하는후반부구성을통해실무에적용할수있는API서버구축방법을배울수있을것이다.

Go언어의기초뿐만아니라실전에서활용가능한최신기술을망라했으며,Go를좀더Go답게사용하는방법을알려주는이책을통해한단계성장하는고퍼가되자.

주요내용
●Go언어의설계이념
●웹애플리케이션개발에필요한필수패키지및표준패키지사용법
●외부오픈소스를사용한코딩기법
●도커및깃허브액션을활용한개발환경설정
●테스트코드의단계별작성
●실제업무에활용할수있는API서버구축방법