메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

러닝 Go

Go 개발자처럼 생각하는 방법

한빛미디어

번역서

판매중

  • 저자 : 존 보드너
  • 번역 : 윤대석
  • 출간 : 2022-02-25
  • 페이지 : 452 쪽
  • ISBN : 9791162245309
  • 물류코드 :10530
  • 초급 초중급 중급 중고급 고급
4.8점 (36명)
좋아요 : 1

뚝딱거리지 않고 원래 Go 언어 개발자였던 것처럼 자연스럽게 코드 작성하기 

 

Go 언어는 웹 서비스 개발자가 선호하는 언어로 빠르게 자리 잡고 있다. 다른 프로그래밍 언어로 개발한 경험이 있는 개발자들에게 Go 언어의 문법을 알려주는 튜토리얼은 많지만, 그것만으로는 부족하다. 이 책은 Go 언어를 이용해 명확하고 관용적으로 개발할 수 있도록 기초 지식을 전달하는 실용적인 가이드다. 개발 숙련도와는 상관없이 누구나 Go 언어 개발자처럼 생각할 수 있다. 더 나아가 경험이 풍부한 Go 개발자들이 채용한 디자인 패턴과 선택한 이유를 소개한다. 웹 서비스 관련 프로젝트에서 많이 활용되는 만큼, 견고한 웹 서비스를 제공하고 확장이 쉬운 코드로 개발하고 싶다면 Go 언어로 시작해보자.

 

 

존 보드너 저자

존 보드너

20년 이상의 경력을 가진 소프트웨어 엔지니어이자 리드 개발자이며 아키텍트를 담당하고 있다. 교육, 금융, 무역, 의료, 법, 정부, 인터넷 인프라 등 다양한 분야에서 소프트웨어 개발을 해왔다. 캐피탈 원(Capital One)에서 유명 엔지니어로서 개발 및 테스트 워크플로에 기여했으며 웹 결제 페이지 감지 및 작성을 위한 특허 기술을 개발했다. 소프트웨어 개발 이슈를 찾고 관리하기 위한 도구의 공동 저자이기도 하다.

Go 컨퍼런스에서 자주 발표하며, Go 및 소프트웨어 엔지니어링에 대한 블로그 게시물은 30만 뷰를 돌파했다. Go 전용 데이터 접근 라이브러리 프로테우스의 제작자이고, LGTM 프로젝트의 포크인 checks-out 도구의 공동 개발자이다.

윤대석 역자

윤대석

12년간 임베디드 리눅스 커널 개발, 윈도우 애플리케이션 개발, 리얼타임 운영체제에서의 BSP 개발, 백엔드 개발 등 다양한 개발 경험이 있으며 항상 기본에 충실하고자 노력하는 엔지니어다. 알고리즘과 운영체제를 꾸준히 공부하고 있으며, 오픈 소스 리눅스 커널 분석 및 수정 활동에 참여하고 있다. 한빛미디어에서 『쓰면서 익히는 알고리즘과 자료구조』(2021)를 집필하고 『러닝 Go』(2022)를 번역했다.

 

CHAPTER 1 GO 개발 환경 설정

1.1 GO 도구 설치

1.2 GO 작업 공간

1.3 GO 명령어

1.4 린팅 그리고 베팅

1.5 개발 도구 소개

1.6 Makefiles

1.7 항상 최신으로 유지

1.8 마무리

 

CHAPTER 2 기본 데이터 타입과 선언

2.1 내장 타입

2.2 var Versus :=

2.3 CONST 사용

2.4 타입 지정 상수와 타입 미지정 상수

2.5 사용하지 않는 변수

2.6 변수와 상수 이름 짓기

2.6 마무리


CHAPTER 3 복합 타입

3.1 배열

3.2 슬라이스

3.3 문자열과 룬 그리고 바이트

3.4 맵

3.5 구조체

3.6 마무리

 

CHAPTER 4 블록, 섀도, 제어 구조

4.1 블록

4.2 if 문

4.3 for 문

4.4 switch 문

4.5 공백 switch 문

4.6 if 문과 switch 문 중 선택

4.7 goto 문

4.8 마무리

 

CHAPTER 5 함수

5.1 함수 선언과 호출

5.2 함수는 값이다

5.3 클로저

5.4 defer

5.5 값에 의한 호출을 사용하는 Go

5.6 마무리


CHAPTER 6 포인터

6.1 빠른 포인터 입문

6.2 포인터를 두려워 말라

6.3 포인터는 변경 가능한 파라미터를 가리킨다

6.4 포인터는 최후의 수단

6.5 포인터로 성능 개선

6.6 제로 값과 값없음의 차이

6.7 맵과 슬라이스의 차이

6.8 버퍼 슬라이스

6.9 가비지 컬렉션 작업량 줄이기

6.10 마무리


CHAPTER 7 타입, 메서드, 인터페이스

7.1 Go의 타입

7.2 메서드

7.3 구성을 위한 임베딩 사용

7.4 임베딩은 상속이 아니다

7.5 인터페이스에 대한 간단한 지도

7.6 인터페이스는 타입에 안정적인 덕 타이핑이다

7.7 임베딩과 인터페이스

7.8 인터페이스를 받고 구조체 반환하기

7.9 인터페이스와 nil

7.10 빈 인터페이스는 어떤 것도 표현하지 않는다

7.11 타입 단언 및 타입 스위치

7.12 타입 단언과 타입 스위치를 아껴 사용하기

7.13 함수 타입은 인터페이스로의 연결

7.14 의존성 주입을 쉽게 만드는 암묵적 인터페이스

7.15 Wire

7.16 GoO는 특히 객체지향이 아니다

7.17 마무리

 

CHAPTER 8 오류

8.1 오류 처리 방법: 기초

8.2 단순 오류에 문자열 사용

8.3 센티넬 오류

8.4 오류는 값이다

8.5 오류 래핑

8.6 Is와 As

8.7 defer로 오류 래핑

8.8 패닉과 복구

8.9 오류에서 스택 트레이스 얻기

8.10 마무리

 

CHAPTER 9 모듈, 패키지 그리고 임포트

9.1 저장소, 모듈 그리고 패키지

9.2 go.mod

9.3 패키지 빌드

9.4 모듈 관련 작업

9.5 모듈 게시

9.6 모듈 버전 관리

9.7 모듈을 위한 프록시 서버

9.8 마무리

 

CHAPTER 10 GO의 동시성

10.1 동시성 사용 시점

10.2 고루틴

10.3 채널

10.4 select 문

10.5 동시성 사례와 패턴

10.6 채널 대신에 뮤텍스를 사용해야 하는 경우

10.7 원자적 연산

10.8 마무리

 

CHAPTER 11 표준 라이브러리

11.1 입출력 관련 기능

11.2 시간

11.3 encoding/json

11.4 net/http

11.5 마무리

 

CHAPTER 12 컨텍스트

12.1 컨텍스트 소개

12.2 취소

12.3 타이머

12.4 코드에서 컨텍스트 취소 처리

12.5 값

12.6 마무리

 

CHAPTER 13 테스트 작성

13.1 테스팅의 기초

13.2 테이블 테스트

13.3 코드 커버리지 확인

13.4 벤치마크

13.5 Go의 스텁

13.6 httptest

13.7 통합 테스트 및 빌드 태그

13.8 레이스 검출기로 동시성 문제 찾기

13.9 마무리

 

CHAPTER 14 Reflect, Unsafe, Cgo

14.1 리플렉션은 런타임에 동적으로 타입 제어

14.2 불안전한 Unsafe

14.3 성능이 아닌 통합을 위한 Cgo

14.4 마무리

 

CHAPTER 15 Go의 제네릭

15.1 반복 코드를 줄이고 타입 안전 증가

15.2 Go의 제네릭

15.3 타입 목록을 사용하여 연산자 지정

15.4 제네릭 함수는 알고리즘을 추상화한다

15.5 타입 목록은 상수와 구현을 제한한다

15.6 소외된 것

15.7 관용적 Go와 제네릭

15.8 이후 해제될 것들

15.9 마무리

뭐라Go? 아직도 모른다Go? 알려준다Go! 가 보자Go!

 

이 책은 Go 언어의 기초부터 깊이 있는 내용까지 폭넓게 다루고 있다. 기본적인 개발 경험이 있으면서 Go 언어를 새롭게 배우고 싶다면 바로 이 책을 펼칠 타이밍이다. 저자의 다양한 경험을 통해 다른 언어와 차이점을 명확히 구분하고, Go 언어만의 매력을 느낄 수 있도록 구성되어 있다. 또한 실행할 수 있는 예제를 통해 Go 언어에 있는 다양한 특성을 이해시키고 확장 가능한 코드를 작성하는 좋은 방법을 제시한다.

대상 독자

이 책은 Go를 새롭게 시작하는 사람들에게 초점이 맞춰져 있다. Go 언어의 마스코트가 귀엽다는 것만 알고 있는 사람부터 이미 Go 튜토리얼을 수행했거나 Go로 코드를 어느 정도 개발해본 사람까지도 볼 수 있다. 단순하게 프로그램 작성법을 알려주는 것이 아니라 관용적인 방식으로 Go 코드를 작성하는 방법을 알려준다. 경험이 좀 더 많은 Go 언어 개발자라면 새롭게 추가된 기능들을 가장 잘 사용하는 방법에 대한 조언을 얻을 수 있다.

 

 

주요 내용 

  • 관용적 코드 사용법과 프로젝트 설계 배우기
  • Go 언어의 효율적인 작동 원리 알아보기
  • 사용자를 위한 개발 환경 구축하기
  • 고급 레벨 사용자를 위한 reflect, unsafe, cgo 기능 이해하기
  • Go 언어의 새로운 기능인 제네릭 살펴보기

 

추천사

 

이미 다른 언어에서 통용되는 개념을 Go 언어에 다시 적용하지 않고도 꼭 알아야 할 사항에 대한 좋은 개요를 제공하면서 제대로 된 학습 균형을 유지하도록 한다. 

스티브 프란시아, 구글 Go 언어 프로덕트 리더

 

개성 넘치고 숙련된 프로그래머조차도 Go를 사용하려면 기존 방식을 모두 잊고 색다르게 생각해야 한다. 이 책을 읽으면 관용적 코드, 코딩 함정 그리고 디자인 패턴을 터득하는 동시에 언어의 큰 특징도 잘 알게 된다. 

Go.
몇년 전 처음 Go를 봤을 때 무척 세련됐다는 느낌을 받았습니다.
기존 언어의 장점만을 모아서 만들었다는 생각이 들었죠.
하지만 워낙 초창기 버전이라 안정적이지도 않았고, 부족한 부분도 있어 아쉬웠습니다.
구글에서 만들어서인지 점점 단단해지고 안정화되고 있음을 체감할 수 있습니다.

요즘 개발자들 사이에서 가장 핫한 언어가 Go라고 하네요.
아직 대중화된 언어라고 보기는 어렵지만, 조만간 그리 되지 않을까 생각합니다.

 

go.jpg

 

이 책은 Go(혼란을 막기 위해 golang라고도 합니다.)에 대한 멋진 가이드입니다.
Go에 대한 레퍼런스와 가이드는 많이 있습니다.
하지만 사용법만을 보여줄 뿐 그 속에 담겨있는 의미있는 내용까지 소개하지는 않습니다.
이 책은 Go언어를 처음 접하는 분들도 쉽게 이해할 수 있도록 단계별로 설명하고 있습니다.

저자의 소개처럼 이 책은 이미 하나 이상의 개발언어에 익숙한 분들에게 더욱 좋습니다.
개발에 대한 지식이 있는 분들이라면 쉽게 Go언어를 배울 수 있습니다.
앞서 얘기했듯이 기존의 언어와 유사한 부분이 많기에 그렇습니다.

Go 설치부터 문법, 테스트까지 전반적이 내용을 모두 설명하고 있습니다.
Go에도 포인터가 사용됩니다.
C, 자바 언어에 익숙한 분들에게는 부담이 없지만, 개발 언어를 처음 접하는 분들은 포인터에서 많이 좌절하죠.

 

pointer.jpg

 

특히, Go언어의 특징이라 할 수 있는 '동시성'에 대해서도 잘 설명되어 있습니다.
그걸 잘 구현하고 있는 것이 고루틴입니다.

same.jpg goroutine.jpg

이 책을 보면서 가장 놀라운 것이 바로 얼마전 Go에서 도입한 '제네릭'입니다.
곧 적용될 것이라 뉴스는 봤지만 이렇게 책에서 만나볼 줄을 몰랐습니다.
정말 핫하디 핫한 주제까지 다루고 있어 너무 좋네요.

 

generic.jpg

 

티오베와 같은 프로그램밍 언어 순위를 보면 Go의 약진이 더욱 두드러집니다.
두번째 프로그래밍 언어를 공부하고 싶다면 Go를 추천드리고 싶네요.
간단한 문법, 빠른 속도와 생산성 등 이전과 다른 경험을 할 수 있을 거에요.

[한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.]

 

몇년 전부터 Go 언어를 다루는 개발자가 고연봉을 받는다는 이야기를 심심치 않게 들을 수 있었다. 과거와 비교하여 국내에도 Go 개발자를 뽑는다는 공고가 자주 눈에 띄는 것도 사실이다.

나는 Go 언어를 잘 모른다. 시스템 프로그램이나 서버용 프로그램 개발에 주로 활용된다고 하니, 사실 프론트엔드 개발자인 본인과는 거리가 느껴지는 언어이기도 하다. 궁금한 마음에 살짝 이 도서를 들여다보기로 했다.

 

Chaper 1에서는 Go 언어에 대해 잘 모르는 나 같은 문외한을 위한 개발 환경 설정을, Chapter 2 ~ 5에서는 데이터 타입과 변수, 상수 선언 등의 기본적인 문법을 다루면서 프로그램 작성을 위한 if, for, switch 등의 기본적인 제어 문법과 함수에 대해 설명한다.

 

Chapter 6에서는 포인터와 가비지 컬렉터에 대해 이야기하는데 개인적으로는 이 부분이 읽어볼만하게 느껴졌다. 이후 타입, 메소드, 인터페이스, 오류, 모듈, 패키지 임포트 등의 Go 언어 프로그래밍을 하기 위해 익혀야 할 핵심이자 기본적인 내용들을 다루고 있다.

 

