실무에 바로 쓰는 Go 언어 핸즈온 가이드
2023년 03월 10일 출간
국내도서 : 2022년 12월 26일 출간
- eBook 상품 정보
- 파일 정보 pdf (6.36MB)
- ISBN 9791192469881
- 지원기기 교보eBook App, PC e서재, 리더기, 웹뷰어
-
교보eBook App
듣기(TTS) 가능
TTS 란?텍스트를 음성으로 읽어주는 기술입니다.
- 전자책의 편집 상태에 따라 본문의 흐름과 다르게 텍스트를 읽을 수 있습니다.
- 이미지 형태로 제작된 전자책 (예 : ZIP 파일)은 TTS 기능을 지원하지 않습니다.
PDF 필기가능 (Android, iOS)
쿠폰적용가 22,050원
10% 할인 | 5%P 적립이 상품은 배송되지 않는 디지털 상품이며,
교보eBook앱이나 웹뷰어에서 바로 이용가능합니다.
카드&결제 혜택
- 5만원 이상 구매 시 추가 2,000P
- 3만원 이상 구매 시, 등급별 2~4% 추가 최대 416P
- 리뷰 작성 시, e교환권 추가 최대 200원
작품소개
이 상품이 속한 분야
● 커맨드 라인 애플리케이션 작성
● HTTP 서버 및 클라이언트 작성
● gRPC를 사용한 RPC 서비스 및 클라이언트 작성
● 네트워크 클라이언트와 서버의 미들웨어 작성
● 클라우드 오브젝트 저장소 및 SQL 데이터베이스에 데이터 저장
● 관용적 기법을 사용한 애플리케이션 테스트
● 애플리케이션에 관측 가능성 추가
● 애플리케이션의 구성 데이터 관리
기술 감수자 소개 xi
옮긴이 머리말 xii
베타리더 후기 xiii
감사의 글 xv
이 책에 대하여 xvi
시작하기 xix
CHAPTER 1 커맨드 라인 애플리케이션 작성 1
1.1 첫 애플리케이션 1
1.2 유닛 테스트 작성 10
1.3 Flag 패키지 사용 17
__1.3.1 플래그 파싱 로직 테스트 23
1.4 사용자 인터페이스 개선 26
__1.4.1 중복된 오류 메시지 제거 26
__1.4.2 사용법 메시지 사용자 정의 28
__1.4.3 위치 인수를 통해 이름 받기 29
1.5 유닛 테스트 업데이트 32
1.6 요약 37
CHAPTER 2 고급 커맨드 라인 애플리케이션 38
2.1 서브커맨드 구현 38
__2.1.1 서브커맨드 주도 애플리케이션 아키텍처 43
__2.1.2 메인 패키지 테스트 49
__2.1.3 Cmd 패키지 테스트 52
2.2 강건한 애플리케이션 작성 54
__2.2.1 데드라인을 사용한 사용자 입력 55
__2.2.2 사용자 시그널 처리 59
2.3 요약 64
CHAPTER 3 HTTP 클라이언트 작성 65
3.1 데이터 다운로드 65
__3.1.1 데이터 다운로더 테스트 67
3.2 수신 데이터 역직렬화 69
3.3 데이터 송신 75
3.4 바이너리 데이터 취급 82
3.5 요약 91
CHAPTER 4 고급 HTTP 클라이언트 92
4.1 커스텀 HTTP 클라이언트 사용 92
__4.1.1 과부화 상태의 서버에서 다운로드 92
__4.1.2 타임아웃 동작 테스트 97
__4.1.3 리다이렉트 동작 설정 100
4.2 사용자 요청 커스터마이징 103
4.3 클라이언트 미들웨어 구현 105
__4.3.1 RoundTripper 인터페이스 이해 106
__4.3.2 로깅 미들웨어 107
__4.3.3 모든 요청에 헤더 추가 110
4.4 커넥션 풀링 113
__4.4.1 커넥션 풀 설정 116
4.5 요약 118
CHAPTER 5 HTTP 서버 작성 119
5.1 첫 HTTP 서버 119
5.2 요청 핸들러 설정 122
__5.2.1 핸들러 함수 123
5.3 서버 테스트 126
5.4 Request 구조체 129
__5.4.1 메서드 130
__5.4.2 URL 130
__5.4.3 Proto, ProtoMajor, ProtoMinor 131
__5.4.4 Header 131
__5.4.5 Host 131
__5.4.6 Body 131
__5.4.7 Form, PostForm 131
__5.4.8 MultipartForm 132
5.5 Request 객체에 메타데이터 부착 133
5.6 스트리밍 요청 처리 137
5.7 응답 데이터 스트리밍 143
5.8 요약 150
CHAPTER 6 고급 HTTP 서버 애플리케이션 151
6.1 Handler 타입 151
6.2 핸들러 함수 간에 데이터 공유 153
6.3 서버 미들웨어 작성 158
__6.3.1 커스텀 HTTP 핸들러 기법 158
__6.3.2 HandlerFunc 기법 159
__6.3.3 미들웨어 체이닝 162
6.4 복잡한 서버 애플리케이션의 테스트 작성 167
__6.4.1 코드 정리 167
__6.4.2 핸들러 함수 테스트 173
__6.4.3 미들웨어 테스트 176
__6.4.4 초기 서버 시작 테스트 178
6.5 요약 181
CHAPTER 7 실서비스 가능한 HTTP 서버 182
7.1 요청 핸들링 중단 182
__7.1.1 요청 처리 중단 전략 186
__7.1.2 클라이언트 연결 끊김 처리 191
7.2 서버단 타임아웃 195
__7.2.1 모든 핸들러 함수에 타임아웃 구현 195
__7.2.2 서버 타임아웃 구현 196
__7.2.3 우아한 종료 구현 203
7.3 TLS를 활용한 보안 통신 207
__7.3.1 TLS와 HTTP/2 구성 208
__7.3.2 TLS 서버 테스트 212
7.4 요약 216
CHAPTER 8 gRPC를 사용한 RPC 애플리케이션 개발 217
8.1 gRPC와 프로토콜 버퍼 217
8.2 첫 서비스 작성 221
__8.2.1 서버 작성 223
__8.2.2 클라이언트 작성 229
__8.2.3 서버 테스트 234
__8.2.4 클라이언트 테스트 238
8.3 프로토콜 버퍼 메시지 살펴보기 241
__8.3.1 마샬링과 언마샬링 241
__8.3.2 상위 호환성 및 하위 호환성 247
8.4 여러 개의 서비스 249
8.5 에러 핸들링 256
8.6 요약 259
CHAPTER 9 고급 gRPC 애플리케이션 260
9.1 스트리밍 커뮤니케이션 260
__9.1.1 서버 사이드 스트리밍 261
__9.1.2 클라이언트 사이드 스트리밍 269
__9.1.3 양방향 스트리밍 272
9.2 임의의 데이터 송수신 281
9.3 인터셉터를 활용한 미들웨어 구현 292
__9.3.1 클라이언트 사이드 인터셉터 294
__9.3.2 서버 사이드 인터셉터 301
__9.3.3 스트림 래핑 307 / 9.3.4 인터셉터 체이닝 309
9.4 요약 311
CHAPTER 10 실서비스 가능한 gRPC 애플리케이션 312
10.1 TLS를 활용한 보안 통신 312
10.2 서버의 강건성 315
__10.2.1 헬스 체크 구현 316
__10.2.2 런타임 오류 처리 324
__10.2.3 요청 처리 중단 328
10.3 강건한 클라이언트 338
__10.3.1 연결 구성 개선 338
__10.3.2 일시적인 장애 상황 대응 340
__10.3.3 메서드 호출에 타임아웃 설정 346
10.4 연결 관리 348
10.5 요약 351
CHAPTER 11 데이터 저장소 활용 352
11.1 오브젝트 저장소 활용 353
__11.1.1 패키지 서버 접근 및 활용 354
__11.1.2 패키지 업로드 테스트 365
__11.1.3 기반 드라이버 타입 접근 368
11.2 관계형 데이터베이스 활용 370
__11.2.1 패키지 서버와 통합 372
__11.2.2 데이터 스토리지 테스트 383
__11.2.3 데이터 타입 형 변환 388
__11.2.4 데이터베이스 트랜잭션 이용 392
11.3 요약 394
APPENDIX A 애플리케이션을 관측 가능하게 만들기 395
A.1 로그, 메트릭, 그리고 트레이스 395
A.2 텔레메트리 데이터 내보내기 399
__A.2.1 커맨드 라인 애플리케이션 399
__A.2.2 HTTP 애플리케이션 408
__A.2.3 gRPC 애플리케이션 413
A.3 요약 415
APPENDIX B 애플리케이션 배포하기 415
B.1 환경설정 정보 관리 415
B.2 애플리케이션 배포 418
B.3 서버 애플리케이션 배포 421
B.4 요약 422
찾아보기 423
위와 같이 flag 패키지는 커맨드 라인 애플리케이션의 인자를 처리하기 위한 표준 동작의 타입과 메서드를 구현합니다. 애플리케이션 실행 시에 -h를 지정해주면 그 외의 모든 인수를 무시하고 애플리케이션 사용법을 출력합니다. / 애플리케이션의 옵션은 보통 필수적인 옵션과 부가적인 옵션이 공존합니다. / 위치 인수는 필수적인 옵션 뒤에 위치한다는 사실을 주의 깊게 봐주세요. flag 패키지는 위치 인수를 파싱하는 순간 -, --으로 시작하는 옵션을 처리하지 않습니다. (17쪽)
이 함수는 SIGINT 시그널과 SIGTERM 시그널을 처리할 수 있는 기본적인 방법을 구현합니다. 먼저 os 패키지에 정의된 Signal 구조체 타입의 처리 수용력이 1인 채널을 생성합니다. 그리고 signal 패키지의 Notify() 함수를 호출하여 syscall.SIGINT 시그널과 syscall.SIGTERM 시그널에 수신 채널을 설정합니다. 이후에는 해당 시그널을 대기하기 위하여 고루틴을 생성합니다. 시그널을 수신하면 cancelFunc() 함수를 호출하게 되는데, 이 함수는 위에서 생성된 ctx 콘텍스트를 취소하는 함수입니다. 해당 함수를 호출하게 되면 os.execCommandContext() 함수의 구현체가 내부에서 이를 인지하고 커맨드를 강제로 중단합니다. (60쪽)
서버에서 HTTP 리다이렉트를 응답하는 경우 기본 HTTP 클라이언트는 자동으로, 또 암묵적으로 최대 10회까지 리다이렉트를 따라가고, 이후에는 응답을 처리하지 않고 종료합니다. 만약 이러한 기본 동작을 변경시켜서 리다이렉트를 무시하고 싶거나, 현재 리다이렉트 중이라는 사실을 알고 싶다면 어떻게 해야 할까요? 이를 위해서는 http.Client 객체의 또 다른 필드인 CheckRedirect 필드를 설정해야 합니다. CheckRedirect 필드의 값을 특정 시그니처를 갖는 함수로 설정하면 리다이렉트와 관련된 응답에 대해서만 함수가 호출됩니다. 그러면 사용자가 필요한 로직을 구현하면 됩니다. 이 구현체 함수의 예시를 살펴봅시다. (100쪽)
서버 사이드 스트리밍에서 클라이언트가 서버로 요청을 보내면 서버는 하나 이상의 응답 메시지를 보낼 수 있습니다. 이전 장에서 구현한 Repo 서비스의 GetRepos() RPC 메서드를 생각해봅시다. 하나의 메시지 내에 리포지터리의 목록을 직접 보내는 대신에 리포지터리의 세부 정보를 포함한 각각의 여러 Repo 메시지를 보낼 수 있습니다. 애플리케이션 내에 이를 구현하는 방법을 살펴봅시다. (261쪽)
애플리케이션 관점에서 쿼리를 트랜잭션으로 실행시켰을 때 얻을 수 있는 가장 큰 장점은 트랜잭션을 생성하며 지정한 콘텍스트가 취소되었을 때 자동으로 롤백된다는 점입니다. 이는 즉 클라이언트가 요청을 취소하거나 혹은 다른 이유로 처리가 취소된 경우 서버에서 트랜잭션이 자동으로 취소되어 데이터베이스의 정합성을 유지할 수 있습니다. 예를 들어 다음과 같이 패키지 등록 핸들러 함수를 업데이트할 수 있습니다. (390쪽)
업무에 Go 언어를 사용하고 있는 고퍼라면 마주칠 수 있는 문제들을 깔끔하게 풀어주는 책이다. 우선 프로그래밍 언어를 활용하여 다양한 범주의 애플리케이션을 개발하기 위한 개념과 패턴을 소개하고, 실서비스 가능한 커맨드 라인 애플리케이션, HTTP 애플리케이션, gRPC 애플리케이션에 초점을 맞춘다.
1장과 2장에서는 커맨드 라인 애플리케이션을 개발하는 방법을 배운다. 표준 라이브러리 패키지를 활용하여 확장성 있고 테스트 가능한 커맨드 라인 프로그램을 개발하는 방법을 살펴본다. 3장과 4장에서는 실제로 서비스가 가능한 HTTP 클라이언트를 개발하는 방법을 알아본다. 타임아웃을 설정하는 방법, 커넥션 풀링, 미들웨어 컴포넌트를 구현하는 방법을 배운다.
5장부터 7장까지는 HTTP 서버 애플리케이션을 개발하는 방법을 알아본다. 데이터를 스트리밍하기 위한 방법, 미들웨어 컴포넌트를 구현하는 방법, 핸들러 함수 간에 데이터를 공유하는 방법, 애플리케이션의 안정성을 개선하기 위한 다양한 기법들을 배운다.
8장부터 10장까지는 gRPC를 활용하여 RPC 애플리케이션을 개발하는 방법을 배운다. 프로토콜 버퍼, 다양한 RPC 통신 패턴을 구현하는 방법, 애플리케이션의 일반 기능들을 구현하기 위해 클라이언트 사이드와 서버 사이드의 인터셉터를 구현하는 방법을 알아본다. 11장에서는 애플리케이션에서 오브젝트 스토어, 관계형 데이터베이스에 접근하여 데이터를 조회하고 저장하는 등의 사용 방법을 살펴본다.
부록에서는 애플리케이션에 관측 가능성을 추가하는 방법을 익히고 애플리케이션을 배포하는 일부 가이드라인도 제공한다. 코드를 직접 작성하고 실행해보며 연습 문제까지 풀어보면 Go 언어 초급자도 Go 언어 전문가가 될 수 있다.
작가정보
숭실대학교에서 정보통신공학 학사와 석사를 취득하였다. Go 언어의 매력에 빠져 2017년부터 시스템 엔지니어로 근무하며 다양한 시스템 도구와 대규모 트래픽 서비스를 Go 언어로 구현하고 운영하였다. 또한, 기존에 작성된 시스템 중 개선이 필요한 부분을 Go 언어로 포팅하여 비약적인 성능 향상을 이루기도 했다. 평소 동료 개발자들에게 Go 언어의 매력을 전하는 한편, 백발의 개발자를 꿈꾸며 개발과 삽질을 즐기는 중이다. 옮긴 책으로 《Go 언어를 활용한 네트워크 프로그래밍》(제이펍, 2022)이 있다.
이 상품의 총서
Klover리뷰 (0)
- - e교환권은 적립일로부터 180일 동안 사용 가능합니다.
- - 리워드는 1,000원 이상 eBook, 오디오북, 동영상에 한해 다운로드 완료 후 리뷰 작성 시 익일 제공됩니다. (5,000원 이상 상품으로 변경 예정, 2024년 9월 30일부터 적용)
- - 리워드는 한 상품에 최초 1회만 제공됩니다.
- - sam 이용권 구매 상품 / 선물받은 eBook은 리워드 대상에서 제외됩니다.
- 도서나 타인에 대해 근거 없이 비방을 하거나 타인의 명예를 훼손할 수 있는 리뷰
- 도서와 무관한 내용의 리뷰
- 인신공격이나 욕설, 비속어, 혐오 발언이 개재된 리뷰
- 의성어나 의태어 등 내용의 의미가 없는 리뷰
구매 후 리뷰 작성 시, e교환권 100원 적립
문장수집
- 구매 후 90일 이내에 문장 수집 등록 시 e교환권 100원을 적립해 드립니다.
- e교환권은 적립일로부터 180일 동안 사용 가능합니다.
- 리워드는 1,000원 이상 eBook에 한해 다운로드 완료 후 문장수집 등록 시 제공됩니다. (5,000원 이상 eBook으로 변경 예정, 2024년 9월 30일부터 적용)
- 리워드는 한 상품에 최초 1회만 제공됩니다.
- sam 이용권 구매 상품 / 선물받은 eBook / 오디오북·동영상 상품/주문취소/환불 시 리워드 대상에서 제외됩니다.
구매 후 문장수집 작성 시, e교환권 100원 적립
신규가입 혜택 지급이 완료 되었습니다.
바로 사용 가능한 교보e캐시 1,000원 (유효기간 7일)
지금 바로 교보eBook의 다양한 콘텐츠를 이용해 보세요!
- 구매 후 90일 이내 작성 시, e교환권 100원 (최초1회)
- 리워드 제외 상품 : 마이 > 라이브러리 > Klover리뷰 > 리워드 안내 참고
- 콘텐츠 다운로드 또는 바로보기 완료 후 리뷰 작성 시 익일 제공
가장 와 닿는 하나의 키워드를 선택해주세요.
총 5MB 이하로 jpg,jpeg,png 파일만 업로드 가능합니다.
신고 사유를 선택해주세요.
신고 내용은 이용약관 및 정책에 의해 처리됩니다.
허위 신고일 경우, 신고자의 서비스 활동이 제한될 수
있으니 유의하시어 신중하게 신고해주세요.
이 글을 작성한 작성자의 모든 글은 블라인드 처리 됩니다.
구매 후 90일 이내 작성 시, e교환권 100원 적립
eBook 문장수집은 웹에서 직접 타이핑 가능하나, 모바일 앱에서 도서를 열람하여 문장을 드래그하시면 직접 타이핑 하실 필요 없이 보다 편하게 남길 수 있습니다.
차감하실 sam이용권을 선택하세요.
차감하실 sam이용권을 선택하세요.
선물하실 sam이용권을 선택하세요.
-
보유 권수 / 선물할 권수0권 / 1권
-
받는사람 이름받는사람 휴대전화
- 구매한 이용권의 대한 잔여권수를 선물할 수 있습니다.
- 열람권은 1인당 1권씩 선물 가능합니다.
- 선물한 열람권이 ‘미등록’ 상태일 경우에만 ‘열람권 선물내역’화면에서 선물취소 가능합니다.
- 선물한 열람권의 등록유효기간은 14일 입니다.
(상대방이 기한내에 등록하지 않을 경우 소멸됩니다.) - 무제한 이용권일 경우 열람권 선물이 불가합니다.
첫 구매 시 교보e캐시 지급해 드립니다.
- 첫 구매 후 3일 이내 다운로드 시 익일 자동 지급
- 한 ID당 최초 1회 지급 / sam 이용권 제외
- 구글바이액션을 통해 교보eBook 구매 이력이 없는 회원 대상
- 교보e캐시 1,000원 지급 (유효기간 지급일로부터 7일)