loading
본문 바로가기
Language/go lang.

[Go] Go 언어 입문

by 개발자 김모씨 2020. 9. 3.
반응형

Go!

개발자가 아닌 사람들에게 Go 키워드를 묻는다면, 무엇이 떠오를까?
감히 예측하건데,

<나이언틱 : 포켓몬고>

2016~2017년 전세계를 강타한 포켓몬고의 열풍이 아닐까 싶다. (물론 지금의 그 열기는 다소 식은 것처럼 보이지만..)
그러나 우리 개발자(놈)들에게 Go란, 다른 의미로 전세계를 강타하고 있는 Programming language이다.

 

<Go lang 캐릭터>

곰돌이? 주제에 귀엽기도 하지....
최근엔 이렇게 CS 쪽에도 캐릭터화가 많이 이루어지고 있는 것 같다.
(Docker의 고래라던가, Linux의 펭귄이라던가...)

귀엽지 아니한가..좋은 세상이다

 

2007년 Google(이라 쓰고 갓글이라 부르지)에서 만든 Go는
"
빠른 성능
안정성
편의성
쉬운 프로그래밍
"
을 목표로 제작된 언어이다.
C언어의 대부라고 불리는 켄 톰슨(갓) 분이 참여해서 화제가 되기도 하였다.


Go 언어 순위

목표에 맞게 잘 개발되었는지, 티오베(TIOBE)의 2020년 1월기준 언어별 인기도를 보면,

자그마치, 14위다.

(14위라 낮은거 아니냐는 생각이 든다면....1~13위는 넘사벽의 고인물이 많은 JAVA, C 등등인걸 확인해보자...)

