HOME > 상세정보

상세정보

Go 마스터하기 : 고급 기능을 활용한 실전 애플리케이션 만들기

Go 마스터하기 : 고급 기능을 활용한 실전 애플리케이션 만들기 (6회 대출)

자료유형
단행본
개인저자
Tsoukalos, Mihalis 남기혁, 역
서명 / 저자사항
Go 마스터하기 : 고급 기능을 활용한 실전 애플리케이션 만들기 / 미할리스 추칼로스 지음 ; 남기혁 옮김
발행사항
서울 :   에이콘,   2018  
형태사항
778 p. : 삽화 ; 24 cm
원표제
Mastering Go : create Golang production applications using network libraries, concurrency, and advanced Go data structures
ISBN
9791161752082 9788960772106 (Set)
일반주기
색인수록  
일반주제명
Go (Computer program language) Data structures (Computer science) Application software --Development
000 00000cam c2200205 c 4500
001 000045964285
005 20181210150428
007 ta
008 181210s2018 ulka 001c kor
020 ▼a 9791161752082 ▼g 94000
020 1 ▼a 9788960772106 (Set)
035 ▼a (KERIS)BIB000014956572
040 ▼a 243010 ▼c 243010 ▼d 243010 ▼d 211009
041 1 ▼a kor ▼h eng
082 0 4 ▼a 005.133 ▼2 23
085 ▼a 005.133 ▼2 DDCK
090 ▼a 005.133 ▼b G573 2018
100 1 ▼a Tsoukalos, Mihalis
245 1 0 ▼a Go 마스터하기 : ▼b 고급 기능을 활용한 실전 애플리케이션 만들기 / ▼d 미할리스 추칼로스 지음 ; ▼e 남기혁 옮김
246 1 9 ▼a Mastering Go : ▼b create Golang production applications using network libraries, concurrency, and advanced Go data structures
260 ▼a 서울 : ▼b 에이콘, ▼c 2018
300 ▼a 778 p. : ▼b 삽화 ; ▼c 24 cm
500 ▼a 색인수록
650 0 ▼a Go (Computer program language)
650 0 ▼a Data structures (Computer science)
650 0 ▼a Application software ▼x Development
700 1 ▼a 남기혁, ▼e
900 1 0 ▼a 추칼로스, 미할리스, ▼e
945 ▼a KLPA

No. 소장처 청구기호 등록번호 도서상태 반납예정일 예약 서비스
No. 1 소장처 과학도서관/Sci-Info(1층서고)/ 청구기호 005.133 G573 2018 등록번호 121246978 도서상태 대출가능 반납예정일 예약 서비스 B M
No. 2 소장처 세종학술정보원/과학기술실/ 청구기호 005.133 G573 2018 등록번호 151343921 도서상태 대출가능 반납예정일 예약 서비스
No. 소장처 청구기호 등록번호 도서상태 반납예정일 예약 서비스
No. 1 소장처 과학도서관/Sci-Info(1층서고)/ 청구기호 005.133 G573 2018 등록번호 121246978 도서상태 대출가능 반납예정일 예약 서비스 B M
No. 소장처 청구기호 등록번호 도서상태 반납예정일 예약 서비스
No. 1 소장처 세종학술정보원/과학기술실/ 청구기호 005.133 G573 2018 등록번호 151343921 도서상태 대출가능 반납예정일 예약 서비스

컨텐츠정보

책소개

Go 언어의 개론서로 Go 언어의 역사부터 동시성, 시스템 및 네트워크 프로그래밍, 최신 클라우드 개발에 이르기까지 방대한 주제를 깊이 있게 다루고 있다. Go 언어의 설계 철학과 코드 최적화에 도움되는 Go 언어의 내부 원리, 동시성 모델, 시스템 및 네트워킹 코드 작성법, 데이터 타입과 자료구조 활용법 등을 배울 수 있다.

★ 이 책에서 다루는 내용 ★

- Go 언어의 설계 철학
- Go 코드를 최적화하는 데 도움되는 Go 언어의 내부 원리
- Go 언어에서 제공하는 동시성 모델
- 시스템 및 네트워킹 코드 작성법
- 모든 환경에 적용할 수 있는 서버 코드
- Go 언어의 데이터 타입과 자료 구조의 개념과 활용법

