Golang, 고 언어 사용 후기와 장단점

January 19, 2020 / golang

drawing

고언어를 배우게 된 계기

2018년 쯤에 Node.js를 떠나며” - express를 만든 TJ의 글 을 읽고 Golang고 언어를 처음으로 알게되었다. 그 때는 Node.js로도 충분하다고 생각하였고 이 글의 작성 날짜가 2014년도 여서 크게 고 언어에 관심이 가지 않았다.

그렇게 Node.js로 재미있게 웹 개발을 하는 도중에 ipify: 300억 요청 처리, 그 너머로 라는 글을 2019년도에 읽게 되었다. 이 글을 읽고 난 고 언어를 배우게 된다.

Let it go 패러디 버전

The schedule's tight on the cluster tonight
분산환경에서 해야 할 일로 쉴 틈 없을 오늘밤
So I parallelized my code
그래서 나는 병렬화된 코드를 작성했어
All those threads and continuations
그 모든 스레드와 컨티뉴에이션들로
My head's going to explode
머리는 폭발하기 일보직전이야
And all that boilerplate
심지어 그 모든 의례적인 코드들
That FactoryBuilderAdapterDelegateImpl
그 모든 "괴상한디자인패턴의복잡다단한구현"
...

가사 보기

고 언어 첫 사용기

문법

package main

import "fmt"
func main() {
    fmt.Println("hello world")
}

일단 처음에 Hello World를 출력 시키는 프로그램을 만들었는데 프로그래밍을 C언어로 시작했는지라 C언어 스타일(정확히는 파이썬 + C언어 느낌)과 비슷해서 좋았다. 또한 문법이 단순해서 배우기 쉬웠으면 개발 속도도 빨라졌다.

정적타입 / 강타입

나는 자바스크립트 또는 파이썬같은 동적타입 언어를 많이 사용하여서 고 언어같은 정적타입 언어로 프로그래밍을 하면 귀찮을 것 같다고 생각했는데 타입이 있어서 자동완성, 디버깅이 잘 되서 무척 편하였고 개발 속도고 빨라졌다. (자바스크립트의 이러한 단점은 타입스크립트로 해결 가능하다)

성능

고 언어는 성능은 매우 좋은데 대표적으로 고 언어의 기본 패키지인 net/http
약 5만 rps (Request Per Second) 정도를 처리 할 수 있다 더 알아보기
참고로 Node.js With Cluster는 2만 정도 처리 할수 있다.
또한 문법을 간단하게하여 C, C++와 달리 컴파일 속도가 매우 빨라 개발 시간을 단축해준다!

고루틴!!! :D

package main

import "fmt"
import "time"
func main() {
    go func(){
        fmt.Println("Hello World")
    }()
    time.Sleep(time.Second * 3)
}

고 언어는 고루틴을 사용하여 비동기적으로 개발을 할 수 있었는데 이 고루틴은 약 2kb 정도 하며 쓰레드보다 훨씬 적게 메모리를 사용한다. 나는 이 고루틴의 성능과 go 키워드로 간단하게 사용 할수 있는게 좋았다 (채널을 통하여 동기화 시킬 수도 있다.)

웹 서버

고 언어에서 웹 프레임워크로는 대표적인게 gin, echo, begoo 등이 있는데
난 그 중에서 echo를 선택하였다

package main

import (
	"net/http"

	"github.com/labstack/echo"
)
func main() {
	e := echo.New()

	e.GET("/", func(c echo.Context) error {
		return c.String(http.StatusOK, "Hello, World!\n")
	})

	e.Logger.Fatal(e.Start("127.0.0.1:3000"))
}

위처럼 Node.jsexpress와 스타일이 비슷하여 Node.js를 하던 나에게는 친숙하게 프로그래밍을 할 수 있었다.

만약 코드가 복잡해지면 폴더별로 분리해야 하는데 밑에 있는 예제를 참고하면 된다.

cjaewon/echo-gorm-example
pangpanglabs/echosample

웹 프레임워크에 대해서 더 알고싶으면 Go My Way #1 - 웹 프레임워크를 읽어보는 것을 추천한다.

장점

  • 컴파일 속도 : 컴파일 속도가 C,C++보다 매우 빨라져서 시간을 단축할 수 있다.
  • 간단한 문법 : 간단한 문법 때문에 배우기 쉽다 (삼항연산자, 제네릭 다 없음..)
  • 성능 : C, C++ 보다는 느리지만 파이썬, Node 보다는 성능이 휠씬 좋음
  • 정적 언어 : 디버깅 밑 자동완성이 매우 편함
  • 넘치는(?) 기본 모듈 : 기본 모듈로도 충분히 웹 프로그래밍 등 이 가능
  • 고루틴 : 쓰레드보다 매우 가볍고 쉽게 사용 가능
  • 공룡 기업 : 구글이라는 공룡기업이 만들었기 때문에 업데이트 등이 활발함

    단점

  • 제네릭 없음 : 엌..
  • 에러처리 : 에러 처리할때마다 return 하여 if문으로 err가 있는지 비교해야함

고 언어의 미래

고 언어는 구글에서 계속 밀고 있고 사용자가 많아지는 추세여서 미래는 밝다고 할 수 있다. 대표적으로 고를 사용하는 기업은 구글, 드롭박스, 넷플릭스, 트위치
프로젝트로는 Docker, Kubernetes, Hugo 가 있다.

개인적으로 고 언어는 성능이 매우 좋고 프로그래밍 하는 재미도 있으니 배우는 것을 추천한다.


Written by@JWN
Node.js와 Go를 좋아하는 개발자 & 학생입니다.요즘은 인공지능, 딥러닝 분야에 관심이 있습니다.

GitHub