티스토리 뷰

반응형

Go언어에 대한 관심은 언제부터였을까?

k8s 오픈소스(Operator 등)를 뒤적거리다보면 대부분 Go언어로 구성되어 있는 것을 볼 수 있다.
나 또한 k8s 생태계의 개발자로서 자연스럽게 Go언어에 어떤 특징들이 있고, 왜 사용하는지 등에 대한 궁금증들이 생겨났다.

근데 궁금증으로 쉽게 공부할 수 있는 것은 아니다. 현재 업무에서 사용하고 있는 언어가 아닌게 제일 컸다.
또한, 아직 역사가 그리 오래되지 않은 언어로 배우는 로드맵이 있다던지, 자료가 엄청 방대한다던지, 나아가 나에게 궁금증 이상의 동기부여가 부족했다.

궁금증으로 일단 udemy 강의를 사서 쭉 들었던 경험은 있는데, 그 이상 나아가지 않아 얼마가지 않아 다 까먹어버렸다. 최근에 와서야 갑작스레 호기심이 생겼다. Java/Spring에 질려서 그런 것일까...

어떻게 공부를 해볼까 고민하던 차 내가 익숙한 웹 서버 애플리케이션을 만들어보면 현재 숙련된 언어/프레임워크와 비교해보며 더 확실히 배울 수 있을 것 같아 "Go 언어로 배우는 웹 애플리케이션 개발" 책을 선택했다.

 

 

내용

책의 대상은 기본적으로 Go 언어와 그 문법을 아는 사람을 대상으로 한다. 책에서도 대상 독자가 "Go 중급자가 되길 원하는 사람"로 나와있다.

  • 즉, 책에서는 Go언어의 문법을 다루지 않는다. 그러므로 Go 언어를 하나도 모르는 사람이라면 언어를 먼저 익힌 뒤 읽어보는 것을 추천한다.
    • 적어도 defer/panic/goroutine/channel 등은 알고 있어야 한다.
  • 앞서 이야기했듯 나는 오랜만에 다시 보던 것이라 다 까먹은 상황이었는데, Learn Go with Tests를 한번 쓱 훑고 보니 볼 만했다.

 

책은 전반부와 후반부를 나눠 이야기 해볼 수 있을 것 같다.

 

 

전반부 (1~12 Chapter)

웹 애플리케이션 개발을 위한 Go언어에 대한 이해

  • 전반부는 웹 애플리케이션을 개발하기 위한 Go언어의 기능들을 살펴본다.

 

요청 처리 등에서 필수적으로 다뤄봐야 하는/이해가 있어야 하는 Context package, 데이터베이스 기능을 담고 있는 database/sql package 등 기본적으로 제공되는 package들에 대해 알아본다.

그리고 웹 애플리케이션 개발에 있어 다른 언어/프레임워크에서도 필수적인 기능들

  • Module/Interface/익명함수 (Go언어 특징이지만, 비슷하게 제공되는)
  • Error Handling
  • Environment variables
  • DIP
  • Middleware pattern
    에 대한 설명도 나온다.

 

전반부에 대해서 처음부터 너무 심도읽을 필요는 없다고 본다.

  • 왜냐면 이 책의 중심은 후반부에 있는 실습이기 때문. 전반부에만 너무 매달리게 되면 재미를 잃을 것 같은 느낌이다.
  • 쓱 훑고, 책을 다 끝내고와서 다시 전반부를 읽으면 좋다 (추천)
  • 그렇다고 해서 막 지루한건 아니였다. 단순히 개념적인 부분만 나온다면 심심했을 것 같은데, 여러 예제와 많이 사용되는 라이브러리 등도 알려줘서 이해가 잘됬다.

 

 

후반부 (13~20 Chapter)

Go언어를 이용한 실제 웹 애플리케이션 개발

  • 여기부터는 실제 프로젝트를 구성하여 웹 애플리케이션을 개발 및 리팩토링한다.

 

실습 프로세스는 다른 Getting started 책들과 다르지 않다.

  • 실습 환경을 만들고, HTTP 서버를 만들어보고, 엔드포인트를 추가하고, RDBMS/Redis를 붙여보고... 중간 중간 리팩토링하고.
  • 나쁜 건 아닌데, 막 특출나진 않다. 다만 일본 책임에도 불구하고 번역이 매우/너무/잘/완벽하게 되어있어 술술 읽혔다.

 

좋았던 부분은 Go언어로 개발할 때, 개발 환경/CI 환경/Container 구성 등 개발 외적으로 고민해야할 점들 또한 설명하고 있다는 것이다.

  • VSCode/GoLand 개발환경 구성/차이
  • Container image multi-stage build와 이를 편하게 사용하기 위한 make 파일 구성
  • golang ci lint, octocov를 통한 go test coverage 자동화
  • Production까지 고려한다면 붙여야하는 기능들에 대해 고민을 덜어주는 것 같아 매우 도움이 되었다.

 

 

아쉬운 점

무조건 다 좋은 것은 아니었다. 조금의 아쉬운 점을 보태보면,

  • 실제 애플리케이션의 패키지/모듈 구조가 어떻게 보통 구성되는지? 또한, 만들기 전에 전체 구조를 보여주고 했다면 어땠을까 싶다. 챕터 별로 이러한 기능을 '개발할거야'라고 하지만 전체적인 구도가 잡히지는 않았다.
  • 비슷한 내용으로 전체적인 아키텍처를 그림으로 설명해주는 게 없었다. 전체적인 구조를 보여주며 어디까지 구현됬고, 더 나아가 이런 것까지 붙여볼 수 있다 같은 추가 개선점들도 알려줬으면 좋았을 것 같다.

 

그 중 제일 아쉬웠던 점은 애플리케이션 모니터링 측면이었다.

  • 웹 애플리케이션을 만들었다고 해서 개발이 끝이 나는 것이 아니라 "이를 어떻게 관리하고 모니터링할 것인가"가 매우 중요한데, 이와 관련된 이야기는 없어서 아쉬웠다.
    • Go언어에서는 메모리를 어떻게 관리하고, GC가 어떻게 구성되는지 등도 알고 싶었는데, 너무 내용이 커질 것 같아 일부로 뺀 것 같기도 하다.
  • 이 부분은 다른 책/공식문서 등에서 찾아봐야 할 것 같다.

 

개발적인 이야기

책을 읽으며 느꼈던 것 중 가장 좋은 것은 서버/웹 애플리케이션에만 국한된 내용이 아닌 개발적으로 도움이 되는 이야기/개념들이 들어가있었던 것이었다.

책을 보며 Go언어와 이에 대한 사용법 뿐 아니라 다양한 개발 지식도 함께 배울 수 있던 것 같아 매우 만족스러웠다.

 

결론

Go 언어를 알긴 알지만 이를 이용해 활용하는 법에 미숙하다면, 해당 책은 매우 큰 도움이 될 것 같다.
전반적인 Go언어에 대한 시각을 넓혀줄 수 있고, 웹 애플리케이션 관련 기능들 또한 익혀볼 수 있다.

실제 Production에서 사용되는 Framework/Library들을 (많이) 사용하지는 않지만, 그 내부에서 동작하는 기능들을 직접 구성해봄으로서 배울 것들이 많았다.

아직은 Go언어를 이용해 실제 현업에서 적용을 해보지는 못하는 상황이지만, 추후 사이드 프로젝트 등에서 활용해보며 익혀보고자 한다.

320x100
반응형
댓글
반응형
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함