moo***
2022-03-30

개발 숙련도와는 상관없이 누구나 Go 언어 개발자처럼 생각할 수 있다. 더 나아가 경험이 풍부한 Go 개발자들이 채용한 디자인 패턴과 선택한 이유를 소개한다. Go 언어를 이용해 명확하고 관용적으로 개발할 수 있도록 기초 지식을 전달하는 실용적인 가이드다.
몇 년 전에 #Go 언어를 도입하려고 계획을 세웠던 적이 있었습니다. 팀 내부에서 세미나를 참석해서 청강하기도 했었는데, 다른 일이 급한 나머지 스터디를 중단하고 말았습니다. 이번에는 "Learning Go"라는 책을 손 안에 넣기도 했거니와 그 때 만족스럽지 못했던 부분을 보충하기 위해서라도 마음을 한번 굳게 먹고 책을 읽기 시작했습니다.
Go 언어에 대해서 저자는 지루하다라는 말로 시작합니다. 언어가 직관적이고 반복이 되는 느낌이 들어서 그런 표현을 한 것 같습니다. 이러한 점으로 인해 Go 언어는 수십명이 수정하거나 오랫동안 유지되는 프로그램을 구축하기 위한 곳에서 강점을 발휘하게 될 것 같습니다. 개인적으로는 타입을 명명하는 방법이 타언어와는 달리 변수명 뒤에 오는 형태로, 타입스크립트와 유사하게 사용한다는 점이 신선하게 다가왔습니다. 유닛테스트나 문서화 기능이 기본툴로 제공되어서, 다른 언어에서는 이러한 기능을 하기 위해서는 환경 구축부터 따로 해야 하는 점과 대비해서 굉장히 편하게 접근할 수 있게 되어 있습니다.
이 책은 Go 언어로 개발하기 위한 환경 구축을 하고 이 언어를 사용하기 위한 방법을 알려주는 책입니다. 또한 관용적인 사용법을 알려주는 책이라고 저자가 표현을 했습니다, 이것에 대해 컨텍스트나 고루틴과 같은 Go 언어만의 특징의 사용법을 알려주는 것을 의미한다고 나름대로 받아들였습니다. 자연스럽게 책의 구성도 개발 환경 구축부터 시작해서, 언어에 대한 명세로 이어지고 표준라이브러리, 컨텍스트, 리플렉션, 제네릭 등의 개념을 설명하는 흐름으로 되어 있습니다.
#컨텍스트 개념을 다룰 때 http 기반의 기능을 예로 들어서 다루고 있습니다. 요즘 이러한 도메인의 프로그램이 많이 필요로 하고, Go 언어도 이 영역에 많이 사용될 수 있음에도 불구하고 설명이 간략하게 되어서 이해가 쉽지 않았습니다. 구체적인 예제 프로그램을 작성해가면서 설명하는 방식을 채택했다면 좀 더 쉽게 와닿지 않았을까하는 아쉬운 생각이 들었습니다. #리플렉션은 낯설기도 하고 감이 잘 오지 않는 부분이기도 했습니다. 이 개념을 좀 더 자세히 다뤄주는 책이나 자료를 소개를 해줬으면 하는 바람이 생기기도 했습니다.
Go의 동시성을 다루는 부분은 즐겁게 읽을 수 있습니다. 스레드나 콜백을 이용한 비동기 처리와는 또다른 #고루틴과 #채널을 통해서 좀 더 직관적으로 병렬처리할 수 있는 방법을 Go언어에서 지원하고 있습니다. 여러가지 경우에 대해서 고루틴의 예제를 들고 있어서 이해하기가 편하고 흥미로움을 줍니다.