'동시성'에 대해 Chapter 10에서 언급하고 있는데 동시성과 병렬성에 대한 이야기, 고루틴과 채널에 대한 자세한 내용이 등장한다. 이러한 개념은 본인이 주로 다루고 있던 자바스크립트 엔진에서도 등장하기에 제대로 읽어볼 필요가 있다고 생각되었다.

 

이제까지 다른 Go 언어 관련 도서를 읽어본 적은 없지만, 이 책을 훑어보면서 본격적으로 Go 언어를 습득하기 위해서는 분명히 읽어볼만한 가치가 있는 도서라는 생각이 들었다. 'ㅅ')!

 

.

 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."



■ 관용성, 확장성 있는 웹 서비스를 만들기 위한 Go 언어의 친절한 안내서

 

본 책은 웹 서비스 개발 분야에서 도입이 늘어나고 있고 구글이 개발한 프로그래밍 언어인 Go 학습을 위한 책이다. Go는 2010년 대에 태어난 비교적 최근에 개발된 프로그래밍 언어이다. 요즘 엄청난 인기와 함께 웹 개발, 통계, 머신러닝, 수학 계산 등 다방면에서 사용되는 파이썬 조차 태어난지 30년이나 되는 젊지 않은(?) 언어인 것을 보면 Go가 얼마나 최근의 기술 변화와 요구사항을 반영하여 빠른 속도로 발전해왔는가를 알 수 있다(최신 멀티코어 아키텍처를 제대로 활용할 수 있도록 고안되었다고 한다.).

 

 

이 책의 대상 독자는 다소 넓은 편이다. 그렇다고 해서 결코 내용의 수준을 만만하게도 볼 수 없다. Go에 입문하는 사람에게는 Go 프로그래밍을 위한 탄탄한 기초를, Go를 잘 알고 익숙한 개발자에게는 기존과 다른 방식이 있다는 것과 세부적으로 알아두면 좋을 것들을 알려준다. 그렇기 때문에 Go 언어에 관심이 있는 사람에게는 도전해도 좋을 만한 책이라고 생각한다. 저자에 의하면 2번째 언어를 찾고 있는 사람에게도 도움이 될 것이라고 한다.

 

 

내가 이 책을 Go 언어를 공부하기에 적합하다고 생각하는 이유는 다른 고전 프로그래밍 언어를 위한 책들만큼이나 두껍지는 않으면서 Go 개발자가 개발하는 방식으로 Go를 배울 수 있도록 구성되었기 때문이다. 그래서 표지 부제에 표기된 것과 같이 'Go 개발자처럼 생각하는 방법'으로 프로그래밍 할 수 있도록 도와준다.

 

 

평소 업무상 스크립트 언어를 주로 사용하는 본인으로서는 처음에 이책을 가지고 실습을 시작했는데 보통의 스크립트 언어와 매우 다른 방식으로 문법이 쓰여져있어서 진도를 빨리 뺄 수는 없었다. 어떤 부분에서는 마치 암호문을 보는 것 같은 느낌이었다. 또, 패턴 매칭이 없다는 사실도 매우 놀랐다. 어쨌든 하나씩 천천히 따라하다보니 나의 주 언어와 다른 방식으로 동작하는 것이 신기하고 호기심이 생겨서 점점 Go에 대한 매력을 느끼게 되었다.

 

 

이 책의 독특한 특징은 일반적인 프로그래밍 안내서와 유사한 방식으로 목차는 구성되어 있는데 각 장별 Go에 대한 설명을 전개하는 방식이 매우 달랐다. 다른 입문서에서는 문법을 위주로 각 키워드별로 예제 코드가 담겨있는데 이 책은 프로그래밍의 동작방식을 설명하면서 정형적이지는 않은 방식으로, 즉 짤막짤막한 예제와 왜 이렇게 해야하는지, Go가 다른 프로그래밍에서와 다른 점은 무엇인지, 어떤 방식으로 써야 가장 효율적인지를 알 수 있도록 알게 해주는 방향으로 전개가 된다. 그래서 다른 책들은 중간 중간에 사례를 곁들여 예제 코드를 페이지 단위로 할애하거나, 짧은 예제가 단계적으로 부분부분마다 더해져 마지막에 코드가 완성되는 방식으로 설명하는 곳들이 많은데 여기서는 그렇지 않다. 짧은 호흡으로 설명 흐름을 가져가고 구체적 사례라기 보다는 단락 정도로 코드가 등장하여 어떤 식으로 동작하고 왜 그럴 수 밖에 없는지를 이해시키는 데에 주안점을 둔 듯하다.

 

 

그렇기 때문에 공부해나가는 과정이 다소 지루해보일 수도 있다. 현재 Go에서 네트워크 구현을 주제로 한 학습서가 시중에 나와 있는데 바로 그러한 구체적인 사례나 분야로 들어가기 전에 Go의 이해도를 높이고자 한 것으로 느꼈다. 그래서 원 저자가 이 책의 이름을 원래 'Boring Go(지루한 Go)'라고 지으려 했다는데 그 말이 이해가 되었다.

 

 

유용했던 부분을 꼽자면 '포인터', '동시성', '테스트 방법'을 다룬 챕터들이 있겠다. 공포의 포인터와 동시성은 꼭 넘어야 할 산이라고 느껴졌다. Go의 동시성 부분을 설명하는 곳에서는 아주 오래전에 '운영체제'를 공부했던 것이 많은 도움이 되었다. 동시성을 제어하여 Deadlock을 막고 빠른 시간 내에 효율적으로 프로그래밍 하는 방법을 설명했는데 여기서 '고루틴', '채널', 'select문(SQL과 관련 없음)' 등의 개념을 새로이 알게 되었다. '동시성'은 '병렬성'이지 않다는 것과 동시성이 항상 빠른 것은 아니고 빠름에 대한 판단은 벤치마킹을 통해서 해야된다라는 구절들이 가장 인상적이었다. 그리고 근래에 들어 TDD, 테스트 주도의 방법론이 강조되고 있는데 테스트를 위해 Go의 고유 테스팅 프레임워크를 소개하여 설명한 점 또한 좋았다.

 



KakaoTalk_20220331_232901172.jpgGo 언어를 접하는 이들을 위해 문법부터 설명을 하지만, 

그렇다고해서 초심자가 해당 책을 바로 읽기를 추천하지는 않습니다.

저는 이 책이 기본부터 잘 알려주고있어 이미 다른언어를 해 본 개발자들이 

본인이 쓰는 개발 언어와 어떤 차이점이 있고, 

어떻게 이 언어를 활용하면 좋을지 생각하며 접하시기를 추천드립니다.

[장점]

- 동시성 부분 및 제네릭 관련된부분등을 원론적인 부분 및 예시가 자세히 나와서 다른언어를 이미 접해본 독자로서는 타 언어와 비교하면서 읽기 좋았음.

- 예제가 충분히 깃허브에서 관리되고있음.

[단점]

- 입문도서이지만, 현업에서 해당도서를 아직 많이 사용하고있지는 않습니다.

그러므로 해당 도서는 주니어 이상 개발자에게 추천합니다.

 

본 리뷰는 한빛미디어에서 제공된 책으로 작성되었습니다.

 

 

1.jpg현 시대는 전통 산업을 포함한 전 산업군의 기업이 디지털 트랜스포메이션을 이야기 할만큼 변하는 트렌드속에 모바일, IoT, 블록체인, 인공지능 등 다양한 기술을 활용한 새로운 혁신을 꿈꾸고 있습니다. 그에 따라 여러 프로그래밍 언어를 이용한 프로그래밍이 등장하고 있는데 그중에서도 Go언어는 구글에서 내놓은 모바일 플랫폼 개발언어로써 구글의 누적된 노하우를 통해 조금 더 효율적이면서 안정적으로 운영할 수 있어 기존 모바일 제조사들이 오랫동안 유지해온 플랫폼을 버리고 선택하는 모바일 플랫폼으로 부상하고 있으며 도커나 쿠버네티스와 같은 대형 프로젝트에서도 사용되고 있습니다.

 

Go언어는 비교적 최근에 개발되었고 오랫동안 유지 개발되어온 다른 인기 있는 프로그래밍 언어들과는 다르게 최신 멀티코어 아키텍쳐를 제대로 활용할 수 있도록 고안되었습니다. 특히 고루틴과 채널을 통해 작업을 동시성과 병렬성을 쉽게 구현해낼 수 있도록 한 부분에서 다른 언어들과 차이를 보입니다. 이런 장점으로 시스템 프로그래밍이나 서버용 프로그램 개발에 많이 활용되고 있습니다. Go언어는 최신의 다른 프로그래밍 언어들과는 다른 작은 기능 세트가 있습니다. Go언어에는 상속, 제네릭, 관점 지향 프로그래밍, 함수 오버로딩 그리고 연산자 오버로딩이 없습니다. 또한 패턴 매칭, 명명된 파라미터, 예외처리도 없지만 포인터는 있습니다. 이처럼 Go언어는 다른 언어에 비해 배우기 쉽고 프로젝트가 커지더라도 간결함을 유지하여 확장도 쉬운 언어이면서 다양한 강력한 기능을 제공하고 유지 보수에도 많은 이점을 가지고 있습니다.

 

제가 이 책을 선택한 이유는 저자의 많은 경험을 바탕으로 Go언어를 설명하여 Go언어의 기초를 탄탄하게 학습하게 해주고 다른 언어들과의 차이점을 명확히 구분해주어 Go 언어만의 매력을 느낄 수 있도록 내용을 구성하였기 때문입니다.또한 실행 가능한 예제를 통해 Go언어가 가지는 다양한 특성을 이해시키고 확장 가능한 관용적인 코드를 작성하는 좋은 방법을 제시하고 있습니다.

 

이 책의 특성은 Go언어를 새롭게 시작하는 사람들에게 초점이 맞춰져 있어 Go언어에 관해 아무것도 모르는 사람부터 Go 튜토리얼을 수행하거나 Go로 코드를 어느정도 개발해본 사람까지도 볼 수 있습니다. 또한 단순하게 프로그램 작성법을 알려주는 것이 아닌 관용적인 방식으로 Go코드를 작성하는 방법을 알려주어 경험이 좀 더 많은 Go언어 개발자라면 새롭게 추가된 기능들을 가장 잘 사용하는 방법에 대해 조언을 얻을 수 있습니다. 예제로 사용된 코드가 장황하거나 한번에 많은 내용을 포함하진 않지만 처음 코드를 구성하고 그다음 기능들을 구성하는 데 있어 기반을 다질 수 있도록 도와줍니다. 또한 Go의 각기능을 활용하면서 기존 다른 언어들과 차이점을 명확하게 하여 습관적으로 Go에 맞지 않은 패턴으로 진행할 수 있는 점도 짚어주고 있습니다.

 

구성

 

Chapter 1: Go개발 환경 설정

Chapter 2: 기본 데이터 타입과 선언

Chapter 3: 복합 타입

Chapter 4: 블록, 섀도, 제어 구조

Chapter 5: 함수

Chapter 6: 포인터

Chapter 7: 타입, 메서드, 인터페이스

Chapter 8: 오류

Chapter 9: 모듈, 패키지 그리고 임포트

Chapter 10: Go의 동시성

Chapter 11: 표준 라이브러리

Chapter 12: 컨텍스트

Chapter 13: 테스트 작성

Chapter 14: Reflect, Unsafe, Cgo

Chapter 15: Go의 제네릭

 

파트별로 나누어 봤을때 1~5장은 Go언어에서 사용하는 기본적인 함수에 대해 설명하고 있고 6~9장은 포인터, 메서드, 패키지 같은 함수에 대해, 10~12장은 고루틴, 라이브러리, 컨텍스트에 대해, 13~15장은 완성된 프로그램 테스트 및 응답값에 대해  설명하고 있습니다.

 

개인적인 생각으로 학습은 Go언어 개발자로 취업을 희망하시거나 취업한지 얼마 되시지 않는 이제 막 개발자로 시작한 초보자이신 분들께서는 1장부터 시작하시면 좋을것 같고 어느정도 경험이 있으신 분들(Go언어 또는 다른언어 개발자 2년차~)부터는 6장까지는 쭉 보시면서 Go언어에서 사용하는 함수와 사용방법에 대해 파악 및 복습한다는 방식으로 보시고 7장부터 학습하시는 것이 좋을것 같습니다.

 

개인적으로 약간의 단점이 어쩌면 욕심일수도 있는게 좀더 많은 실습 예제가 담겨있으면 더 좋았지 않았을까라는 아쉬움이 있습니다.

 

저의 리뷰를 읽어주셔서 감사합니다. 다음에는 좀더 유용하고 좋은 책을 소개하면서 더 나은 리뷰를 통해 여러분께 책을 소개시켜드릴 수 있도록 더 노력하겠습니다.

 

 

 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

Go 언어는 웹 서비스 개발자가 선호하는 언어로 빠르게 자리 잡고 있다고 한다. 다른 프로그래밍 언어로 개발한 경험을 가진 개발자들에게 Go 언어 문법을 알려주는 튜토리얼은 많지만, 그것만으로 부족하기 때문에 이 책이 나온 거 같다.

이 책에서 살펴볼 내용으로는

- 관용적 코드 사용법과 프로젝트 설계 배우기

- Go 언어의 효율적인 작동 원리 알아보기

- 사용자를 위한 개발 환경 구축하기

- 고급 레벨 사용자를 위한 reflect, unsafe, cgo 기능 이해하기

- Go 언어의 새로운 기능인 제네릭 살펴보기

책 도입부에 있는 '이 책에 대하여'라는 글에서 알 수 있는데, Go 언어에는 상속, 제네릭(도입 예정), 관점 지향 프로그래밍, 함수 오버 로딩, 그리고 연산자 오버 로딩이 없다고 한다. 또한 패턴 매칭 명명된 파라미터, 예외 처리도 없다. 많은 개발자들의 공포인 포인터는 있다고 한다.

추천하는 대상 독자로는

두 번째 개발 언어를 찾는 개발자에게 추천하고 싶다.

 

서평 : 책을 읽어보니 C/C++를 미리 공부했었던 사람들은 포인터에 개념에 대해 잘 알고 있으면 배우기가 수월하게 같은 생각이 들었다.

 