★ 이 책의 대상 독자 ★

이 책은 초급 개발자부터 Go 언어에 대한 지식을 좀 더 넓히고 싶은 중급 Go 프로그래머를 대상으로 집필했다. 또한 다른 프로그래밍 언어에 대한 경험이 풍부한 개발자들이 for 루프 작성법과 같은 기초부터 볼 필요 없이 곧바로 Go 언어를 익힐 수 있도록 배려했다.
이 책에서 소개하는 내용 중 일부는 필자의 또 다른 저서인 『Go Systems Programming』(Packt, 2017)에서도 다루고 있다. 두 책의 가장 큰 차이점은 『Go Systems Programming』은 Go 언어의 기능을 활용해 시스템 도구를 개발하는 데 초점을 맞춘 반면, 『Go 마스터하기』는 보다 뛰어난 Go 프로그래머가 되는 데 필요한 Go 언어의 다양한 기능과 내부 작동 원리를 소개하는 데 주안점을 뒀다는 것이다. 두 책 모두 한두 번 읽은 뒤 계속해서 레퍼런스로 활용할 수 있다.

★ 이 책의 구성 ★

1장, 'Go 언어와 운영 체제'에서는 Go 언어의 역사와 장점부터 소개한다. 그런 다음, godoc 유틸리티에 대해 설명하며 Go 프로그램을 컴파일하고 실행하는 방법을 소개한다. 이어서 화면에 출력하는 방법과 사용자로부터 입력 받는 방법, 프로그램에서 커맨드라인 인수를 처리하는 방법, 로그 파일을 다루는 방법 등을 소개한다. 마지막으로 Go 언어에서 굉장히 중요한 역할을 하는 에러 핸들링 기법을 소개한다.
2장, 'Go 언어의 내부 구조'에서는 Go 언어의 가비지 컬렉터의 개념과 작동 원리를 소개한다. 그런 다음 unsafe 패키지와 Go 프로그램에서 C 코드를 호출하는 방법, C 프로그램에서 Go 코드를 호출하는 방법을 살펴본다. 이어서 defer 키워드를 사용하는 방법과 strace(1) 및 dtrace(1) 유틸리티 사용법을 소개한다. 이 장의 나머지 부분은 Go 환경에 대한 정보를 조회하는 방법과 Go 어셈블러를 사용하는 방법을 설명한다.
3장, 'Go 언어의 기본 데이터 타입'에서는 Go 언어에서 제공하는 다양한 데이터 타입을 소개한다. 이 과정에서 배열, 슬라이스, 맵뿐만 아니라 포인터, 상수, 루프, 날짜와 시간을 다루는 방법을 살펴본다. 이 장은 반드시 읽고 넘어가야 할 내용을 다루고 있다.
4장, '합성 타입 사용법'에서는 먼저 구조체의 개념과 struct 키워드에 대해 소개한 뒤 튜플, 스트링, 룬, 바이트 슬라이스, 스트링 리터럴 등을 살펴본다. 나머지 부분은 정규 표현식과 패턴 매칭, 스위치문, strings 패키지, math/big 패키지, 그리고 키-값 스토어를 구현하는 방법을 소개한다.
5장, '자료 구조로 Go 코드 개선하기'에서는 Go 언어에서 제공하는 구조체만으로 부족할 때 자료 구조를 직접 정의하는 방법을 소개한다. 이 과정에서 이진 트리, 연결 리스트, 해시테이블, 스택, 큐를 구현하는 방법과 각각의 장단점을 살펴본다. 또한 표준 Go 패키지인 container에서 제공하는 구조체의 사용법도 소개한다. 마지막으로 난수 생성 방법을 소개한다.
6장, 'Go 패키지에 대해 잘 알려지지 않은 사실'에서는 패키지와 함수, init() 함수 사용법, 표준 Go 패키지인 syscall, text/template, html/template에 대해 소개한다. 이 장에서 다루는 내용을 익히면 확실히 실력을 한 단계 높일 수 있다.
7장, '리플렉션과 인터페이스'에서는 Go 언어의 세 가지 고급 주제 리플렉션, 인터페이스, type 메소드에 대해 소개한다. Go 언어로 객체 지향 프로그래밍을 하는 방법도 소개한다.
8장, '유닉스 시스템 프로그래밍'에서는 Go 언어로 시스템 프로그래밍을 하는 방법을 소개한다. 이를 위해 flag 패키지로 커맨드라인 인수를 다루는 방법과, 유닉스 시그널을 다루는 방법, 파일 입출력, bytes 패키지, io.Reader 및 io.Writer 인터페이스를 소개한다. 앞에서도 언급한 바와 같이, Go 언어로 시스템 프로그래밍하는 방법에 대해 좀 더 깊이 알고 싶은 독자는 이 책을 읽은 뒤 『Go Systems Programming』도 읽어보길 강력 추천한다.
9장, 'Go 언어의 동시성 - Go 루틴, 채널, 파이프라인'에서는 Go 언어에서 동시성을 제공하기 위한 기능인 Go 루틴, 채널, 파이프라인에 대해 소개한다. 또한 프로세스, 스레드, Go 루틴의 차이점에 대해 설명하고, sync 패키지 사용법과 Go 스케줄러 작동 방식에 대해서도 소개한다.
10장, 'Go 언어의 동시성 - 고급 주제'에서는 이전 장에 이어 Go 루틴과 채널을 사용하는 방법에 대해 집중적으로 소개한다. Go 스케줄러에 대해서도 좀 더 깊이 있게 살펴보고 강력한 키워드인 select 사용법과 다양한 타입의 채널, 공유 메모리, 뮤텍스, sync.Mutex 타입, sync.RWMutex 타입 등도 소개한다. 이 장의 마지막에서는 context 패키지, 워커 풀, 경쟁 조건 감지 방법 등도 다룬다.
11장, '코드 테스팅, 최적화, 프로파일링'에서는 코드 테스팅, 코드 최적화, 코드 프로파일링, 크로스 컴파일, 문서화, 벤치마킹, 예제 함수 작성법, 도달하지 않는 코드 찾는 방법 등을 소개한다.
12장, 'Go 언어를 이용한 네트워크 프로그래밍의 기초'에서는 net/http 패키지를 사용하는 방법과 Go 언어에서 웹 서버 및 웹 클라이언트를 작성하는 방법을 소개한다. 또한 http.Response, http.Request, http.Transport 구조체와 http.NewServeMux 타입을 사용하는 방법도 살펴본다. 그리고 Go 언어로 웹사이트를 만드는 방법도 소개한다. 나아가 네트워크 인터페이스의 설정 사항을 읽고, DNS 조회하는 방법도 소개한다.
13장, '네트워크 프로그래밍 - 서버와 클라이언트 만들기'에서는 Go 언어로 UDP 및 TCP 클라이언트와 서버를 작성하는 방법과, net 패키지에서 제공하는 기능을 활용하는 방법을 소개한다. 그리고 RPC 클라이언트 및 서버 작성법, TCP 서버에서 동시성을 지원하도록 작성하는 방법, 원본 패킷 읽는 방법도 소개한다.


