이미 소장하고 있다면 판매해 보세요.
|
옮긴이 머리말 xiii
베타리더 후기 xiv 감사의 글 xvi 이 책에 대하여 xvii CHAPTER 1 Go 언어 알아보기 001 프로그래밍 언어의 탄생 배경을 알아야 하는 이유 003 002 망설여질 때는 간단한 것을 선택하기 006 CHAPTER 2 context 패키지 003 context 패키지 개요 009 004 왜 context 패키지를 사용하는가? 011 005 중단 알림 013 006 중단 알림 받기 015 007 context.Context 타입값에 데이터 포함시키기 018 008 context.Context 타입값을 처리할 때 주의점 020 009 context.Context 타입값에 포함되는 정보 022 010 context.Context 타입값의 정보가 서버에 전달되는가? 025 011 기존 코드가 context.Context 타입값을 인수로 받지 않는 경우 026 CHAPTER 3 database/sql 패키지 012 database/sql 패키지의 기본 처리 031 013 sql.Open 함수는 한 번만 사용 033 014 Xxx 메서드와 XxxContext가 존재할 때는 XxxContext 메서드 사용 035 015 *sql.Row 타입값을 반환하는 메서드만 sql.ErrNoRows 발생 036 016 트랜잭션을 사용할 때는 defer 문으로 Rollback 메서드 호출 038 017 database/sql 패키지 대신 많이 사용하는 오픈소스 패키지 041 CHAPTER 4 가시성과 Go 018 public/private과 exported/unexported의 차이 045 CHAPTER 5 Go Modules 019 모듈과 패키지 051 020 Go Modules 053 021 Go Modules 시작 방법 055 022 Go Modules에서 자주 사용하는 명령 058 023 의존 대상 코드에 디버그 코드 추가 059 024 Go Modules를 실현하는 생태계 061 025 프라이빗 모듈을 사용한 개발 062 026 자체 작성 패키지의 버전 관리 064 CHAPTER 6 Go와 객체지향 프로그래밍 027 객체지향에 준하는 프로그래밍 언어의 조건 067 028 Go에서는 서브클래스화 사용 불가 069 029 내장과 상속 071 CHAPTER 7 인터페이스 030 사용자가 최소한의 인터페이스 정의하기 077 031 라이브러리로서의 인터페이스 반환 079 032 인터페이스 사용 시 주의점 081 CHAPTER 8 오류 처리 033 오류 087 034 웹 애플리케이션에서의 panic 사용법 101 CHAPTER 9 익명 함수 및 클로저 035 Go에서 함수를 다루는 방법 105 036 상태를 가진 함수 만들기 107 037 고루틴 이용 시 익명 함수에서 외부 함수의 참조 피하기 109 CHAPTER 10 환경 변수 적용 방법 038 Go에서의 환경 변수 처리 113 039 환경 변수 관련 테스트 116 CHAPTER 11 Go와 의존성 주입 040 의존관계 역전 원칙 121 041 database/sql/driver 패키지와 DIP 122 042 DIP에 준하는 구현 124 043 과도한 추상화(인터페이스 활용) 주의 129 CHAPTER 12 미들웨어 패턴 044 미들웨어를 만드는 법 133 045 복원 미들웨어 135 046 접속 로그 미들웨어 137 047 요청 바디를 로그에 남기는 미들웨어 138 048 상태 코드 및 응답 바디를 저장하는 미들웨어 140 049 context.Context 타입값에 정보를 부여하는 미들웨어 142 050 웹 애플리케이션 자체의 미들웨어 패턴 143 CHAPTER 13 실습 내용에 대해 051 실습 진행 방식 147 052 개발할 웹 애플리케이션 개요 149 CHAPTER 14 HTTP 서버 만들기 053 프로젝트 초기화 155 054 웹 서버 실행하기 159 055 리팩터링과 테스트 코드 161 056 포트 번호를 변경할 수 있도록 만들기 170 CHAPTER 15 개발 환경 정비하기 057 도커를 사용한 실행 환경 177 058 Makefile 추가하기 183 059 깃허브 액션을 사용한 지속적 통합 환경 185 CHAPTER 16 HTTP 서버를 약한 결합 구성으로 변경하기 060 환경 변수로부터 설정 불러오기 193 061 시그널 처리하기 198 062 Server 구조체 정의하기 202 063 라우팅 정의를 분할한 NewMux 정의하기 205 064 run 함수를 다시 리팩터링하기 208 CHAPTER 17 엔드포인트 추가하기 065 entity.Task 타입 정의와 영구 저장 방법의 임시 구현 213 066 헬퍼 함수를 구현하기 216 067 태스크를 등록하는 엔드포인트 구현 220 068 테이블 주도 테스트와 골든 테스트를 조합한 테스트 코드 223 069 태스크 목록을 반환하는 엔드포인트 구현 227 070 HTTP 핸들러를 라우팅으로 설정하기 229 071 동작 검증 231 CHAPTER 18 RDBMS를 사용한 데이터베이스 처리 구현하기 072 MySQL 실행 환경 구축 235 073 RDBMS 처리 구현 242 074 RDBMS 관련 기능을 테스트하기 위한 코드 구현 251 CHAPTER 19 기능별로 HTTP 핸들러 구현 분할하기 075 HTTP 핸들러에서 RDBMS를 사용한 영구 저장 처리하기 261 076 HTTP 핸들러 기능 분할 267 077 go generate 명령을 사용한 목 자동 생성 268 078 목 코드 자동 생성 270 079 사용자 등록 기능 작성 277 080 동작 확인 283 CHAPTER 20 레디스와 JWT를 사용한 인증 및 권한 081 이번 장에서 구현하는 기능 287 082 레디스 준비 288 083 JWT의 서명 준비 297 084 JWT를 사용한 액세스 토큰 작성 299 085 사용자 로그인 엔드포인트 구현 315 086 미들웨어 패턴을 사용한 인증 기능 327 087 요청에 포함된 인증과 권한 정보를 사용한 엔드포인트 보호 329 088 동작 확인 339 찾아보기 347 |
淸水 陽一郞
김완섭의 다른 상품
|
HTTP 서버의 엔드포인트 개발 시에는 net/http 패키지의 *http.Request 타입의 Context 메서드에서 얻는 context.Context 타입값을 사용한다. 클라이언트가 요청을 중단하면 *http.Request 타입값에서 얻을 수 있는 context.Context 타입값이 중단 상태로 바뀌는 것뿐이다. 즉 HTTP 핸들러의 코드 내에서 중단됐다는 것을 아는 유일한 방법은 context.Context 타입값을 확인하는 것이다. context.Context 타입값의 상태를 확인하지 않으면 ‘클라이언트가 중단을 요청했지만 영원히 처리가 계속되는 상황’이 발생한다. 이는 데이터 불일치를 초래할 수 있다.
--- p.11 어떤 모듈이 업그레이드되면 사용자는 해당 업그레이드가 기존 프로그램을 악영향을 주는지, 아니면 프리뷰 형식의 변경인지 등을 확인할 필요가 있다. 버전 번호로 이런 변경 내용을 알려주는 것이 시맨틱 버저닝(semantic versioning) 2.0.0이다. Go Modules로 관리하는 모듈도 원칙상 시맨틱 버저닝 2.0.0을 기준으로 관리된다. 깃허브로 관리하고 있는 모듈이라면 시맨틱 버저닝에 따라 작성된 태그나 릴리스로 신규 버전인지를 판단할 수 있다. 특정 버전을 사용해야 하는 경우가 아니라면 latest로 지정한 모듈을 사용할 수도 있다. --- p.53 Go에서는 구현 측의 구조체가 표준 패키지나 외부 제공 라이브러리에 정의돼 있지 않아도 사용자 측에서 정의한 인터페이스를 통해 이용할 수 있다. 설령 다른 패키지에 구현돼 있다고 해도 사용자 측 패키지에 인터페이스를 정의하므로 패키지 독립성을 확보하고 완전한 약한 결합 관계를 구축할 수 있다. 또한, 사용자 측에서 자유롭게 인터페이스를 정의할 수 있어서 사용자 측 코드에서 이용할 수 있는 메서드만 지닌 인터페이스를 정의할 수도 있다. --- p.77 Go를 멀리하는 이유 중 하나가 오류 처리 시마다 if err != nil …이라고 몇 줄씩 코드를 작성해야 하는 것이 귀찮다는 점이 있다. 해결 방법 중 하나는 도메인 처리를 실행하는 메서드와 오류를 반환용 메서드를 가지는 bufio.Writer 같은 구조체를 설계해서 오류 처리 횟수를 줄이는 것이다. / 다른 해결책으로는 IDE가 제공하는 자동 완성이나 스니펫(snippet)을 이용하는 것이다. 비주얼 스튜디오 코드의 경우 iferr라고 입력하면 스니펫이 if err != nil …이라고 표시한다. GoLand의 경우는 오류 처리하고 싶은 오류 객체의 변수명이 myErr인 경우 myErr.nn라고만 입력하면 자동 완성을 통해 if err != nil …이 표시된다. --- p.98 Go의 net/http 패키지는 기본 설정에서 병렬 요청을 받을 수 있다. 따라서 루비나 파이썬(Python)의 표준 라이브러리가 제공하는 HTTP 서버 기능과 달리 프로덕션용으로 병렬 요청을 받기 위한 별도의 미들웨어를 준비할 필요가 없다. 로컬 개발과 프로덕션 개발에서 서버의 실행 구성에 차이가 없는 것도 Go로 개발할 때의 이점이다. --- p.160 레디스는 NoSQL 데이터베이스의 일종으로 자주 사용되는 키-값(key-value) 타입 인메모리 데이터베이스다. 액세스 토큰은 유효 기간이 끝나면 무효화되는 일시적인 데이터다. 따라서 RDBMS를 사용한 영구 저장은 하지 않는다. / 또한, 스케일 아웃(scale-out) 구조로 여러 대의 애플리케이션 가상 서버나 컨테이너가 실행되고 있는 상황이나, 수 분 전과는 다른 가상 서버가 실행될 가능성이 있는 클라우드 기반에서는 요청을 처리하는 API 서버가 액세스 토큰을 발행한 서버와 같다고 전제해서는 안 된다. 가상 서버나 컨테이너는 무상태(stateless)여야 하므로 일시적인 데이터라도 레디스 등을 사용해서 미들웨어에서 저장하고 공유할 필요가 있다. --- p.288 |
|
Go의 인기가 계속 고(Go)공행진하는 이유가 궁금하다면?
구글에서 개발한 오픈소스의 프로그래밍 언어인 Go는 간결하면서도 높은 신뢰성을 자랑한다. 웹 서비스 개발, 웹 앱 개발, 스마트폰 앱 개발, IoT 시스템 개발 등 효율적인 소프트웨어 개발에 특화된 언어이며, 표준 패키지만으로도 고성능 웹 애플리케이션을 개발할 수 있다. 이 책의 저자는 베테랑 고퍼로서 Go 언어의 장점을 십분 활용해 REST API 웹 애플리케이션에 개발에 필요한 필수 지식을 알려준다. 찾기 어려운 Go 언어의 필수 패키지 및 표준 패키지 사용법, 외부 오픈소스를 사용한 코딩 기법, 그리고 Go 언어를 접했을 때 겪을 수 있는 다양한 문제를 함께 고민하면서 코드를 간결하게 작성하는 방법을 소개한다. 총 20장으로 구성된 이 책은 크게 두 개의 파트로 나눌 수 있다. 전반부에서는 개발자를 위한 팁을 다룬다. Go 언어의 개념을 알아보고, context 패키지와 database/sql 패키지를 소개한다. public/private과 exported/unexported의 차이, Go 패키지 관리 툴인 Go Modules과 Go 언어에 반영된 객체지향 요소, 설계의 유연성을 높이고 보수 용이성을 향상시키기 위한 인터페이스 사용법은 물론 예외를 사용하지 않고 이상 사태를 다루는 방법, Go에서의 함수 사용법, 환경 변수 적용 방법, 미들웨어 패턴을 설명한다. 후반부에서는 본격적으로 Go 언어를 활용해 ToDo 웹 애플리케이션을 개발한다. 깃허브 저장소를 만든 후 HTTP 서버 코드를 작성하고 명령줄에서 간단하게 웹서버를 실행해본다. 이어서 HTTP 서버를 약한 결합 구성으로 변경하고, ToDo 웹 애플리케이션의 태스크와 관련된 엔드포인트와 RDBMS를 활용해 데이터베이스 처리를 구현한다. 기능별로 패키지를 분할하도록 HTTP 핸들러의 구조를 리팩터링한 후 마지막으로 인증 및 권한 기능을 새롭게 추가하면서 ToDo 웹 애플리케이션 서버 개발을 마무리한다. 특히 최소한의 코딩만 한 후 테스트나 추가 코드의 문제점은 무엇인지 찾아가면서 점진적으로 기능을 추가하는 후반부 구성을 통해 실무에 적용할 수 있는 API 서버 구축 방법을 배울 수 있을 것이다. Go 언어의 기초뿐만 아니라 실전에서 활용 가능한 최신 기술을 망라했으며, Go를 좀 더 Go답게 사용하는 방법을 알려주는 이 책을 통해 한 단계 성장하는 고퍼가 되자. 주요 내용 - Go 언어의 설계 이념 - 웹 애플리케이션 개발에 필요한 필수 패키지 및 표준 패키지 사용법 - 외부 오픈소스를 사용한 코딩 기법 - 도커 및 깃허브 액션을 활용한 개발 환경 설정 - 테스트 코드의 단계별 작성 - 실제 업무에 활용할 수 있는 API 서버 구축 방법 |