블록이라던가 섀도잉이라는 잘 모르는 개념이 있어서 그런 것들을 이해하는 데 시간이 걸렸고. 새로운 언어를 공부하는 게 쉽지는 않았다. 그래도 다행히 책이 엄청 두껍지 않고 간결하게 설명하고 있어서 빠르게 읽어볼 수 있어서 좋았다.

1. 시작


"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."


2022년 3월달에 소개할 책은 Learning Go(러닝 Go) 입니다


개발자 사이에서 핫한 언어는 Go언어 입니다.

인기를 한번 볼까요?


가장 유명한 프로그래밍 언어 인기 순위 사이트(타이오베)

https://www.tiobe.com/tiobe-index/



13위 입니다.

Go 언어는 C++의 복잡함, 긴 컴파일 시간을 단축시켜주는 구글에서 만든 언어입니다.

C, C++보다 배우기 쉽습니다.


Go 언어는 무엇을 개발할때 사용하면 좋을까요?


가장 유명한 오픈소스 도커, 쿠버네티스를 Go 언어로 만들었습니다.

컨테이너, 클라우드 환경, 시스템 프로그래밍에 적합한 언어라고 할수 있습니다.


Go언어를 학습하기 위한 모든 문법적인 부분을 포함하고 있습니다. 


책 서문에 필자는 이책에 대해서 다음과 같이 얘기하고 있습니다.


이 책은 Go 언어를 이용해 명확하고 관용적으로 개발할 수 있도록 기초 지식을 전달하는 실용적인 가이드다.


2. 책속으로

이 책은 완전 초급용은 아니고, 어느정도 프로그래밍 언어를 다룰 수 있는 대상을 독자로 책이 쓰여졌으며, 주요 내용을 목차순으로 설명하도록 하겠습니다.


첫장은 간단한 Go 개발 환경 설정을 안내합니다.

저는 Visual Studio Code를 사용해서 개발환경을 설정했습니다.

자동으로 Go관련 플러그인을 설치할 수 있어서 쉽게 환경설정을 해주는것이 초급 개발자에게는 너무나 편안합니다.



두번째장에서는 내장타입사용, 변수선언, 할당 및 연산자 역할을 이해할 수 있는 내용을 다루고 있습니다.


세번째장은 배열, 슬라이스, 맵, 구조체와 같은 복합타입에 대한 내용을 다루고 있습니다.


네번째장은 블록, 섀도, 제어구조(if,for, switch, goto)에 대해서 다루고 있습니다. 프로그래밍 언어에서 소스코드 해석에 대한 복잡성 때문에 사용하지 않는 goto문이 go언어에 포함이 되어 있다는것은 특이한 것 같습니다.


다섯번째장에서는 다른 언어에서의 함수를 비교해서 유사한점과 다른점을 알려줍니다.


여섯번째장은 포인터가 무엇인지, 사용은 어떻게 하는지?, 언제 사용하는지에 대해서 도움을 주는 내용들입니다.

그림을 통해서 쉽게 설명하도록 노력하고 있는데, 결코 쉬운 얘기는 아닙니다.


일곱번째장은 타입, 메서드, 인터페이스를 다루고 있습니다.


여덟번째장에서는 오류가 무엇인지? 정의하는 방법과, 확인하는 방법에 대해 다루고 있습니다.


아홉번째장은 모듈 동작 방법, 패키지 내에 코드 구성방법, 서드파티 모듈 사용법, 자신의 모듈을 배포하는 방법을 다루고 있습니다.


열번째장은 Go언어의 핵심기능중에 하나입니다. 동시성에 대해서 다루고 있습니다.


열한번째장은 표준 라이브러리에서 가장 일반적으로 사용되는 패키지 몇가지를 소개하고 있습니다.


열두번째장은 컨텍스트를 사용하여 요청 메타 데이터를 관리하는 방법을 가르쳐줍니다.


열세번째장은 테스트 작성, 테스팅, 코드 커버리지, 벤치마킹 등 코드 품질을 높이는 방법에 대해서 다루고 있습니다.


뒤로 갈수록 내용은 어려워집니다. 중고급 대상으로 쓰여진책이다 보니 내용이 쉽지가 않네요~^^; 하지만 깊이 있는 책인것은 확실합니다.


열네번째장은 리플렉션, unsafe, cgo를 다루고 있습니다.




마지막 열다섯번째장은 제네릭에 대해 설명하고, 문제를 해결하기 위한 Go사용 법 제네릭을 다루고 있습니다. 이책이 나오기 전에는 제너릭이 포함되지 않았지만, 이 서평을 쓰기 시작할때쯤 1.18버전이 나왔으며, 제네릭이 포함이 되었다고 합니다.

Go언어에서 제네릭이 구현하지 않은 이유가 책에서 3가지로 알려줍니다.

1.빠른 컴파일러

2.가독성이 좋은 코드

3.좋은 실행시간

제네릭을 위의 3가지를 훼손 시키기 때문에 구현을 하지 않았다고 합니다.



3. 아쉬운점

번역이 매끄럽지 못해서, 술술 읽히지 않는 부분이 아쉬운 점으로 남습니다.

대부분의 기술서적은 내용 자체가 딱딱하기 때문에 번역또한 쉽지 않은 부분이 있습니다.


그림, 도표가 거의 없습니다. 

그래도 다행인 것은 포인터 설명은 그림이 포함이 되어서 이해를 도와주고 있습니다. 

그외에는 소스코드, 글자가 대부분이어서, 가독성이 부족할 수 밖에 없어서 아쉬운 부분입니다.


보통의 프로그래밍 언어 책과 유사(기본 명령어에만 치중되어 있는)해서 다소 지겨울 수 있습니다.

재미있는 프로젝트 기반 예제가 없어서 아쉽습니다.


다만 책에서 제공하는 예제가 확장가능하도록 제작했다고 하지만, 아쉬운 부분은 있을수밖에 없습니다.


프로그래밍 언어 배울수 있는 책에 대해서 아쉬운 부분은

실제 업무에서 사용가능한 프로젝트 기반 예제

재미있는 샘플 예제를 통한 기본명령어, 문법, 데이터 타입을 배울 수 있으면 좋을것 같았는데, 늘 아쉬운 부분입니다.



"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

평소 Go 언어를 공부하면서 아쉬웠던 것이 있는데, 다른 언어에서 흔히 볼 수 있는 기능이나 특징들을 지원하지 않는 경우가 존재한다는 것입니다. 조금 더 정확하게 이야기하면 서로 다른 언어 간에 당연히 차이점이 존재할 수 있지만, 다른 언어에서 익숙했던 기능들을 지원하지 않는 것에 대한 이유를 잘 설명해 주는 자료가 드물다는 것입니다.

 

한 예로 암묵적으로 구현되는 인터페이스 지원 같은 부분이 있습니다. 명시적 인터페이스 구현에 익숙했던 터라 암묵적인 인터페이스는 인터페이스를 구현했는지도 알기 어렵고, 구현의 장점이 뭔지도 알기 어려웠습니다. 오히려 팀 개발에 있어 단점이지 않나 하는 생각까지 들었습니다. 왜 이런 결정을 했을까? 궁금했던 부분입니다. 이 책에서는 이런 결정들에 대한 이유를 설명해줍니다. 또한 이런 철할을 잘 활용하기 위한 Go 언어의 관례들에 대해서 소개해줍니다.

 

책에서 이 책의 대상 독자로 두 번째 개발 언어를 찾는 개발자, Go를 새롭게 시작하는 사람들이라고 소개하고 있습니다. 물론 이런 분들이 보시기에도 좋은 책이라 생각합니다. 하지만 개인적인 생각에 이 책은 Go 언어를 처음 입문하는 사람들보다는 Go 언어를 조금 사용해 본 개발자에게 더 도움이 될 것이라 생각합니다.

 

책의 곳곳에서 Go 언어의 내부 구조와 동작 원리에 대해서 이야기하고 있습니다. 또한, Go 언어 설계 시 고려했던 문제들과 개발팀의 의사결정. 그 배경에 있던 철학들. 그로 인해 형성된 여러 관례들에 대해서 설명해 주고 있습니다. 이런 내용들은 단순히 언어의 사용 방법을 배운다고 해서 알 수 있는 내용들은 아닙니다. 오히려 어느 정도 사용방법이 익숙해졌을 무렵부터 서서히 올라오는 "왜?"에 대한 찾기 어려운 이유들입니다.

 

처음 Go 언어를 배우는 분들에게 이런 내용들은 다소 지루하거나 지나치게 어려운 주제여서 흥미를 잃게 할 수도 있습니다. 반면 Go 언어를 조금 다루어 봤거나 다른 언어와 비교하여 Go 언어를 학습해 본 분들에게는 Go 언어를 깊이 이해하는데 큰 도움이 되는 내용들로 가득합니다. Go 언어를 사용해 본 개발자분들에게 꼭 이 책을 읽어보시라 권하고 싶습니다.

지난 달 22년 2월 말에 출간된 따끈따끈한 신간이다. 제목도 정말 심플하게 "Learning Go" 인데 그림도 두더지 같이 생긴 쥐 한마리... (평원흙파는쥐라고 한다). 유독 다른 O'REILLY 책들보다 더 깔끔하고 여백이 많아 보인다. 좀 더 가볍게 시작할 수 있을 것 같은 책이다.

러닝 Go (Go 개발자처럼 생각하는 방법)

 

  처음 프로그래밍을 배우기 시작한, 혹은 한 권 정도의 기본서를 끝낸 사람들이 개발에 새로운 재미를 느끼기 시작하는 때가 있는데, 아마 2번째 프로그래밍 언어를 배우기 시작할 때일 것이다. 처음 배우는 언어는 정말 새롭다보니 어려움을 많이 겪게 되는데, 2번째부터는 상대적으로 기본 문법이 많이 겹치다보니 쉽게 느껴지기 때문이다. C, C++, Java, Python, Javascript, ... 무작정 공부해보는 시기가 지나면 자신에게 맞는 언어를 발견하게 되고 어느새 하나에 정착하게 되는데, 그렇게 한참을 지내다보면 새로운 언어를 자신의 주력 언어처럼 깊게 공부해보고 싶은 생각이 들때가 있다. 나는 Go 가 그 중 하나였다. 당시에는 보기 편한 국내 기본서가 거의 없다는 핑계로 겉핥기로만 공부하고 미뤄두었는데, 이 책을 계기로 다시 한번 시작해볼까하는 생각이 든다.

 

대상 독자는 두 번째 개발 언어를 찾는 개발자이다.

 

대상 독자는 두 번째 언어를 배우고 싶은 개발자

  저자는 이 책을 두 번째 프로그래밍 개발 언어를 찾고 있는 개발자들에게 추천하고 싶다고 밝히고 있다. 전형적인 프로그래밍 언어 입문서이지만 git 과 같은 프로그램을 사용할 줄 안다고 가정하고 설명하는 부분이 있기 때문에 첫 언어를 배우는 사람들에게는 조금 불친절한 부분이 있을 수 있기 때문이다. 개인적으로도 Go 언어로, 그리고 이 책으로 개발을 처음 시작해도 괜찮다고 생각하긴 하지만 굳이... 라는 생각이 들긴 한다. 어̩든 이 부분을 제외하고는 새로운 언어를 배우기 위한 입문서로써 좋은 책이다. 

 

이미 개발자인 사람들을 대상으로 하기 때문에 책의 내용이 기본서치고는 어렵다.

 

입문자에게는 조금은 불친절할 수 있다. 

  책의 앞 부분에는 Go 개발 환경 설정과 기본적인 데이터 타입 및 선언 방법, for문, if문 등 자주 사용되는 문법과 함수에 대한 설명으로 구성되어 있다. 기본서의 전형적인 목차다. 조금 아쉬운 점이 있다면, 위 사진의 글을 읽어보면 알 수도 있겠지만, 결코 처음 프로그래밍을 배우는 사람에게 친절한 내용이 아니다. 추상화, 소프트웨어 엔지니어링 관점의 내용, 테스트 및 유지관리... 처음 배우는 사람에게 이러한 내용을 글로 표현한다고 해서 이해가 될 리 만무하며 오히려 난해함만 느끼게 될 부분일 것이다. 이런 이유에서 보면 새로운 언어를 공부하고자 하는 사람에게 맞는 이유일 수도 있겠다. 이미 개발의 경험이 있는 사람들에게는 너무나 당연한 내용으로 받아들여지기 때문이다.

 

 

 

  후반부에는 Go 언어의 표준 라이브러리들을 포함해서 컨텍스트, 간단한 테스트 그리고 나름 최근에 추가된 제네릭에 관한 내용들이 나온다. 이미 다른 언어에서 비슷한 컨셉들을 접해본 사람들은 앞 부분을 읽어 오듯이 차이점을 생각하면서 편하게 읽을 수 있다. Go 언어만의 장점이 있는지, 어떤 부분이 내가 사용하는 주 언어보다 좋은지를 비교해가면서 읽어보면 꽤나 재밌게 볼 수 있다. 

  다른 리뷰들을 몇 개 보니, 담백한 구성이 자칫 지루함을 유발할 수 있다, 번역이 조금 아쉽다는 내용이 있었는데, 개인적으로도 약간 공감하는 편이다. O'REILLY 의 기본서들의 전형적인 구성이라서 나는 불편한 부분이 전혀 없었긴 하지만 최근에 나오는 기본서들을 보면 책 표지부터 예쁘고 내용도 '어떻게 하면 조금 더 쉽고 재미있게 알려줄 수 있을까'를 고민한 흔적이 많이 보이기 때문이다. 이런 부분은 책을 읽을 때 동기부여를 심어주는데 큰 역할을 한다. 이왕이면 컬러로 그림으로 친절하고 재미있게 설명하는 책들을 누구나 좋아할 것이다. 

  다만, 조금은 익숙해져봐도 괜찮을 것 같다. 앞으로 개발을 하다보면 봐야할 무수히 많은 개발 메뉴얼들은 절대로 기본서처럼 친절하지 않기 때문이다. 그럴 이유도 없기도 하고. 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

프로젝트에 어떤 프로그램 언어를 사용하시나요?
현재 공부하고 계신분들이라면, 어떤 기준으로 첫 언어를 선택 하셨나요?

프로그램 언어를 선택하거나, 프로젝트에 기술을 선택하는 기준은 정말 다양할 것입니다.