정보제공 : Aladin

저자소개

미할리스 추칼로스(지은이)

기술서 저자이자 유닉스 관리자, 프로그래머, DBA, 수학자로, 기술서적이나 칼럼 쓰기와 새로운 것 배우기를 좋아한다. 『Go Systems Programming』(Packt, 2017)과 『Go 마스터하기』(에이콘, 2018)의 저자로, 지금까지 , , , , , 을 비롯한 여러 저널에 250여 편을 기고했다. 주요 관심분야는 데이터베이스, 시각화, 통계, 머신러닝이다. http://www.mtsoukalos.eu/와 @mactsouk에서 직접 만나볼 수 있으며, 사진가로도 활동하고 있다.

남기혁(옮긴이)

고려대 컴퓨터학과에서 학부와 석사 과정을 마친 후 한국전자통신연구원에서 선임연구원으로 재직하고 있다. 한빛미디어에서 출간한 『Make: 센서』(2015), 『메이커 매뉴얼』(2016), 『이펙티브 디버깅』(2017), 『전문가를 위한 C++』(2019), 『리팩토링 2판』(2020)과 에이콘출판사에서 출간한 『현대 네트워크 기초 이론』(2016), 『도커 컨테이너』(2017), 『스마트 IoT 프로젝트』(2017), 『파이썬으로 배우는 인공지능』(2017), 『메이커를 위한 실전 모터 가이드』(2018), 『Go 마스터하기』(2018), 『자율주행 자동차 만들기』(2018), 『The Hundred-Page Machine Learning Book』(2019), 『스콧 애론슨의 양자 컴퓨팅 강의』(2021), 『자율주행차량 기술 입문』(2021) 등을 번역했다.

