[서평] - Go 언어로 배우는 웹 애플리케이션 개발

728x90

Go에 대해서 아예 무지한 상태로 해당 책을 접하게되었다. 
평소 다른 언어를 찍먹해보고 싶은 욕구가 가득하던 찰나에 서평의 기회가 찾아와서 책을 간단히 리뷰해본다.

항상 어떤 새로운 언어를 배울 때는 그 언어가 어떤 목적을 가지고 탄생했는지가 늘 궁금해진다. 
나뿐만 아니라 다른 사람들도 똑같지 않을까하는 생각에 1장만 간단하게 요약해려고한다. 😃

Go가 탄생한 이유 

Go의 탄생이유는 Go at Google에서 확인할 수 있고 개발 배경은 'Why did you create a new language?'에 있다. 

2007년 구글이 개발한 프로그래밍 언어인 Go는 당시 구글이 겪던 아래의 문제들을 해결하기위해 탄생했다. 

  • 수십 분, 수 시간이 걸리는 빌드
  • 동일한 내용의 표현 방법이 프로그래머마다 달라서 생기는 가독성 저하
  • 자동화 툴 작성이 어려움
  • 높은 비용이 드는 버전 관리 및 버전 변경
  • 멀티 코어 프로세서, 네트워크 시스템, 대규모 계산 클러스터 및 웹 프로그래밍 모델에서 개발할 때 발생하는 문제

위의 문제를 해결하기위해 Go는 아래와 같은 목표를 가지고 개발됐다. 

  • 동적 타이핑(dynamic typing) 언어의 특징인 쉬운 프로그래밍 
  • 정적 타이핑(static typing) 언어가 가진 효율성과 타입 안정성
  • 네트워크 프로그래밍, 멀티 코어 프로그래밍을 간단하게 구현해주는 병렬 처리 작성법
  • 대규모 시스템 및 대규모 개발 팀에 필요한 효율적인 프로그래밍
  • 간단한 언어 기능

Go 언어의 중요한 특징은 학술적인 목적으로 개발된 언어가 아니라 대규모 팀 개발에 발생하는 문제를 해결하고자 만들어졌다. 
이는 객체지향이나 함수형 프로그래밍의 기초가 되는 이론이나 수학적 접근법은 Go에서는 표현하기 어렵다는 의미이기도 하다. 

Go는 시스템 개발 중에 발생하는 문제를 해결하기 위해 탄생한 언어이기 때문에 개발자들의 요구에 따라 설계 이념을 지키는 범위 내에서 기능을 확장하는 경우도 있다. 

Go를 작성할 때는 먼저 Effective GoGo Code Review Comments 등의 코딩 가이드라인을 따라해보는 것을 권장한다.

장표를 가볍게 살펴본다. 


목차

  • Chap1. Go 언어 알아보기 
  • Chap2. context 패키지
  • Chap3. database/sql 패키지
  • Chap4. 가시성과 Go
  • Chap5. Go Modules 
  • Chap6. Go와 객체지향 프로그래밍
  • Chap7. 인터페이스 
  • Chap8. 오류 처리
  • Chap9. 익명 함수 및 클로저 
  • Chap10. 환경 변수 적용 방법
  • Chap11. Go와 의존성 주입
  • Chap12. 미들웨어 패턴
  • Chap13. 실습 내용에 대해
  • Chap14. HTTP 서버 만들기
  • Chap15. 개발 환경 정비하기
  • Chap16. HTTP 서버를 약한 결합 구성으로 변경하기
  • Chap17. 엔드포인트 추가하기
  • Chap18. RDBMS를 사용한 데이터베이스 처리 구현하기 
  • Chap19. 기능별로 HTTP 핸들러 구현 분할하기
  • Chap20. 레디스와 JWT를 사용한 인증 및 권한

장표들을 쭉 훑어보면 대략적으로 이 책이 어떤 정보들을 제공하는 것인지 알 수 있을 것이다.
Go 언어의 문법이나 기초를 알려주는 책은 아니기 때문에 Go를 완전 처음 접해보는 분이라면 적절한 수준의 책은 아닐거라고 생각되지만 
Go의 기본 문법을 다뤄봤고 웹 애플리케이션을 만들어봤다면 궁금해할만한 내용들을 Go 언어로 어떻게 구현하는지를 알려주는 책이다. 

Go 언어를 생전 처음 보는거다보니 이 책을 읽으면서도 잘 이해하지 못한 부분들이 많았고 웹 애플리케이션을 개발할 때, 필요한 여러가지 처리들이 있는데 각 처리를 어떻게해야하지? 하고 고민할 때, Go는 이렇게 구현하는구나? 와 같은 방향 가이드를 알려주는 책이다.
Go에서는 이런 느낌 식으로 이런 처리를 하는구나?, 이런 기능도 제공하는구나? 와 같이 흥미롭게 책을 읽었다. 

또한 Go는 객체지향 프로그래밍이 가능한지에 대한 Chap6의 내용도 흥미로웠다. (YES이면서 NO이기도 하다는 애매한 공식문서의 답변) 객체지향의 대표적인 특징인 캡슐화, 다형성, 상속 중 다형성을 지원하지 않기 때문이다. (일부만 지원)

Go에서는 상속을 표현하기위해서  embedded 를 사용하는 방식을 소개하기도하지만 이는 완전히 상속을 대체할 수 없다.
embedded의 개념을 딱 보면서 상속보다는 조합(?)의 개념이 아닐까 싶었는데 책에서도 역시나 이 개념은 composition(= 조합), mixin 과 같은 개념에 더 가깝다고 동일한 이야기를 하고있다. (괜히 뿌듯 😙)

이 외에도 에러 처리는 어떻게 할 것인지 DIP(= 의존성 역전 원칙), 환경 변수 적용 방법, 미들웨어 패턴 등등 혼자서 맨땅에 헤딩하며 공부하기에는 많은 시간과 노력이 소모될 수 있는 내용들에 대해서 전반적인 가이드를 해주고있다. 이 책에 나온 내용들을 숙지하면 모르는 내용을 찾기위해서 구글링하는 시간을 절약하는데 큰 도움이 될 것 같다. 

Go 문법에 대해서 어느정도 숙지되어있고 웹 애플리케이션을 개발에 도전하고있는 분이라면 이 책을 읽음으로인해 많은 시간을 절약할 수 있을 것으로 기대된다.

이런 독자들에게 이 책을 추천한다.

  • Go 문법에 익숙하고 Go로 웹 애플리케이션 개발에 도전하려는 사람
  • 이미 Go로 웹 애플리케이션을 개발하는 중이고 웹 애플리케이션에서 필요한 여러 처리들을 Go에서는 어떻게 해야하는지 잘 모르는 사람
728x90