팀원들에 스킬을 반영하여, 선정이 될 수도 있구요.
프로젝트의 일정과 주어진 자원이 먼저 고려가 되는 경우도 많을 것 입니다.
또 어떤 경우가 있을까요?
팀 리더라면, 개발자를 쉽게 구할 수 있는 트렌디한 기술을 선택할 수도 있겠죠?

위에 말씀 드린 내용들은 기술을 검토하고 선정할 때,
모두 중요한 요소이며, 검토 되어야 할 항목들 임은 틀림 없습니다.
하지만 IT 개발자라면, 무엇보다도 중요하게 생각되는 녀석이 바로 성능일 것 입니다. 적은 비용으로, 최고의 성능을 낼 수 있는 기술이 곧 시장을 앞서 나갈 수 있을 테니까요.

그래서 우리 개발자 또는 연구자들은 작은 성능 하나를 개선하기 위해,
항상 고민하고 노력하게 됩니다.
그것이 나의 경쟁력이고 내가 몸담고 있는 조직의 경쟁력이 된다는 것을 알고 있는 것이죠.

그런 관점에서 Go라는 언어는 정말 매력있는 언어 인 것 같습니다.
구글에서 탄생한 Go라는 언어는 앞서 말씀드렸듯이 가볍고 우리가 원하는 성능을 최적화 하기 좋은 언어 입니다.
거기에 개발 생산성까지 고려된 만큼, 많은 개발자들에게 사랑을 받는 기술이기도 하죠.

물론 1등으로 많이 사용되는 언어는 아니지만, 시간이 지나게 되면 그 순위는 어떻게 될지 모르자나요?
결국 좋은 기술이 마지막에는 살아 남게 될 것이니까요.

오늘 제가 소개 드릴 책은 바로 이 Go라는 언어에 대해 알 수 있는 책입니다.
Go 언어의 특색을 알고 Go 언어의 매력을 살펴볼 수 있죠.
게다가 Go 언어가 가지고 있는 철학과 그 철학을 담은 문법들을 맛볼 수 있습니다.


모든 언어가 그렇듯 기본 데이터 타입부터 시작하여, 함수를 정의하고 사용하는 기본적인 내용부터 시작됩니다.

그리고 포인터, 타입, 인터페이스와 같은 내용으로 이어지죠.
이까지는 대부분의 언어를 배우면 동일하게 알아야 하는 내용이죠?

Go에서 가장 주의 깊게 봐야 하는 것이 바로 이 부분 입니다.
Go 동시성 !
고루틴은 정말 Go에 꽃이라고 할 내용이죠.
이 부분을 읽으시면, 이 언어에 푹 빠지게 되실거예요.

조금 궁금하시나요?
다양한 예제 코드와 실습 환경에 대한 설명이 잘 되어 있어서,
이번 책 처음 Go 언어를 학습해 나가기에는 딱인 것 같습니다.
강력 추천 드립니다.

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."





Screen Shot 2022-03-31 at 9.57.56 PM.png

예전부터 Docker를 자주 사용하면서, docker를 만든 Go programming Language에 대해 관심이 있었습니다.

 

바쁘다는 핑계로 관심만 갖고 있었는데 이번 기회에 Go Programming Language에 대해서 조금 더 깊이 알게 되었습니다.

 

옮긴이에 따르면, Go 언어는 다른언어에 비해 배우기도 쉽고 대형 프로젝트에서도 간결함을 유지할 수 있어서 확장성도 높다고 합니다.

 

실제로 c언어를 기반으로 배우신 분들은 python보다 더 쉽게 배우실 수 있을것 같았습니다.

 

또한 Docker라는 거대한 가상화 플랫폼을 만든 프로젝트도 생각보다 간결하게 작성이 되어있다는 것을 볼 수 있었습니다.

 

이 책으로 첫 프로그래밍을 시작하는 것은 조금 어려울 것 같고, 최소한 한두가지 이상의 언어를 사용하실 줄 아는 개발자분들이

 

Go언어를 배우기 좋은 책이라고 생각합니다.

 

기본적인 프로그래밍 방식도 설명해 주고 있긴 하지만, 이 책은 기본 문법 보다는 여러가지 기능들에 집중하고 있기에

 

기초 프로그래밍 보다는 여러가지 프로젝트를 진행할 분들이 보면 좋을 것 같습니다.

 

평소에 Go언어에 관심이 있었던 개발자들에게 입문서로 강력히 추천해 주고 싶은 책입니다.

 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

담백한 구성이 자칫 지루할 수 있습니다.

Head First Go보다 많은 것을 다루기에 진도가 더딜 수도 있죠.

저 역시 한 번에 오랜 시간을 두고 보기가 쉽지는 않았습니다.


하지만 그만큼 이 책을 독파했을 때 배움과 이해의 수준은

확실히 성장할 것으로 생각합니다.

 

그만큼 내용이 좋다고 할 수 있는 책으로
Go를 배우고자 하는 이들에게

Head First Go와 함께 추천하고 싶은 책입니다.

1220331.jpg

 

Go 언어를 아시나요?

Go 언어는 구글에서 만들었습니다.

 

개발자가 배우고 싶어 하는 언어 중 하나입니다.

 

프로그래밍 언어 중 C++이 빠릅니다.

 

메모리 관리도 직접 할당하므로 복잡한 부분도 있습니다.

 

Go 언어는 구글 엔지니어 세 명이 C++이 복잡함이 싫어서 만들었다고 합니다.

 

C++에 비해 간단하며 가비지 컬렉션, 병행성을 잘 지원해줍니다.

 

Go 언어를 알려주는 책을 소개해드리려 합니다.

 

소개해드릴 책은 ‘러닝 Go’입니다.

 

프로그래밍 언어 중 Go 언어의 인기가 올라가고 있습니다.

 

올라가는 이유는 다른 언어에 비해 빠르기 때문일 것으로 보입니다.

 

Go 언어는 어떤 언어인지 갈이 살펴보겠습니다.

 

 

2220331.jpg

 

 

◆ Go 언어의 특징

Go 언어의 특징을 통해 어떤 강점이 있는지 알아보겠습니다.

 

Python과 Java 언어는 많은 사람이 개발할 때 시작하는 언어입니다.

 

Go 언어는 Python과 Java의 장점을 잘 섞여 있습니다.

 

Python은 코딩인터뷰 때 많은 사람이 사용하지만, 타입의 부재 문제가 있습니다.

 

Go 언어는 타입을 가지고 있으며 가비지 컬렉션 및 동시성을 지원합니다.

 

또한 포인터를 가지고 있어서 데이터 구조를 더욱 세밀하게 제어도 가능합니다.

 

많은 사람이 사용하는 언어가 배우고 학습하기엔 좋습니다.

 

하지만 Go 언어를 알고 있다면 다른 개발자에 비해 좋은 인상을 남길 수 있습니다.

 

 

3220331.jpg

 

 

◆ 속도가 빠른 언어

Go 언어는 다른 프로그래밍 언어보다 속도가 빠릅니다.

 

동시성 제어가 잘 되어 있습니다.

 

Go 언어는 키워드가 C와 C++에 비해 간결합니다.

 

세미콜론을 쓰는 것도 필수는 아니고 안 써도 작동합니다.

 

C와 구문은 비슷하지만, Go 언어는 C보다 복잡하지 않습니다.

 

메모리 관리 부분에서도 Go 언어는 다른 언어에 비해 빠른 속도를 보여줍니다.

 

이런 빠른 속도는 코딩테스트를 할 때도 알고 있다면 유리한 요소입니다.

 

 

4220331.jpg

 

 

끝으로 Go 언어는 2009년도에 개발되었습니다.

 

웹 서비스 개발자가 선호하는 언어로 빠르게 자리 잡고 있는데요.

해외 많은 IT기업에도 Go를 메인 개발언어로 사용하는 곳도 생기고 있습니다.

 

국내에도 Go 언어를 메인으로 쓰는 회사도 더 많이 생겨날 것입니다.

 

메인 개발 언어가 있으신 분들도 다음에 무슨 언어를 공부할지 고민이신 분들도 계실 텐데요.

그 고민에 Go 언어를 해보라고 말하고 싶습니다.

 

Go 언어에 관심 있는 분들에게 이 책을 추천합니다.

 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

 

# 요약

- Go 언어를 처음 사용해보는 개발자를 위한 개념서

- Go 환경 설정부터 중요한 토픽인 동시성까지 두루두루 다루고 있음

- Go 언어를 처음 배우려는 독자에게 추천!

# 장점

- 제공되는 깃헙을 통해 소스코드 쉽게 접근 가능

- 기본적인 타입, 제어문, 반복문부터 포인터, 모듈, 동시성(고루틴), 제네릭 등의 다양한 토픽을 다루고 있어서,

Go언어로 프로그래밍을 하는 사람이라면 백과사전처럼 가지고 있으면 도움이 될만한 책

- 실제 실행가능한 코드 예제가 많아서 따라해보며 이해도를 높일 수 있음

# 단점

- 입문서이기에 이미 Go 언어에 익숙한 독자에게는 적합하지 않음

---

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

 

 

 

 

2345.jpg

 

Go 언어를 처음 만났던 때를 기억한다. 회사 동료가 Go를 활용해서 간단한 웹서버를 구축했고, 이를 기반으로 제품에 필요한 기능이 손쉽게 추가되었다. 개발 언어를 C/C++, Java 외에 다른 언어를 쳐다보지 않았던 그 당시의 나에게는 꽤 신선한 충격으로 다가왔다. 그래서 그 이후 그 당시에는 그리 많지 않은 Go언어 튜토리얼을 보면서 잠시 Go언어 세상에 있었다.

 

​그리고 이번에 한빛미디어에서 출간된 '러닝 Go'라는 책을 만나면서 Go언어를 다시금 만나게 되었다. 그동안 자주 사용하지 않던 언어이다보니 많은 부분을 잊어버리고 있었지만, 이 책은 다시 Go 언어의 매력을 다시 느낄 수 있게 해주었다.

 

'러닝 Go'는 Go언어를 학습하고 익히는 책이지만, 독자들에게 단순 Go언어의 문법을 전달하는 튜토리얼이 아닌, 이 언어를 사용해서 명확하고 관용적으로 개발할 수 있도록 하는 가이드와 같은 책이라고 생각한다. 독자 자신이 원래 Go 개발자였던 것처럼 익숙하게 사용할 수 있도록 돕고 있다.

 

2346.jpg

 

저자는 처음에 이 책의 제목을 '지루한 Go 언어 (Boring Go)'라고 지었다고 한다. 이 언어에 대한 그의 첫 인상이 그랬다는 것이다. 하지만 저자도 Go 언어는 지루하지만 환상적이라고 평하고 있다. 저자는 이 책을 통해서 독자들이 확장이 용이한 관용적인 코드를 작성할 수 있도록 그 방법을 설명한다.

 

​책 초반에 관용적이라는 표현이 눈에 들어왔다.

관용적이라는 의미는 초록창 검색을 통해 사전적 의미를 찾아보면 

습관적으로 늘 쓰는.

오랫동안 써서 굳어진 대로 늘 쓰는.

이라고 나타난다.

 

저자는 이 책을 두번째 개발언어를 찾는 개발자들에게 추천하고 싶다고 했다. Go 언어를 새롭게 시작하거나 또는 Go 언어 경험이 있는 개발자라 하더라도, 습관적으로 Go언어를 사용해왔던 것처럼 Go스러운 코드를 작성할 수 있도록 도와준다.

 

책의 구성은 O'REILLY, 한빛미디어에서 출간된 여느 프로그래밍 언어 학습서와 다르지 않다. 하지만 Go언어가 가지고 있는 기능 중 중요하고 잘 사용되는 부분에 대한 설명은 깔끔하게 되어있다. 이 책의 장,단점을 따지기보다 이 책에서 저자가 전달하고자 하는 방향이 무엇이냐가 뚜렷이 드러나있었다고 생각한다.

 

Go 언어에 조금이라도 관심을 갖고 있다면 지금 바로 이 책을 추천한다.

 

한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.

 

#러닝Go #LearningGo #Go #한빛미디어 #OREILLY

Go 개발자처럼 생각하는 방법

존 보드너 지음

윤대석 옮김


한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

 

2022년 3월

2022 나는 리뷰어다 활동의 두 번째 리뷰


올해 두 번째 리뷰할 책은 "러닝 Go" 이다.


어떤 책을 선택할까 고민하다가 Go를 단어만 들어봤지, 뭐 어떤 건지 전혀 몰라서 무작정 신청해 보았다.


Go는 구글이 만든 개발 언어이다.

옮긴이의 말을 빌리자면, 비교적 최근에 개발되었고 오랫동안 유지 개발되어온 다른 인기 있는 프로그래밍 언어들과는 다르게 최신 멀티코어 아키텍처(?)를 제대로 활용할 수 있도록 고안되었다. 특히 Go루틴(goroutine)과 채널을 통해 작업을 동시성과 병렬성을 쉽게 구현해 낼 수 있도록 한 부분에서 다른 언어들과 차이를 보인다.


특히 Go 언어는 도커나 쿠버네티스와 같은 대형 프로젝트에서 사용되는 만큼 성공했다고 할 수 있다.


이런 장점으로 시스템 프로그램이나 서버용 프로그램 개발에 많이 활용되고 있지만, 국내에서는 서버 개발로 아직도 자바를 많이 쓰고 있다.

(자바 만세!)


개발자가 원하는 프로그램을 구성하면서 언어에서 제공하는 다양한 기능을 사용하는 방법뿐만 아니라 효율적이고 확장할 수 있게 진행하려면 언어가 가지는 특징과 철학을 잘 이해할 필요가 있다고 생각한다. 개발자가 자신이 사용하던 언어와 Go가 개념적인 부분에서 크게 다르지 않지만, 이 책에서는 다른 언어들과의 차이점을 명확히 구분해주기 때문에 Go 언어만의 매력을 느낄 수 있다.


옮긴이가 한 말 중에 가장 와닿는 부분은,

"Go 언어는 다른 언어에 비해 배우기 쉽고 프로젝트가 커지더라도 간결함을 유지하여 확장도 쉬운 언어라고 생각한다."

프로젝트가 커지더라도 간결함을 유지할 수 있다니?

굉장히 매력적인 부분이라는 생각이 든다. 간결하지만 강력한 기능을 제공하여 유지 보수에도 많은 이점을 가지고 있다는 Go.