정보제공 : Aladin

목차

1장. Go 언어와 운영 체제 
__이 책의 구성 
__Go 언어의 역사 
__Go 언어를 배우는 이유 
__Go 언어의 장점. 
____그렇다면 Go 언어는 완벽한가?. 
____godoc 유틸리티. 
__Go 코드 컴파일하기 
__Go 코드 실행하기 
__Go 언어의 두 가지 규칙 
____사용하지 않을 Go 패키지는 임포트하지 말 것 
____중괄호 작성 스타일을 따를 것 
__Go 패키지 다운로드하기 
__유닉스 stdin, stdout, stderr 
__화면에 출력하기 
__표준 출력 사용하기 
__사용자로부터 입력 받기 
__:=와 = 
____표준 입력으로부터 읽기 
____커맨드라인 인수 다루기 
__에러 출력 
__로그 파일 작성하기 
____로그 수준 
____로그 기능 
____로그 서버 
____로그 파일로 정보를 보내는 Go 프로그램 
____log.Fate( ) 
____log.Panic( ) 
__Go 언어에서 에러 처리하기 
____error 데이터 타입 
____에러 처리하기 
__참고 자료 
__연습 문제 
__요약 

2장. Go 언어의 내부 살펴보기 
__Go 컴파일러 
__가비지 컬렉션 
____삼색 알고리즘 
____Go 언어 가비지 컬렉터의 구체적인 작동 방식 
____언세이프 코드 
____unsafe 패키지 
____unsafe 패키지에 대한 또 다른 예제 
__Go에서 C 코드 호출하기 
____같은 파일에 작성한 C 코드 호출하기 
____다른 파일에 작성한 C 코드 호출하기 
____C 코드 
____Go 코드 
____Go 코드와 C 코드 합치기 
__C 코드에서 Go 함수 호출하기 
____Go 패키지 
____C 코드 
__defer 키워드 
__panic 함수와 recover 함수 
____panic 함수만 사용하기 
__두 가지 유용한 유닉스 유틸리티 
____strace 
____dtrace 
__Go 환경 파악하기 
__Go 어셈블러 
__노드 트리 
__go build에 대해 좀 더 자세히 살펴보기 
__Go 코딩에 참고할 만한 조언 
__참고 자료 
__연습 문제 
__요약 

3장. Go 언어의 기본 데이터 타입 
__Go 언어의 루프 
____for 루프 
____while 루프 
____range 키워드 
____Go 언어의 for 루프 예 
__Go 언어의 배열 
____다차원 배열 
____Go 언어에서 제공하는 배열의 단점 
____Go 언어의 슬라이스 
____슬라이스에 대한 기본 연산 
____슬라이스는 자동으로 확장된다 
____바이트 슬라이스 
____copy( ) 함수 
____다차원 슬라이스 
____슬라이스에 대한 다른 예제 
____sort.Slice()로 슬라이스 정렬하기 
__Go 언어의 맵 
____nil 맵에 저장하기 
____맵은 언제 사용해야 할까? 
__Go 언어의 상수 
____상수 생성자 iota 
__Go 언어의 포인터 
__날짜와 시간 다루기 
____시간 다루기 
____시간 파싱하기 
____날짜 다루기 
____날짜 파싱하기 
____날짜와 시간 포맷 변경하기 
__참고 자료 
__연습 문제 
__요약 

4장. 합성 타입 사용법 
__합성 타입 
__구조체 
____구조체에 대한 포인터 
____new 키워드 사용법 
__튜플 
__정규 표현식과 패턴 매칭 
____정규 표현식에 관련된 몇 가지 이론 
____간단한 예제 
____심화 예제 
____IPv4 주소 매칭하기 
__스트링 
____룬이란? 
____unicode 패키지 
____strings 패키지 
__switch문 
__파이값 상당히 정확히 계산하기 
__Go 언어로 키/값 스토어 만들기 
__참고 자료 
__연습 문제 
__요약 