현재 구글에서 진행하고 있는 대부분의 프로젝트들이 Go를 활용하여 개발되어 있으며,
예를 들면 tensorflow, FCM(Firebase Cloud Message 등이 있다.
그 외에도 Docker, twitch, CNCF(Kubernetes의 운영재단이다 자그마치 k8s)에서 Go를 적극 장려하여 활용하고 있다.


Go 언어의 장점

Go 언어가 이토록 인기를 얻으며 태풍을 일으키고 있는 이유는 무엇일까
Go언어의 장점을 짚어보자

1. 속도

대부분의 언어의 퍼포먼스는 C 언어에 미치지 못한다. (괜히 알고리즘 문제를 C로 푸는게 유리하다고 하는게 아니다)
Go는 C를 기반으로 만들어졌으며(갓 켄 톰슨님..) 컴파일 언어이기 때문에, 인터프리터 언어(ex. Python)에 비해 월등히 빠른 퍼포먼스를 보인다.
또한 네이티브 바이너리를 결과물로 제공하기 때문에, 배포 입장에서도 매우 빠르게 처리할 수 있다.

2. Garbage Collection

JAVA의 가장 큰 특징이라고 한다면, 객체지향과 GC를 들 수 있을 것이다.
Go 역시 auto gc를 지원하기 때문에, 개발자 입장에선 매우 편리하다.
C/C++의 포인터로 인한 Memory Leak으로 정신이 피폐해진 개발자라면(접니다 저에요) 이 참에 Go를 배워보자!

3. 진입장벽이 낮다

위의 GC와도 연관되는 장점이다.
사실상 가장 큰 장점이라고도 할 수 있는데,
대부분의 개발자가 첫 개발언어를 C로 한다는 점을 기준으로 설명하자면,
우리는 Pointer와 멀티스레드 앞에서 얼마나 많은 밤을 새워야만 했는가....ㅠㅠㅠㅠㅠ
Go는 혁신적으로(혁명이다 혁명!) 불필요한 문법들을 가차없이 가지치기하였다. (While문을 날려버린 톰슨사마...)
특히, 멀티스레드는 go 키워드를 사용해서 1줄(단 1줄이다 단 1줄!!!)로 구현해 낼 수 있다!

4. 컨벤션의 통일

Go는 독특하게도, 코딩 컨벤션을 일체화시켰다.
모든 언어는 코딩 컨벤션의 논쟁을 가지고 있는데,
예를 들면 { 는 함수 옆에 위치해야 하는가, 함수 다음 줄에 위치해야 하는가 하는 것 따위의 논쟁이다.
다수의 개발자가 하나의 프로젝트를 동시에 개발하는 환경(오픈소스는 특히)에서는 컨벤션을 통일하는 것이 매우 중요하다.
Go는 "{ 는 반드시 함수 옆에 위치해야 한다" 처럼 컨벤션을 fix시켜 버렸고,
이에 스트레스 받을 개발자들을 위하여 컨벤션에 맞춰 코드를 수정해주는 'go fmt' 기능을 제공하고 있다.
쉽게 말해, 개떡같이 코딩해도 알아서 맞춰준다라는 것.


Go 언어의 단점

완벽한 것은 존재하지 아니하듯, 우리의 Go도 단점을 가지고 있다.
사실 단점이라 하기엔 그렇고...아직 부족한 부분? 정도로 하자...
다소 주관적인 의견임을 미리 밝힌다.

1. 라이브러리

앞서 언급한 것처럼, Go는 하나의 실행파일만을 컴파일로 생성한다. 그 결과, 정적/동적 라이브러리를 배포할 수 없다.
결국 오픈소스 등을 가져와서 개발하는 경우, 소스를 가져와서 컴파일 하는 방식을 사용하여야 한다.
C/C++이나 JAVA에 익숙해져 있는 개발자들은 이에 적응하기가 쉽지 않다.
더 나아가, 배포의 관점에서 살펴보면,
오픈소스를 사용하기 위해 라이브러리화 된 소스코드를 사용할 때, 버전 관리 측면에 어려움이 따른다.
다시 말하면, 여러 버전의 라이브러리를 사용해야 할 경우, 각각의 소스코드를 모두 관리해야 한다.

2. 한국 커뮤니티의 부재

규모가 큰 한글 커뮤니티가 없다시피 하다.
영어가 부족한 개발자(놈)들(저요 저요! 바로 접니다)의 경우, 이슈가 생겼을 때 머리가 멍해지고 혼비백산하게 된다.
필자는 UNREAL을 기반으로 제조업계 설비의 실시간 시뮬레이션을 모사한 개발 경험이 있는데,
Unity에 비해 UNREAL은 한국 커뮤니티가 매우 부족해 곤란함을 크게 겪었었다.
처음 개발해보는 분야는 해당 이슈의 키워드(ex. JAVA gc tuning 등)를 모르고 있는 경우가 많은데,
그러한 상황에서는 구글링조차 쉽지 않아 개발 시간이 지체되는 문제가 발생할 수 있다.
Go 역시 국내 개발자 진영이 아직까진 교류가 활발하지 않은 탓에, 비슷한 상황이 발생할 가능성이 높다.


Go 언어의 학습

이처럼 Go는 단점보다 장점이 훨씬 큰 언어이며, 빠르게 성장하고 있는 언어이다.
파이썬이 그러했듯, Go 역시 개발자의 필수 덕목(?)으로 자리잡게 될 것임이 자명하다.
앞으로 본 블로그를 통하여 Go 언어 학습 내용 정리 및 요약을 진행하려 한다.
학습은 하기 책을 사용하여 진행하였다.

<가장 빨리 만나는 Go 언어>

이 책을 선택한 이유는 간단하다.
가장 많이 팔린 국내 Go 입문서 이며,
저자님께서 원고를 인터넷에 공개하셨다. (이재홍님 사랑해요)
요샌 이렇게 기술서적의 원고를 인터넷에 공개하시는 갓급 능력자님들이 많아지는 듯 하다.
공개된 원고 URL은 여기. 

pyrasis.com/private/2015/06/01/publish-go-for-the-really-impatient-book

 

가장 빨리 만나는 Go 언어 출간 및 원고 공개

 

pyrasis.com

 


도움이 되셨거나, 도움이 될 것 같거나, 도움이 되길 원하신다면
공감을 눌러주시길.
관심은 큰 힘이 됩니다. 

 

반응형

댓글