다음으로 대상 독자에 대해 저자가 정리해준 부분이 있다.

본인이 구분 지어 보고자 한다.

1. 두 번째 개발 언어를 찾는 개발자

2. 버전 관리나 IDE를 사용해본 경험이 있는 개발자

3. 동시성이나 추상화 같은 컴퓨터 과학 개념에 익숙한 개발자

4. 기본적인 HTTP 개념에 익숙한 개발자

이 정도로 정리가 되는 것 같다. 4가지 조건을 다 충족시킬 필요는 없지만 하나의 언어가 익숙해진 미들급 개발자가 이 책을 본다면 가장 적합한 시기의 책이 아닐까 싶다.


목차를 간단히 보자.

1. Go 개발 환경 설정

2. 기본 데이터 타입과 선언

3. 복합 타입

4. 블록, 섀도, 제어 구조

5. 함수

6. 포인터

7. 타입, 메서드, 인터페이스

8. 오류

9. 모듈, 패키지 그리고 임포트

10. Go의 동시성

11. 표준 라이브러리

12. 컨텍스트

13. 테스트 작성

14. Reflect, Unsafe, Cgo

15. Go의 제네릭


보통의 컴퓨터 언어 책과 구성은 비슷하지만 익숙하지 않은 단어들이 있는데, Go 만의 특징이 아닐까 싶다.


본문은 설명과 코드 그리고 Tip, NOTE 등으로 구성되어 정리하기 편하게 되어 있다.

근 450 페이지에 달하는 분량이지만 새로운 언어를 배우고자 한다면 Go를 450 페이지 만에 배울 수 있다는 것이다.


개발이 무료하고 새로운 것을 찾고자 하는 개발자들이여.

러닝 Go에 도전해 보는 것은 어떨까?


LoveYourself.

# idiom

새로운 언어를 배울 때 문법 다음으로 알아야 하는 것은 어떤 식으로 코드를 작성해야 할 지 이다. 작성하는 스타일에 따라서 ~다운 혹은 ~스러운 코드가 될 수 도 있고 아닐 수도 있다.

이 책은 GO 로 코드를 작성해 보지 않은 사람이 GO 스러운 코드를 작성 할 수 있도록 하는 것이 목적이다. 책에서는 "관용적으로 개발할 수 있도록" 이라고 표현 하였다.

 

# High Quality

GO 스러운 코드를 작성해야 하는 가장 큰 이유는 역시 좋은 품질을 위해서 이다. 이를 위해 GO 프로그램은 코드 포매팅에서 부터 일관성 있는 표준 포맷을 정의 했고 이를 위한 개발 도구 또한 제공 한다. 

 

이미지 2.png

 

# 실용적 

2장에서 7장에 걸쳐 GO 의 기본 문법(자료형, 함수사용, 포인터 등)에 대해 자세히 설명 한다. 이 언어의 가장 중요한 특징이라면 위에서 설명한 대로 "실용적" 이라는데에 있다. 

 

# 오류 처리

8장에서는 오류 처리에 대해서 설명 한다. GO 는 함수의 마지막 반환 값으로 error 타입의 값을 반환 하여 오류를 처리한다. 오류가 발생할 상황을 일일이 확인 하여 처리해 줄 필요가 있다. try, catch 가 없으니 좀 어색하지만 원하는 바가 결국은 다른 언어들과 같으니 (오류가 발생했을 때의 후속처리 및 프로그램의 강제종료 방지) 처리방식을 비교해 가며 읽어 볼만 하다.

 

# 동시성

GO 의 가장 큰 장점인 동시성 프로그래밍에 대한 내용이다. 채널, 고루틴의 개념 및 사용법에 대해서 설명 한다.

 

# 표준라이브러리

GO 의 또다른 장점이다. 프로그램을 만들 때 필요한 도구를 언어 차원에서 많이 제공하여 필요한 기능을 직접 만들거나 다른 사람이 만든 라이브러리에 의존할 필요성이 상대적으로 적다. 입출력처리, json 처리, http 요청 및 처리 등 꼭 필요한 내용들이 나온다.

 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

 

 

KakaoTalk_20220330_224400278.jpg

 

몇 년 전에 #Go 언어를 도입하려고 계획을 세웠던 적이 있었습니다. 팀 내부에서 세미나를 참석해서 청강하기도 했었는데, 다른 일이 급한 나머지 스터디를 중단하고 말았습니다. 이번에는 "Learning Go"라는 책을 손 안에 넣기도 했거니와 그 때 만족스럽지 못했던 부분을 보충하기 위해서라도 마음을 한번 굳게 먹고 책을 읽기 시작했습니다.

Go 언어에 대해서 저자는 지루하다라는 말로 시작합니다. 언어가 직관적이고 반복이 되는 느낌이 들어서 그런 표현을 한 것 같습니다. 이러한 점으로 인해 Go 언어는 수십명이 수정하거나 오랫동안 유지되는 프로그램을 구축하기 위한 곳에서 강점을 발휘하게 될 것 같습니다. 개인적으로는 타입을 명명하는 방법이 타언어와는 달리 변수명 뒤에 오는 형태로, 타입스크립트와 유사하게 사용한다는 점이 신선하게 다가왔습니다. 유닛테스트나 문서화 기능이 기본툴로 제공되어서, 다른 언어에서는 이러한 기능을 하기 위해서는 환경 구축부터 따로 해야 하는 점과 대비해서 굉장히 편하게 접근할 수 있게 되어 있습니다.

이 책은 Go 언어로 개발하기 위한 환경 구축을 하고 이 언어를 사용하기 위한 방법을 알려주는 책입니다. 또한 관용적인 사용법을 알려주는 책이라고 저자가 표현을 했습니다, 이것에 대해 컨텍스트나 고루틴과 같은 Go 언어만의 특징의 사용법을 알려주는 것을 의미한다고 나름대로 받아들였습니다. 자연스럽게 책의 구성도 개발 환경 구축부터 시작해서, 언어에 대한 명세로 이어지고 표준라이브러리, 컨텍스트, 리플렉션, 제네릭 등의 개념을 설명하는 흐름으로 되어 있습니다.

#컨텍스트 개념을 다룰 때 http 기반의 기능을 예로 들어서 다루고 있습니다. 요즘 이러한 도메인의 프로그램이 많이 필요로 하고, Go 언어도 이 영역에 많이 사용될 수 있음에도 불구하고 설명이 간략하게 되어서 이해가 쉽지 않았습니다. 구체적인 예제 프로그램을 작성해가면서 설명하는 방식을 채택했다면 좀 더 쉽게 와닿지 않았을까하는 아쉬운 생각이 들었습니다. #리플렉션은 낯설기도 하고 감이 잘 오지 않는 부분이기도 했습니다. 이 개념을 좀 더 자세히 다뤄주는 책이나 자료를 소개를 해줬으면 하는 바람이 생기기도 했습니다.

Go의 동시성을 다루는 부분은 즐겁게 읽을 수 있습니다. 스레드나 콜백을 이용한 비동기 처리와는 또다른 #고루틴과 #채널을 통해서 좀 더 직관적으로 병렬처리할 수 있는 방법을 Go언어에서 지원하고 있습니다. 여러가지 경우에 대해서 고루틴의 예제를 들고 있어서 이해하기가 편하고 흥미로움을 줍니다.

Google에서 개발한 언어라는 이유로 초창기 1.0버전 발표무렵에 한참 스터디했던 기억이 있다. c와 많이 비슷하면서 변수 선언, 세미콜론(;) 입력 생략(가능), 동시성 프로그래밍에 강점을 가지며, 간단하게 서버 구현을 할 수 있다는 강한 인상을 남겼던 언어였던 것으로 기억하고 있다. 업무에서의 실전 개발(?) 기회를 얻지 못하고 약간의 맛(?)만을 본 후 잊혀져간 언어이다.

최근에 컨테이너, 클라우드 구축의 인기에 힘입어 도커, 쿠버네티스, 이더리움 등 많은 곳에서 성능과 안정성을 인정받고 있는 것으로 알고 있으며, 이번에 기회가 되어 '러닝(Learning Go)' 서적을 읽어볼 수 있는 기회가 생겼다.

2022년 3월 현재, Go의 최신 버전은 1.18이다. (1.0출시기준)10년 조금넘게 지난 시점에 적다면 적고, 많다면 많은 버전 변화가 있었다. 번역서 초판 출판 시점이 22년 2월임에도 불구하고 가장 최신 버전인 1.18에 포함된 제너릭 프로그래밍도 책의 가장 마지막 챕터를 할애하고 있다는 점이 인상적이다. 그러나, 한 챕터에서 제너릭의 내용을 모두 설명하기에는 다소 부족한면이 큰것이 사실이다. 이 부분은 향후 개정판을 기대해보는 것도 좋을 것 같다.

 

출판사페이지의 '출판사리뷰'의 타이틀에서 느껴지듯

 

"뭐라Go? 아직도 모른다Go? 알려준다Go! 가 보자Go!"

 

이 책은 Go를 사용해보지 않은 사용자를 포함하여, 이미 어느 정도 Go를 사용한 독자라도 도움을 줄 수 있는 책이 되는 것이 저자의 목표이다. 초보자를 대상으로 하고 있지만 컴퓨터 언어를 전혀 접해보지 않은 독자에게는 파이썬과 같은 언어에 비해서는 독자가 쉽게 설명해 주려는 노력도 어느 정도 한계가 있기 마련이다. 다른 프로그래밍 언어 특히 C언어 경험이 있다면 책을 읽고 Go언어를 익히는데 많은 도움을 얻을 수 있다.

 

초반부 챕터들은 여타의 프로그래밍 서적에서와 같이 환경설정을 시작으로 데이터 타입, 제어, 함수 등을 다루고 있다.

문법 나열식의 서적이라면 지루 할 수 있겠지만, 저자의 경험이 녹아 실질적으로 도움이 될 수 있는 패키지와 모듈의 사용법과 협업시 용이한 도구들의 사용법도 알려주고 있어 실무에서도 만은 도움을 얻기 충분하다.

 

웹을 포함하여 현대적인 환경에서 효과적인 프로그래밍이 가능한 Go 언어를 익히고자 한다면,  이 책 '러닝 Go'와 함께 하길 바란다.

 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

# 러닝 Go

 

- [Go]는 최근 웹 개발 분야에서 많은 인기를 받고 있는 프로그래밍 언어입니다.

- [러닝 Go]는 다른 프로그래밍 언어를 활용할 줄 아는 개발자를 대상으로 Go 언어를 스스로 공부할 수 있도록 도와주는 책입니다.

- 책에서 소개하는 저자의 다양한 경험을 통해 다른 프로그래밍 언어와 어떤 부분이 다르고, 색다른 특징을 가지는지 소개하고 있습니다. 또한 많은 예제를 통해 Go 언어만이 가지고 있는 특성을 학습합니다.

 

## 책의 구성

 

- 총 15장의 챕터로 구성되어 있으며, 1장 Go 개발 환경 설정부터 15장 Go의 제네릭까지 폭넓게 소개하고 있습니다. 특히 마지막 챕터에서 소개하는 제네릭은 2022년에 배포된 기능으로 책이 얼마나 최신 정보를 담으로 했는지 엿볼 수 있습니다.

- 단순하게 프로그래밍 언어의 문법만을 소개하는 것이 아니라 웹 개발에 자주 사용하는 패키지와 모듈을 활용하는 내용과 오류 처리, 그리고 다양한 패턴들을 자세히 소개하고 있습니다.

 

## 서평

 

- 책 소개에서 말하는 프로그래밍 경험이 있는 사람이 두 번째 프로그래밍 언어를 익힐 때 보는 책으로 기본적인 CS 지식이 있다는 것으로 간주하고 있습니다. 동시성이나 추상화 같은 개념들과 HTTP에 대한 기본적인 이해 그리고 Git이나 IDE를 다룰 줄 안다고 가정합니다.

- 어느 정도 개발에 익숙한 사람이 다른 언어의 기본서를 보는 것은 힘들고 지루한 일이 될 수 있다고 생각합니다. 적어도 함수의 의미와 사용 방법, 반복 문의 종류(처음 보는 프로그래밍 언어라고 하더라도 `for`와 `while`을 보면 두 개가 어떻게 다른지 의미를 알고 있을 것입니다.) 이런 개념을 소개하기보다는 다른 프로그래밍 언어와의 비교를 통해 Go의 동작 방식과 Go스러운 코드는 무엇인지 소개합니다.

 

go1.jpg

 

Go 언어는 구글개발한 언어입니다. 가비지 컬렉션 기능을 가지고 있습니다.또한 병행성(또는 동시성)을 잘 지원하는 언어입니다. go 언어는 첫 번째 프로그래밍 언어 대신 두 번째 언어로 추천하는 바입니다. 다른 언어가 가지고 있는 특성( 포인터)을 포함하기도 하며 , 함수 오버로딩, 연산자 오버로딩등이 없다. 자신이 사용하는 언어와 Go언어의 차이를 이해하며 배우다 보면 더욱 쉽게 Go언어를 습득할 수 있습니다.

 

go2.jpg

 

go3.jpg

 

go4.jpg

 

Learnig Go를 통해 Go 언어를 배우는 것이 좋은 선택이 될 것입니다.

 

한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다

KakaoTalk_Photo_2022-03-29-22-08-13.jpeg

 

자바에 이어 코틀린이 나오더니 심심치않게, Go 언어에 대한 이야기를 들을 수 있었다. 근래 많은 자바 개발자들이 코틀린을 배우던데 

Go도 알아야될까 싶었다. 하지만 Go는 다른 언어와 다르게 멀티코어 아키텍처를 제대로 활용할 수가 있어서 서버용 프로그램에서 많이 

활용되고 있다고 하니 배워두면 분명 좋은 언어인 것 같다. 

 

그래서 Go를 배우기 전에 Go를 왜 배워야하는지 알고 책을 보면 좋지 않을까 싶다. 새로운 언어를 배우기 전에 먼가 목적없이 배우면

스쳐지나가기 때문이다. 그래서 많은 사람들이 서버개발을 위해 두번째 개발 언어로 Go를 선택하는 사람들이 많다고 한다. 

고민이신 분들은 아래 내용을 한 번 읽어보면 좋을 것 같다.