5장. 자료 구조로 Go 코드 개선하기 
__그래프와 노드 
__알고리즘 복잡도 
__Go 언어에서 이진 트리 만들기 
____Go 언어로 이진 트리 구현하기 
____이진 트리의 장점 
__Go 언어에서 해시 테이블 만들기 
____Go 언어로 해시 테이블 구현하기 
____검색(lookup) 기능 구현하기 
____해시 테이블의 장점 
__Go 언어에서 연결 리스트 만들기 
____Go 언어에서 연결 리스트 구현하기 
____연결 리스트의 장점 
__Go 언어에서 이중 연결 리스트 만들기 
____Go 언어에서 이중 연결 리스트 구현하기 
____이중 연결 리스트의 장점 
__Go 언어에서 큐 만들기 
____Go 언어에서 큐 구현하기 
__Go 언어에서 스택 만들기 
____Go 언어로 스택 구현하기 
__container 패키지 
____container/heap 사용법 
____container/list 사용법 
____container/ring 사용법 
__난수 생성하기 
____랜덤 스트링 생성하기 
__참고 자료 
__연습 문제 
__요약 

6장. Go 패키지에 대해 잘 알려지지 않은 사실 
__Go 패키지 
__Go 언어의 함수 
____익명 함수 
____여러 값을 리턴하는 함수 
____함수의 리턴값에도 이름도 붙일 수 있다! 
____포인터를 매개변수로 받는 함수 
____포인터를 리턴하는 함수 
____함수를 리턴하는 함수 
____함수를 매개변수로 받는 함수 
__Go 패키지 직접 만들기 
____Go 패키지 컴파일하기 
____사설 변수와 함수 
____init() 함수 
__표준 Go 패키지에 대한 코드 읽기 
____net/url 패키지의 소스 코드 살펴보기 
____log/syslog 패키지의 소스 코드 살펴보기 
__Go 패키지 잘 만드는 방법 
__syscall 패키지 
____fmt.Println()의 구체적인 실행 과정 
__텍스트와 HTML 템플릿 
____텍스트 출력 생성하기 
____HTML 출력하기 
____기본적인 SQLite3 커맨드 
__참고 자료 
__연습 문제 
__요약 

7장. 리플렉션과 인터페이스 
__타입 메소드 
__Go 언어의 인터페이스 
__타입 어써션 
__인터페이스 직접 정의하기 
____Go 인터페이스 사용하기 
____인터페이스와 데이터 타입에 대한 switch문 작성법 
__리플렉션 
____리플렉션에 대한 간단한 예제 
____리플렉션에 대한 좀 더 심화된 예제 
____리플렉션의 세 가지 단점 
__Go 언어에서 OOP하기 
__참고 자료 
__연습 문제 
__요약 

8장. 유닉스 시스템에게 작업 지시하기 
__유닉스 프로세스 
__flag 패키지 
__io.Reader와 io.Writer 인터페이스 
____버퍼를 이용하는 파일 입출력과 버퍼를 이용하지 않는 파일 입출력 
__bufio 패키지 
__텍스트 파일 읽기 
____텍스트 파일을 한 줄씩 읽기 
____텍스트 파일을 한 단어씩 읽기 
____텍스트 파일을 한 문자씩 읽기 
____/dev/random 읽기 
__파일에서 읽고 싶은 만큼 읽기 
__바이너리 포맷을 사용하는 이유 
__CSV 파일 읽기 
__파일 쓰기 
__디스크에 데이터를 읽거나 쓰기 
__strings 패키지 다시 보기 
__bytes 패키지 
__파일 접근 권한 
__유닉스 시그널 다루기 
____두 가지 시그널 처리하기 
____모든 종류의 시그널 처리하기 
__Go 언어로 유닉스 파이프 다루기 
____Go 언어로 cat(1) 유틸리티 구현하기 
__디렉토리 트리 탐색하기 
__Go 언어에서 eBPF 사용하기 
__syscall.PtraceRegs 
__시스템 콜 추적하기 
__유저 ID와 그룹 ID 
__참고 자료 
__연습 문제 
__요약 