( https://yozm.wishket.com/magazine/detail/1023/ )

 

서론이 길었는데, 한가지 더하자면 이번 오렐리 표지는 두더지다. 특히, 이번 두더지는 이쁘게 잘 나온거 같다.

 

책의 목차를 보면 Go 개발 환경 설정부터 시작하는데, 요새는 대부분의 개발환경은 VS Code로 할 수 있는거 같다. 이클립스도 언제 써본지

기억이 안나는데, VS Code가 무료이면서 다양한 플러그인들이 지원이 되어 개발하는데 가성비는 탑이라고 생각이 든다.

 

그리고 모든 언어의 기본이 되는 데이터 타입 부터 책 내용은 시작된다. 큰 틀에서는 모든 언어가 크게 다르지 않기 때문에 한가지 언어를 다뤄본

사람이라면 책 내용을 보면서 이해하는데 어려움이 없었다. 다만, 번역서이다 보니 조금 문체가 딱딱한 면은 있어 그런 부분은 조금 아쉽긴했다.

 

그리고 책의 코드를 실행해 볼 땐, 아래 깃허브에 예제 코드가 있으니 따라하다가 막히면 참조하면 좋다. 코드가 단편적으로 나눠서 설명이 되다보니

전체 소스를 보거나 실행할 때 유용하다.

( https://github.com/learning-go-book )

 

전체적인 내용은 기본서 답게 블록, 섀도, 제어구조, 함수, 포인터, 타입, 메서드, 인터페이스 등 여러가지를 다룬다.

개인적으로는 테스트 작성 부분을 챕터13에서 다루는데 이 부분이 좋았다. 항상 코드를 작성하면서 이런 부분을 놓치기 쉬운데, 처음부터 습관을

들이면 사람이 할 수 있는 실수를 미연에 방지할 수 있어서이다.

 

마지막으로 이 책은 기본에서 심화까지 다루는 기본서라고 생각이 된다. Go를 잘 쓰기 위해서 알아야하는 것들을 다루고 있기 때문에 Go를 개발하려는

사람들에게는 한 권 책상에 놓기를 권하는 책이다. 

 

어떤 언어가 좋은 언어라고는 얘기하기 쉽지 않지만, 개발 목적이나 여건에 따라서 최선의 선택을 할 수 있으려면 여러 도구를 쓸 줄 알면 좋은 것 같다.

이런 고민을 하는 개발자거나 두 번째 언어로 새로운 걸 공부해보고 싶은 분들에게 추천드리는 도서인 것 같다. 

 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

 

이번년도에도 한빛 미디어의 나는 리뷰어다에 선정되어 매달 책 한 권씩을 읽을 수 있게 됐다. 3월에는 Learning Go 책을 받아서 보게 되었다. 이 글은 해당 책에 대한 간단한 리뷰이다.

 

일단 Go를 자주 사용하는 개발자로서 Go 책이 자주 보이고 있다는 점에서 굉장히 기분이 좋다. 학습을 해왔던 여러 리소스들과 비교하면서 책을 읽어봤다. 일단 책의 난도는 Go를 접한 적 없는 개발자를 위한 책이었다. 물론 개발자가 아니더고 새롭게 Go를 접하는 사람들 역시 이 책으로학습해도 좋을 것 같은 생각이 들었다. 원래 언어 학습을 위한 책들은 이 정도의 난도로 만들어지는 것 같은데 유독 Go 책은 기존에 개발을 하던 사람들 만을 대상으로 쓴 책 처럼 느껴지는 경우가 많았다. 예를 들어서 The Go Programming Language와 같은 책이 그랬다. 이 책은 내부 동작에 대한 구체적인 설명까지 하지는 않았다. 다만 아주 기초적인 CS 지식의 경우 추가 설명처럼 박스를 만들어서 해당 CS 배경 지식을 설명해준다. 예를 들어서 Map 자료구조를 이해하기 위한 Hash에 대한 기본적인 설명 등… 가장 장점으로 느껴졌던 부분은 꽤 실용적인 내용도 담고, 최신 버전의 정보들이 잘 반영되어 있다는 점이다. 초보자가 언어 학습을 위한 교재로 선택하면 좋을 것 같다고 생각했다.

 

책소개

내가 처음 Go언어를 접한 것은 2~3년 전이었던 것 같다.

C언어에서 시작한 나는 Go언어의 타입, 포인터, 제어구조 등이 C언어와 비슷하여 언제든 조금만 습득하면 개발를 진행할 수 있을 것이라 생각하고 다음 기회가 있으면 봐야지하고 습득하는 것을 잠시 미루었었다.

이번에 해외에서 평이 좋은 Learning Go의 번역판이 한빛미디어에서 출판되었고 서평 대상 책으로 선정되어 반가운 마음으로 책을 읽기 시작했다.

 

이 책은 기초부터 시작한다. 그러나 기초에서 끝나지 않는다.

개발공력이 어느 정도는 있다고 생각했던 나는 처음 데이터선언, 타입, 블록, 제어구조, 함수, 포인터등을 설명할 때는 C나 자바의 기본 문법을 생각하며 쉽게 읽을 수 있었으나 9장 이후의 동시성, 컨텍스트, 테스트작성등의 내용은 예제소스의 내용을 2,3번은 확인하며 읽어야 했다.

저자는 상당히 상세하고 적절하게 해당 장의 내용을 예제와 함께 설명하는데 체계적으로 장이 넘어갈 때마다 심도있게 접근을 한다는 느낌을 받았다.

특히 포인터를 설명하는 부분은 C언어의 포인터를 이해하는데도 적절한 설명이었고 너무 잘 설명되어 있어 놀랐다.

Go언어의 특징이 되는 부분에 대한 설명도 굉장히 잘되어 있어 슬라이스, 메소드, 새도잉, 클로저등의 내용은 개념을 잡는데 어려움이 없었다.

또한 개발을 하면서 꼭 필요한 에러에 대한 처리나, 표준 라이브러리 사용, 테스트 작성등에 대한 설명 부분은 표준에 가깝다는 생각이 들 정도로 잘되어 있다고 생각했다.

중/고급자 단계의 장으로 생각이되었던 동시성을 위한 고루틴, 컨텍스트 인스턴스, 런타임 동적 타입처리 제어를 위한 Reflect 등의 부분도 다시 한번 읽어 봐야 하겠지만 이해하기 어렵지는 않았다.

 

다 읽고 나서 왜 해외에서 평이 좋은지 알것 같다는 생각이 들었다.

저자의 Go언어에 대한 지식이 체계적으로 계획되어 전달되고 있으며 예제 하나하나가 심도있게 선택되고 설명되었다는 것을 느꼈다.

총평

Go언어는 다른 개발언어들의 장점만을 모아서 만들었다는 느낌을 받았다.

정적언어이기 때문에 명확하고 저레벨에서 고레벨 언어의 모든 특징을 가지고 있으며 확장성이 뛰어난 언어라고 판단되었다.

이 책은 Go언어로 클론개발을 하고 싶게끔 만들고 가능할 수 있게 상세히 설명되어 있다.다른 Go언어의 책은 보질 못했으나 다른 언어의 책과 비교해서 상당히 수준이 높다.

Go언어를 배우고자 하는 개발자는 필독서 중에 하나가 될 거라고 생각한다.

 

 

<책을 보는 팁>

- 책에 설명된 예제만을 봐서는 이해가 안가는 부분이 있을 수 있다. 저자는 단편적인 소스 예제를 사용하여 설명하고 있기 때문에 전체적인 소스의 흐름을 알고자 한다면 반드시 예제소스 전체를 받아서 보길 바란다.

- 15장의 Go의 제네릭 부분은 현재 1.18버전이 발표되면서 적용되었다. 책에서 설명한 내용이 틀리지는 않으나 정확한 습득이나 확인을 위해서는 별도로 구글링해서 공부해야 한다.

 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

 

 
 

GO언어의 특징과 철학을 이해하면 확장이 용이하고 기능을 가장 잘 사용하는 코드를 만들 수 있다. 단순히 작성하는 것이 아니라 관용적인 방식으로 작성하는 방법을 알려주기 때문에, 이런 부분에서 유용하다. 새롭게 추가된 기능을 잘 사용하는 방법에 대한 팁도 배울 수 있어 좋다.

 

책의 분량은 440페이지이지만, 읽기에 부담스럽지 않은 두께라 좋다. 빠르게 읽으면서 언어의 특징과 기초를 쌓기에 좋을 것 같다. 이미 GO언어를 접해보았다면은 기초를 탄탄히 다지기 위해 이 책을 빠르게 훑어보는 것도 의미가 있겠다.

 

GO언어를 처음 시작한다면, 이 책으로 시작하는 것도 좋겠다. 혹은 이미 언어를 접해봤지만 기초를 탄탄히 쌓고 싶다면, 이 책으로 빠르게 리뷰해보는 것도 의미가 있겠다.

 

 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

 

 cover.jpg

 

예전에 유튜브 보다가 우연히 GO언어에 대한 소개 동영상이 떠서 보았었는데 한번 공부 해보고 싶다고 생각이 들었었고, 그러다가 이번에 책을 만나게 되었습니다. 

 

책 앞 부분에 대상 독자 안내가 써 있는데 "이 책은 두 번째 개발 언어를 찾는 개발자에게 추천하고 싶다. (중략)  개발자들이 흔히 사용하는 버전 관리나 IDE를 사용해 본 경험이 있다고 가정한다" 입니다.

 

저는 프로그래머도 아니고 프로그래밍 언어 관련 지식이 없지는 않으나 오래 전에 배워서 많이 잊었고 IDE 사용도 처음입니다. 위의 추천 대상 독자에는 부족한 독자였어요^^;; 그래서 술술 읽히지는 않았습니다. 집중하여 읽었습니다.  

이미 다른 프로그래밍 언어 사용자들께서는 어렵지 않을 것 같습니다.

 

p3_560.jpg

 

아래 사진과 같은 배치로 코딩 예와 자세히 설명되어 있고,  중간에 NOTE나 TIP들도 있습니다.

la2_800.jpg

 

Chapter1은 Go 개발환경 관련 내용인데, 윈도우 환경에서 설치 안내가 아니라서 (리눅스환경인 것 같아요) 설치관련은 인터넷에서 golang을 검색하여 설치관련 글들을 보고 GO언어와 비쥬얼스튜디오코드를 설치하여 연습해보았습니다. 

 

CH1_560.jpg

 

 

Chapter4 내용에서, 같은 이름의 변수는 어디서나 같은 값이라고 생각하고 있었는데, Go에서는 함수, 제어문 밖에서 선언된 변수와 같은 변수이름으로 함수, 제어문 안에서 선언되어도 사용이 되고 제어문 끝나면 사라져서 함수, 제어문 밖의 변수의 값에 영향이 없는 것인 새도잉 변수가 신기했습니다.

 

CH41_560.jpg

 

각 Chapter마다 자세히 설명되어 있고 책 뒤로 갈수록 깊이 있는 내용들입니다. 이미 다른 프로그래밍 언어를 이미 사용하고 계신 분들은 읽으시면 어렵지 않게 GO언어의 기본에서 고급 내용까지 볼 수 있는 책인 것 같습니다.

 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공 받아 작성된 서평입니다."

한빛미디어에서 제공받는 책으로 해당 리뷰를 작성하였습니다.

책표지

TL;DR

  1. Go언어에 관심있다면 이 책을 가장 추천한다. 이전에 읽었던 책을 모두 포함해서 이 책 정도면 Go언어를 실무에서 사용할 수 있는 최소한의 수준은 커버.
    • 참고로 저는 이 책 이후에 “밑바닥부터 만드는 컴파일러 in Go”와 “Gin“에 도전해볼 생각인데, 다른 좋은 의견 있으시면 언제든 연락주세요!
  2. 설치 관련해서는 구글이나 네이버에서 별도의 검색할 필요없이 교재에 나와있는 방법을 활용하면 됨.
    • 이 책을 함께 읽었던 분들 중 대부분이 윈도우 사용자라서 제가 개인적으로 설치 방법을 따로 정리해둔 것이 있으니 필요하시면 참고하시고, macOS의 경우 brew를 사용해서 설치하시길 권장합니다.
  3. Go가 처음이라면 VSCode와 플러그인(Go with Go Team at Google)을 함께 사용하길 권하며, Jetbrains의 GoLand를 사용하신다면 IDE 관련해서 설정 등과 같은 것들에 관한 내용은 GoLand 사용법을 꼭 참고해서 진행하시길 권장함.

  4. 저는 기존에 Go와 문법 구조와 철학이 유사한 언어를 알고 있어서 Ch1 -> Ch5 -> Ch13 -> Ch7 -> Ch8 -> Ch9 순서로 공부를 진행했고, 나머지는 순서대로 진행하였음

1

올해는 Go언어를 배워보기로 결정하고, 몇가지 사전 조사를 끝내고 [Golang tutorial series](https://golangbot.com/learn-golang-series/)을 하나씩 진행하고 있었다. 언어가 영어라서 알듯 모를듯한 내용을 뒤로 천천히 하고 있다가 3월에 한빛미디어에서 진행하는 리뷰 목록 중에서 러닝 Go책이 있어서 냅다 신청했다.

왜냐하면 Go 1.18 버전에 업데이트 되는 제네릭(generic)에 관한 내용이 책에 포함되어 있어서 내가 원하는 내용 뿐만 아니라 기존에 영어 때문에 알듯 모를듯한 내용도 바로잡기 위해서 냅다 신청했다.

만약 Go언어에 관심있다면 이 책을 가장 추천한다. 이 책 정도면 Go언어를 실무에서 사용할 수 있는 최소한의 수준으로 충분하다고 생각한다. 기존에 출판된 Go책도 몇권 봤지만, 언어 명세가 변경되었기 때문에 이왕이면 변경된 명세가 반영된 책을 참고하시길 권한다.

책의 특성상 문법 위주로 설명하고 있지만, 세부적으로 살펴보면 적당한 난이도가 있는 예제를 중심으로 진행하고 있다.

2

책의 구성상 처음부터 천천히 읽어보셔도 좋지만, 만약 기존에 언어를 사용하고 계시거나 1~2개 정도 언어를 알고 계시면 목차를 참고하시고 기초적인 변수/제어문 정도는 건너띄고 읽으셔도 큰 불편함은 없을 듯 하다. 왜냐하면 책이 앞서 소개한 개념이나 내용을 계속해서 가볍게 언급하고 있어서 필요할 때 참고하시면 좋을 듯 하다.

구성

학습을 진행할 때 약간의 불편함이 있는데, 1) 설치와 관련된 문제와 2) 예제 실습을 위해서 Makefile를 사용한다는 점이다.

1) 설치의 경우 기존에 구글이나 네이버에서 설치 관련된 내용을 별도로 검색하지 마시고 교재에서 안내된 것으로 진행해도 충분하다. 윈도우에서 사용하는 Go 1.18의 경우 필요한 환경 설정은 대부분 자동으로 진행되기 때문에 특별히 새롭게 설정해야 되는 점은 없다.

2) 예제 실습을 위해서 Makefile을 사용하길 권장하는데, 대부분의 경우 VSCode에서 해결된다. 그리고 이 책에 있는 80% 이상의 예제를 실행하면서 Makefile 때문에 문제가 발생한 적은 없으니 너무 걱정하지 않아도 된다.

마지막으로 github에 공개된 예제가 하나의 저장소가 아니라 여러 저장소에 나눠져있기 때문에 예제를 활용할 때 github의 learning-go-book 계정에서 필요한 예제를 clone 해서 사용해야 한다는 점은 미리 알아두면 좋을 듯 싶다.

3

저는 기존에 Go와 문법 구조와 철학이 유사한 언어를 알고 있어서 Ch1 -> Ch5 -> Ch13 -> Ch7 -> Ch8 -> Ch9 순서로 공부를 진행했고, 나머지는 순서대로 진행했다. 테스트 방법을 먼저 학습하고 나머지 챕터는 책을 읽으면서 어설프지만 나름대로 테스트 코드를 작성해서 진행하였다. 이렇게 공부하는데 귀찮긴 하지만 언어에서 제공하는 구문을 효율적으로 학습할 수 있다고 생각해서 개인적으로 생각하는 방법 중 하나다.

Go언어를 처음 접하신다면 순서대로 진행하시길 권하며, 다른 언어에 대한 사용 경험이 있으시면 자신만의 Path를 만들어서 진행하셔도 좋다.

저는 Go에 관심이 많고, 리뷰를 위해서 책을 다 읽었기 때문에(이것이 리뷰 이벤트에 참여하는 중요한 이유!) “밑바닥부터 만드는 컴파일러 in Go”와 “Gin“에 도전해볼 생각이다. Go를 좀 더 잘 활용하고 싶어서 선택했고, Gin은 초보자에게 적합하다는 풍문을 믿고 진행하기로 했다.

P.S : Go를 쉽고 재미있게 접할 수 있기를 기원하며, 문법 이후에 대해서 새로운 아이디어가 있으시면 언제든 연락주시면 반영해서 해당 문서를 업데이트 할 수 있도록 하겠습니다.

 

 


[도서 소개]

뚝딱거리지 않고 원래 Go 언어 개발자였던 것처럼 자연스럽게 코드 작성하기


Go 언어는 웹 서비스 개발자가 선호하는 언어로 빠르게 자리 잡고 있다. 다른 프로그래밍 언어로 개발한 경험이 있는 개발자들에게 Go 언어의 문법을 알려주는 튜토리얼은 많지만, 그것만으로는 부족하다. 이 책은 Go 언어를 이용해 명확하고 관용적으로 개발할 수 있도록 기초 지식을 전달하는 실용적인 가이드다. 개발 숙련도와는 상관없이 누구나 Go 언어 개발자처럼 생각할 수 있다. 더 나아가 경험이 풍부한 Go 개발자들이 채용한 디자인 패턴과 선택한 이유를 소개한다. 웹 서비스 관련 프로젝트에서 많이 활용되는 만큼, 견고한 웹 서비스를 제공하고 확장이 쉬운 코드로 개발하고 싶다면 Go 언어로 시작해보자.


[대상 독자]

이 책은 Go를 새롭게 시작하는 사람들에게 초점이 맞춰져 있다. Go 언어의 마스코트가 귀엽다는 것만 알고 있는 사람부터 이미 Go 튜토리얼을 수행했거나 Go로 코드를 어느 정도 개발해본 사람까지도 볼 수 있다. 단순하게 프로그램 작성법을 알려주는 것이 아니라 관용적인 방식으로 Go 코드를 작성하는 방법을 알려준다. 경험이 좀 더 많은 Go 언어 개발자라면 새롭게 추가된 기능들을 가장 잘 사용하는 방법에 대한 조언을 얻을 수 있다.


[주요 내용]

-  관용적 코드 사용법과 프로젝트 설계 배우기

- Go 언어의 효율적인 작동 원리 알아보기

- 사용자를 위한 개발 환경 구축하기

- 고급 레벨 사용자를 위한 reflect, unsafe, cgo 기능 이해하기

- Go 언어의 새로운 기능인 제네릭 살펴보기 


[예제 코드]

추가 자료(예제 코드, 연습문제 등) http://github.com/learning-go-book 에서 다운로드 할 수 있다.


[서평]


이 책은 Go 언어의 기초부터 깊이 있는 내용까지 폭넓게 다루고 있다. 기본적인 개발 경험이 있으면서 Go 언어를 새롭게 배우고 싶다면 바로 이 책을 펼칠 타이밍이다. 저자의 다양한 경험을 통해 다른 언어와 차이점을 명확히 구분하고, Go 언어만의 매력을 느낄 수 있도록 구성되어 있다. 또한 실행할 수 있는 예제를 통해 Go 언어에 있는 다양한 특성을 이해시키고 확장 가능한 코드를 작성하는 좋은 방법을 제시한다.


이책은 총 15챕트로 되어 있다.  1장은 Go 개발 환경 설정으로 Go 개발 환경은 어떻게 구성하고, Go 프로그램을 빌드하고 코드 품질을 확인 하는 도구들을 소개하고 있다. 2장에서는 내장 타입의 사용, 변수를 선언하고 할당 및 연산자에 대해서 배우게 된다. 3장에서는 Go에서 사용하는 컨테이너 타입에 대해서 배우고, 구조체를 통해 자신만의 복합타입을 만드는 방법에 대해서 다루고 있다. 4장에서는 블록, 섀도잉, 제어 구조에 대해 배우고, 5장 함수에서 Go의 함수와 다른 언어의 함수들과 어떻게 다른지 장단점에 대해서 배우게 된다. 6장에서는 포인터가 무엇인지, 어떻게 사용하는지에 대해서 다루고 있다. 7장에서는 타입, 메서드, 인터페이스 및 모범 사례를 다루고 있다.  8장에서는 Go의 오류가 무엇이고 정의하는 방법과 확인하는 방법에 관해 학습한다. 그리고 panic와 recover에 대해서도 배우게 된다. 9장에서는 코드를 구성하는 방법과 Go소스 코드의 에코 시스템과 상호작용하는 방법을 배운다. 모듈 동작 방법, 패키지 내에 코드 구성방법, 서드-파티 모듈 사용법 그리고 자신의 모듈을 배포하는 방법을 알아본다. 10장에서는 동시성과 전통적인 동시성 메커니즘 보다 더 단순한 Go의 접근을 배운다.  11장에서는 표준 라이브러리에서 가장 일반적으로 사용되는 패키지 몇가지를 살펴보고 코드에서 에뮬레이트되는 모범 사례를 구현하는 방법을 본다. 12장에서는 컨텍스트를 사용하여 요청 메타 데이터를 관리하는 방법을 배운다. 타임아웃 설정, 명시적 취소 수행, 컨텍스트를 통한 값 전달 및 이런 것들을 각각 써야할 시점에 대해 알아본다. 13장에서는 테스트 작성과 테스팅, 코드 커버리지, 벤치마킹 및 데이터 경쟁 확인을 위한 Go의 내장 지원을 사용하여 코드 품질을 높이는 방법에 대해 배운다. 14장에서는 리플렉션, unsafe 및 cgo를 다루고 이런 기능은 Go를 지루하게 만드는 타입-안전하고 메모리 안전한 언어에서 규칙을 깰 수 있도록 하기 때문에 Go에서 가장 흥미로운 부분이다. 더 중요하게 규칙을 깨기 원하는 이유와 대부분은 이렇게 하는 것을 피해야하는 이유에 대해서 배우게 된다. 마지막 15장에서는 제네릭에 대해 살펴보고 문제를 해결하기 위해 Go를 사용하는 방법을 변경하는 경우를 살펴본다. 구현은 아직 배포되지 않았으므로 추가적인 변화의 가능성은 여전히 있지만 그런 변경은 최소화될 것이다.


이책의 서문을 보면 ‘제대로 작성된 Go는 지루하다, 잘 작성된 Go프로그램은 간단하고 때로는 반복적인 경향이 있다’라고 적혀 있다. 이것은 Go뿐만 아니라 모든 언어에서도 마찬가지 일것이다. 더 좋은 코드, 더 좋은 소프트웨어를 만들려면 많은 노력이 필요하다. 관용적 Go는 시간이 흐르고 팀이 바뀌더라도 코드를 유지보수하기 쉽게 만드는 도구, 관행 및 패턴의 집합이다. 성능, 새로운 기능 혹은 간결한 구문을 강조하는 Go는 앞으로의 소프트웨어 개발에 대한 Go만의 최고의 장점이 될것이라 생각한다.

 

 "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."



 

 

'뚝딱거리지 않고 원래 Go 언어 개발자였던 것처럼 자연스럽게 코드 작성하기' 책의 뒷표지에 적혀있는 문구이다. 처음에는 java나 python처럼 엄청 간단하게 익힐 수 있을 것 같았는데... 책을 보다보니 또 그렇지는 않았다. 뚝딱거리지 않으려고 했는데 뚝딱거린 시작이었다.

 