9장. Go 언어의 동시성 - 고루틴, 채널, 파이프라인 
__프로세스, 쓰레드, 고루틴 
____Go 스케줄러 
____동시성과 병렬성 
__Go 루틴 
____Go 루틴 생성 방법 
____Go 루틴 여러 개 생성하기 
__Go 루틴이 마칠 때까지 기다리기 
____Add()와 Done()의 호출 횟수가 일치하지 않으면 어떻게 될까? 
__채널 
____채널에 데이터 쓰기 
____채널에서 데이터 읽기 
____함수 매개변수로 지정한 채널 
__파이프라인 
__참고 자료 
__연습 문제 
__요약 

10장. Go 언어의 동시성 - 고급 주제 
__Go 스케줄러 다시 보기 
____GOMAXPROCS 환경 변수 
__select 키워드 
__Go 루틴 만료시키기 
____Go 루틴을 만료시키기 위한 첫 번째 기법 
____Go 루틴을 만료시키기 위한 두 번째 방법 
__Go 채널 다시 보기 
____시그널 채널 
____버퍼 채널 
____닐 채널 
____채널에 대한 채널 
____Go 루틴의 실행 순서 지정하기 
__공유 메모리와 공유 변수 
____sync.Mutex 
____sync.RWMutex 타입 
____Go 루틴으로 메모리 공유하기 
__경쟁 조건 발견하기 
__context 패키지 
____context 패키지를 이용한 좀 더 복잡한 예제 
____워커 풀 
__참고 자료 
__연습 문제 
__요약 

11장. 코드 테스팅, 최적화, 프로파일링 
__11장에서 사용하는 Go 버전 
____Go 버전 1.9와 1.10 비교 
__베타 또는 RC 버전의 Go 설치하기 
__최적화 
____Go 코드 최적화하기 
__Go 코드 프로파일링 
____표준 Go 패키지 net/http/pprof 
____간단한 프로파일링 예제 
____좀 더 편리한 외부 패키지로 프로파일하기 
____Go 프로파일러의 웹 인터페이스 
__go tool trace 유틸리티 
__Go 코드 테스트하기 
____기존 코드에 대한 테스트 코드 작성하기 
__Go 코드 벤치마킹하기 
__간단한 벤치마킹 예제 
____잘못 작성한 벤치마크 함수의 예 
__쓰기 버퍼 벤치마킹하기 
__실행되지 않는 코드 찾기 
__크로스 컴파일 
__예제 함수 만들기 
__문서 생성하기 
__참고 자료 
__연습 문제 
__요약 

12장. Go 언어를 이용한 네트워크 프로그래밍의 기초 
__net/http, net, http.RoundTripper 
____http.Response 타입 
____http.Request 타입 
____http.Transport 타입 
__TCP/IP에 대해 
__IPv4와 IPv6에 대해 
__nc(1) 커맨드라인 유틸리티 
__네트워크 인터페이스로부터 설정 읽기 
__DNS 룩업 
____도메인의 NS 레코드 조회하기 
____도메인에 대한 MX 레코드 조회하기 
__Go 언어로 웹 서버 만들기 
____HTTP 서버 프로파일링하기 
____Go 언어로 웹사이트 만들기 
__HTTP 트레이싱 
____HTTP 핸들러 테스트하기 
__Go 언어로 웹 클라이언트 생성하기 
____좀 더 기능이 풍부한 웹 클라이언트 만들기 
__HTTP 연결 타임아웃하기 
____SetDeadline 세부사항 
__타임아웃 주기를 서버쪽에 설정하기 
__또 다른 타임아웃 기법 
__와이어샤크와 티샤크 
__참고 자료 
__연습 문제 
__요약 

13장. 네트워크 프로그래밍 - 서버와 클라이언트 만들기 
__표준 Go 패키지 net 
__TCP 클라이언트 
____TCP 클라이언트를 약간 변형한 버전 
__TCP 서버 
____TCP 서버를 약간 변형한 버전 
__UDP 클라이언트 
__UDP 서버 구현하기 
__동시성을 지원하는 TCP 서버 
____동시성을 지원하는 TCP 서버의 또 다른 버전 
__원격 프로시저 호출 
____RPC 클라이언트 
____RPC 서버 
__로우레벨 네트워크 프로그래밍 
____원본 상태의 ICMP 패킷 수집하기 
__그 이상이 알고 싶다면? 
__참고 자료 
__연습 문제 
__요약 

__찾아보기

관련분야 신착자료