가장 헷갈렸던 부분은 신기하게도 Go의 경우 사용하지 않는 변수가 있으면 에러가 발생한다. 자바나 파이썬에서는 사용하지 않더라도 IDE에서 Warning을 줄 뿐이지만 Go는 애초에 사용하지 않는 변수는 오류가 발생한다는 사실을 알았다. 어찌보면 실수를 안하니 좋을지도...

									package mainimport "fmt"func main() {	var sa = `test` // error 발생, 사용하지 않는 변수	// fmt.Println(sa)}
								
 

다른 언어들과의 다른 특징중 하나는 다중 반환값을 허용한다는 것이다. 이 부분은 너무 신기했다. 자바에서 다중으로 받으려면 Map, Pair, Turple 등을 이용해서 상황에 맞게 받을 수 있게 만들었던것 같은데 언어 자체가 다중 반환을 지원해준다니 너무나 감사할 따름이다.

									func divAndRemainder(numerator int, denominator int) (int, int, error) {    if denominator == 0 {        return 0, 0, error.New("cannot divide by zero")    }    return numerator / denominator, numerator % denominator, nil}
								
 

러닝 Go 책을 차근차근 따라가다보니 뚝딱거림이 줄어드는게 느껴졌다. 문법적인 부분도 설명해주지만 Go라는 언어에 대해서 왜 그렇게 만들었는지 등에 대한 내용을 자세히 설명해주고 있어서 도움이 많이 되었다.


챕터6에 도달하니 포인터가 나왔다. C/C++ 공부할 때 이후로 포인터를 보는 것은 오랜만이다. 자바에 익숙해져있다보니 포인터를 잊고 살았는데 주마등처럼 스쳐가는 포인터에 대한 두려움..

 

Go에서도 포인터를 사용한다. 포인터 구문 중 일부는 C와 C++에서 차용했다. 다만 Go는 가바지 컬렉터를 가지고 있기 때문에..(좋은 건 다 가지고 있네!) 메모리 관리에 대한 고통이 없다고 한다. 책을 읽으면 읽을 수록 Go라는 언어에 빠져드는 기분이 들었다.

 

C와 C++에서 포인터에 대한 설명이 책 하나로 나올정도로 정리된 내용을 본적이 있다. 그만큼 이해하기가 어려운 부분이었는데 책에서는 그림을 통해 조금 더 쉽게 설명하려는 노력을 해주고 있다. 포인터를 원래 이해하고 있어서 인지 설명을 잘해서인지는 모르겠지만 그림만 보고 이해를 쉽게 할 수 있었다.

 

챕터6을 지나면 챕터 10의 동시성과 11의 표준 라이브러리 등에 대한 내용들을 익힐 수 있다. 책을 보면서 들었던 생각은 이 책은 사소한 부분도 놓치지 않고 신경쓰면서 챙겨주는 책이라는 것이었다. 언어를 처음 배우는 사람에게 누구보다 상세하게 알려주는 선생님 같은 느낌. 누군가 Go를 배워보고 싶다고 한다면 나는 이 책을 추천하고 싶다.



총평

Go 를 처음 배우는 사람에게 정말로 추천하고 싶은 책!

전반적으로 상세한 설명을 가지고 있는 책!

책을 따라가다보면 어느순간 뚝딱거리지 않게 되는 책!

 

한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.



"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

 

러닝 Go

한빛미디어의 "러닝 Go"를 리뷰하게 되었습니다.

 

 

러닝 Go

개발 숙련도와는 상관없이 누구나 Go 언어 개발자처럼 생각할 수 있다. 더 나아가 경험이 풍부한 Go 개발자들이 채용한 디자인 패턴과 선택한 이유를 소개한다. Go 언어를 이용해 명확하고 관용적

www.hanbit.co.kr

 

Go 언어
Go 마스코트

아시는 분들은 아시다시피 Go 언어는 귀여운 마스코트가 있는 프로그래밍 언어입니다.

Java, C, Python 등 많은 프로그래밍 언어 중 비교적 최근에 Google에서 개발했습니다.

Go 언어의 특징으로는 빠른 속도, 동시성 제어, 간결한 문법 등이 있습니다.

다른 프로그래밍 언어들처럼 활발한 커뮤니티가 아직 형성되어 있지는 않지만 분명히 매력적인 언어임에는 분명하다고 생각합니다.

 

책 소개

책은 15개의 챕터로 구성되어 있으며 타입, 함수, 포인터 등 기초적인 개념과 고루틴, 테스트 방법 등 Go 언어의 기초부터 심화까지 담겨있는 책입니다.

코드의 예제는 저자님의 Github에서 참고할 수 있습니다.

 

개념에 대한 설명과 따라치는 예제로 Go 언어의 생태계를 익힐 수 있으며 Tip과 Note로 제공되는 팁 또한 제공합니다.

 

챕터 소개
  1.  Go 개발 환경 설정
  2. 기본 데이터 타입과 선언
  3. 복합 타입
  4. 블록, 섀도, 제어 구조
  5. 함수
  6. 포인터
  7. 타입, 메서드, 인터페이스
  8. 오류
  9. 모듈, 패키지 그리고 임포트
  10. Go의 동시성
  11. 표준 라이브러리
  12. 컨텍스트
  13. 테스트 작성
  14. Reflect, Unsafe, Cgo
  15. Go의 제네릭

 

마무리

Go 언어는 분명 아직 우리나라에서는 수요가 적은 만큼 주력으로 삼기는 힘들다고 생각합니다.

파이썬의 Django, Java의 Spring 등 대표적인 프레임워크가 있다고 보기 힘들고, 거의 없다시피 한 한국 커뮤니티가 커다란 진입장벽이죠.

 

하지만 해외에서는 Google, 넷플릭스, Youtube 등 대기업에서 많이 사용되며 국내에서도 카카오, 라인, 쿠팡, 우아한 형제들 등 다들 아시는 기업에서도 도입되고 있습니다.

 

Go는 러닝 커브가 완만한 특징이 있어 이미 C언어나 Java 등 다른 프로그래밍 언어를 배웠다면 쉽게 익힐 수 있고, 처음 프로그래밍 언어를 공부하려는 분들도 비교적 쉽게 접근할 수 있습니다.

 

저 또한 다음 프로젝트 때 Go를 함께 사용할 것이라 조금씩 공부하면서 매우 큰 도움이 되고 있습니다. 책이 부담스럽게 두꺼운 편도 아니고 Go의 핵심까지 예제를 따라 하며 쉽게 배울 수 있기 때문에 Go를 배우고 싶으신 분이 있다면 입문서로 추천드립니다. 

이 책을 읽으면서 소설같은 C#이었나 그 책을 본 거 같다.

그러니까 실습보다는 기본을 설명해주는 책에 가깝다고 느꼈다. 그렇다고 기초만 다뤄요! 이건 아니다.

 

대상 독자는 이미 주 언어가 있고 서브를 찾는 사람이다.

사실 조금 헷갈려서 1장부터 go를 설치해야 하나? IDE 설치해야 하나? 해서 VM 을 실행해서 go를 설치하고 책에서 추천하는 IDE 중 Visual Studio Code 를 설치했다. 그런데 go 플레이그라운드 로도 충분히 할 수 있는 거 같아서 굳이 설치를 하지 않아도 됐던 거 같다. 하지만 로컬에 설치하면 저장이 가능하다는 장점이 있다.

 

 

예전에 다른 Go 책을 본 적이 있는데 그 책은 좀 더 실습을 많이 포함된 느낌이 좀 더 있어서 개인적으로는 두 책을 같이 보면 시너지 효과를 보지 않을까 생각한다.

언제나 느끼지만 한 권으로 완벽한 책은 없던 거 같다.



[개요]

 

내용의 정확성과

저자의 간결한 서술 방식에 대해서

해외에서 칭찬이 자자한 책이다.

 

Go 언어 입문서임에도 불구하고

Go 언어만의 독특한 관용법을

자세하게 소개한다.

 

얇지만 충분한 깊이를 가지고 있는 책이다.

 

 

[독자]

 

다른 언어로 프로그래밍을 해본

경험이 있는 독자를 위한 책이다.

 

프로그래밍 입문자가 보기에는

내용이 꽤 어렵다.

 

Go 언어를 새로 익히려는

개발자를 위하여

 

다른 언어와는 다른

Go 언어만의 심층적인 특징을

담고 있는 책이라고

보는 편이 정확하겠다.

 

굳이 왕초보로서 첫 프로그래밍을

Go 언어로 입문하고 싶다면,

<Head First Go> 번역판을

함께 보는 것을 추천한다.

 

메모리 포인터를 다루는 언어에

그다지 익숙하지 않다면

공식 온라인 튜토리얼인 <Tour of Go>를

미리 해보는 것도 괜찮겠다.

 

<Tour of Go>

영문 : https://go.dev/tour/list

한글 : https://go-tour-ko.appspot.com/welcome/1

 

 

[번역]

 

사실 번역이 아주 좋다고는 못하겠다.

 

전직 Go 언어 매니아로서,

책을 읽다가 부분 부분

머릿속에서 물음표가 켜지는 문장들이 있어서

원서와 대조해가며 읽었는데

 

문장의 주어가 생략되어 뜻이 바뀌거나

저자가 강조하는 내용이

잘 표현되지 않는 등의 아쉬운 점도

심심치 않게 눈에 띈다.

 

뒤로 갈수록 초급서라기보다는

중급서에 가깝기에 문장 하나하나의

정확한 해석과 뉘앙스가 중요한데

그 부분은 약간 아쉽다.

 

 

[결론]

 

기존에 다른 프로그래밍 언어에 익숙한 개발자가

새롭게 Go 언어를 익히기 위해 읽는다면

아주 좋은 도서이다.

 

오라일리 출판사의 러닝~ 시리즈 답게

내용도 짧지만 자세하게 소개하고 있다.

 

이 책의 강점은 간결한 구성이다. 

 

어느덧 국내에서

널리 알려진 지도 5년이 넘은

Go 언어의 특징과 최근의 변화점을

대부분 담고 있다

 

Go 언어는 간단하고 편리하게 코딩할 수 있는

동시성 지원이 최강점이라고 보는데,

이 내용도 잘 설명되어있다. 

 

마지막 단계에서 리플렉션과 제네릭을

소개해준 부분이 특히 좋았다.

 

 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

 

Python 언어로 개발을 하는 분들이라면 Pythonic 이라는 표현을 들어봤을 것입니다. 파이써닉, 말 그대로 파이썬스럽다는 의미로 파이썬 답게 코드를 작성하는 것을 장려하는 표현입니다. 일반적으로 프로그래밍 언어는 언어가 만들어 질 때 해당 언어가 가지는 특성과 개발 목표에 맞게 의도한 사용 패턴이나 권장 작성 스타일을 갖게 되는데, 해결해야 하는 문제 혹은 목표에 적합한 언어를 선택하고 적합한 방법으로 코드를 작성하는 개발 과정에 있어 언어에 맞는 스타일, 사용 방식으로 코드를 작성하는 것은 무척 중요하다고 할 수 있겠습니다.

 

문법을 나열하는 보통의 프로그래밍 언어 서적과는 달리 이 책은 "Go 개발자처럼 생각하는 방법"이라는 부제처럼, 서론의 표현을 빌리자면 Go 언어를 이용해 확장이 용이한 관용적인 코드를 작성할 수 있는 방법에 포커스를 맞추고 있습니다. 조금 더 직설적으로 표현하자면 Go 언어를 Go 언어 답게 사용하는 방법을 가장 중요하게 다루고 있습니다. 이 책은 처음 프로그래밍 언어를 배우는 분을 위한 책은 아니며, 이미 다른 프로그래밍 언어에 경험이 있는 분들을 대상으로 기존 다른 언어들과의 차이점을 기반으로 Go 언어를 Go 스럽지 않게 사용하는 실수를 범하지 않도록 사용하는 방법을 설명하고 있습니다.

 

개발 환경의 셋팅 부터 Go 언어 문법과 기능, 기존 언어와의 차이 등 Go 언어를 처음 배우는 분들 부터 Go 언어를 좀 더 깊이 배우고 싶은 분들 모두 만족스러워 할 내용으로 꼼꼼하게 채워져 있으며 번역도 만족스럽습니다. Go 언어에 관심이 있는 분, 특히 Go 언어를 Go 언어 답게 사용하는 방법에 관심이 있는 분에게 추천 드립니다.

 

한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.

 

* 대상독자

메인 개발언어를 익힌상태에서 추가로 개발언어를 학습하고자 하는사람에게 추천하는 도서이다.

이 책에서는 개발자들이 흔히 사용하는 버전 관리나 IDE를 사용해본 경험을 있다고 가정하며,

동시성이나 추상화 같은 컴퓨터 과학 개념에 익숙해야 이 책에서 설명하는 Go의 동작방식을 쉽게 이해할 수 잇다고 설명되어있다.

이 책을 보면 대상독자에서 나와있듯이 "이 책은 두 번째 개발 언어를 찾는 개발자에게 추천하고 싶다" 라고 나와있듯이

기본적인 반복분, 산술연산자 등의 개발문법에대해서는 설명되어있지 않으며 Go에서 새롭게 생긴 연산자, 문법, 타입 등의 내용이

기술되어있으니 참고할 필요가 있다.

개인적으로는 파이썬, C를했었다면 Go 역시 쉽게 익힐 수 있을거라 생각이 든다.

최근 새로운 언어 중 아주 매리트 있는 언어로 기대되면서 도커와같이 엄청난 프로그램을 만들어내면서 많은이들에게 주목받게 되었다.

나도 Go에대해서 공부한적이 없어 Go의 기본지식도 모른상태에서 이 책을보았을때의 느낌을 적어보도록 하겠다.

* 이 책의 좋은점중 하나.

섹션별로 틈틈이 Tip, Warning, Notice가있어 저자의 팁이나 상황별 도움이될만한 경험적 이야기가있어 학습하는데 도움이 될만한 요소들이 있다.

그리고 각주도 들어가 있어 단어별 각주를 참고하여 더 자세한 내용을 찾아볼 수 있게 도와주고 있다.

다른 기술서적과 동일하게 목차역시 처음엔 기본적인 내용부터

뒤로갈수록 점차 심화된 내용이나오게되어 Go에대해 아무것도모르는 나역시 점차 난이도를 높여가면서

익히기에 무리가 없었다.

* 예제코드

각 챕터별 예시된 코드들은 아래의 링크에서 찾아볼 수 있다.

https://github.com/learning-go-book 

그리고 아래 Go 개발사이트 Go 플레이그라운드를 연결한 예제코드를 실행할 수 있게 각주로 간략URL을 적어놔서

해당자료를 보기위해 긴 URL주소를 입력하지 않아도되어 매우 간편하게 참고사이트를 찾아볼 수 있게 해주었다.

https://go.dev/play/

총평.

Go에대해 아무것도 모르는 상태에서 이 책을 보더라도

어렵지않게 새로운 언어를 습득할 수 있도록 기술서적에 맞게 독자가 쉽게 학습할 수 있도록

잘 짜여진 책이라 볼 수 있을것 같다.

귓동냥으롤 듣기만했던 Go언어를 이렇게 배워볼 수 있는 기회가생겨 매우 좋았다.

요즘 영상으로 강의를 듣는사람이 분명 많을텐데 영상으로 학습하는것과는 확실히 차이점이 있는것 같다.

영상으로 강의를 보며 학습하는것도 좋지만 아직까지는 책을통해서만 학습할 수 있는 영역이 있을뿐더러

학습하는 방법에따라 책을 통해서 학습하는게 더 빠르게 학습할 수 있다고 생각한다.

Go를 첨 접해보는 개발자에게 충분히 추천해줄만한 도서라 생각한다.

기존의 프로그래밍 언어 연구의 성과와 절차를 무시했다는 혹평을 받기도 하는 Go 언어

 

구글의 명성에 힘입어 입지를 굳혔다고 악평을 하는 이도 적지 않지만, 순전히 개발자와 현장의 필요에 의해서 만들어진 혁신이 개발 생태계에 파란을 일으키면서 혁명으로 이어진 사례로 기록되며 프로그래밍 언어의 새로운 발전 방향을 제시한 것은 큰 성과라고 볼 수 있다

 

 

인프라 시스템 재구축과 같이 코드가 방대해져 유지 관리가 힘들어지는 경우를 중심으로 Go 언어의 사용빈도가 높아지고 있다

 

쉽고 간편하게 확장성 있는 시스템 구축이 가능한 Go 언어의 특성상 앞으로는 클라우드 환경에서 활용도가 높아질 것으로 예측된다

 

 

이 책은 단순하기 Go 기초만을 배우는 책이 아니다 Go 언어를 좀더 Go스럽게 명확하고 관용적으로 개발 할 수 있도록 기초 지식을 전달하는 실용적인 가이드이다

 

기존의 언어를 사용하던 개발방식을 탈피하고 Go스럽게 생각하며 개발해보고 싶은 개발자들에게 추천해본다

결제하기
• 문화비 소득공제 가능
• 배송료 : 2,000원배송료란?

배송료 안내

  • 20,000원 이상 구매시 도서 배송 무료
  • 브론즈, 실버, 골드회원이 주문하신 경우 무료배송

무료배송 상품을 포함하여 주문하신 경우에는 구매금액에 관계없이 무료로 배송해 드립니다.

닫기

리뷰쓰기

닫기
* 도서명 :
러닝 Go
* 제목 :
* 별점평가
* 내용 :

* 리뷰 작성시 유의사항

글이나 이미지/사진 저작권 등 다른 사람의 권리를 침해하거나 명예를 훼손하는 게시물은 이용약관 및 관련법률에 의해 제재를 받을 수 있습니다.

1. 특히 뉴스/언론사 기사를 전문 또는 부분적으로 '허락없이' 갖고 와서는 안됩니다 (출처를 밝히는 경우에도 안됨).
2. 저작권자의 허락을 받지 않은 콘텐츠의 무단 사용은 저작권자의 권리를 침해하는 행위로, 이에 대한 법적 책임을 지게 될 수 있습니다.

오탈자 등록

닫기
* 도서명 :
러닝 Go
* 구분 :
* 상품 버전
종이책 PDF ePub
* 페이지 :
* 위치정보 :
* 내용 :

도서 인증

닫기
도서명*
러닝 Go
구입처*
구입일*
부가기호*
부가기호 안내

* 온라인 또는 오프라인 서점에서 구입한 도서를 인증하면 마일리지 500점을 드립니다.

* 도서인증은 일 3권, 월 10권, 년 50권으로 제한되며 절판도서, eBook 등 일부 도서는 인증이 제한됩니다.

* 구입하지 않고, 허위로 도서 인증을 한 것으로 판단되면 웹사이트 이용이 제한될 수 있습니다.

닫기

해당 상품을 장바구니에 담았습니다.이미 장바구니에 추가된 상품입니다.
장바구니로 이동하시겠습니까?

자료실