‘서버 하나를 빌드하는데, 이렇게 시간이 오래 걸리다니…’ 이런 생각에서 시작하여, 또 하나의 프로그래밍 언어가 탄생하게 됩니다. 바로 구글이 개발한 고(Go), 다른 말로 고랭(Golang)의 역
‘서버 하나를 빌드하는데, 이렇게 시간이 오래 걸리다니…’ 이런 생각에서 시작하여, 또 하나의 프로그래밍 언어가 탄생하게 됩니다. 바로 구글이 개발한 고(Go), 다른 말로 고랭(Golang)의 역사가 시작된 것인데요. 이제는 구글을 넘어 전 세계적으로 폭넓게 쓰이고 있는 컴퓨터 프로그래밍 언어가 되었습니다. 고(Go)의 역사를 되돌아보면 2007년 구글의 특별 엔지니어인 롭 파이크와 로버트 그리즈머, 켄 톰슨을 중심으로 구글의 프로그램 개발자들이 C++ 프로그래밍 언어의 복잡함을 줄이고 좀 더 간결하고 사용자가 배우기 쉬운 프로그래밍 언어를 만들어보자는 목표로 모이게 됩니다. 그 결과 빠른 속도의 컴파일 언어를 위해 오픈 프로그래밍으로 작업한 결과 짧은 시간 안에 프로그래밍할 수 있는 고(Go)를 개발했습니다. 이렇게 탄생한 Go 언어는 2009년 11월에 리눅스와 맥 OS 플랫폼을 대상으로 세상에 나왔고, 2012년 3월 정식 버전을 시작으로 2021년 현재 1.17 버전으로 업데이트되었습니다. > 고(Go)가 고(go)한다 지금 여러분이 쓰고 있는 프로그래밍 언어가 C, C++ 혹은 자바인가요? 만약 이 물음에 YES라면, 다른 언어들보다 고(Go)를 빨리 익힐 수 있다는 말이 있습니다. 그 이유는 우리가 알고 있는 고(GO) 언어가 공식적으로 C 프로그래밍 계열에 속하는 C 언어에 속하기 때문입니다. 그리고 한 가지 더! C 언어를 개발한 켄 톰슨이 고(Go)의 핵심 개발자라는 점인데, C 언어를 가장 잘 아는 사람이 C 언어 계열에 속하는 고(Go)를 개발했으니 더욱이 그렇습니다. 그리고 대부분의 프로그램 관련자들이 C 언어를 사용하고, 대부분의 시스템 프로그래밍에서 C 언어와 C++ 언어가 많이 사용되었기 때문에 개발자들이 새로운 언어를 익히고, 프로그램을 개발하기에 편리하다고 합니다. 이 밖에도 고(Go)는 여러 가지 프로그램과 운영체제를 지원합니다. 그중에서도 리눅스, 맥 OS, 윈도우 바이너리, 도커 컨테이너 등으로 지원되는데, 사용료는 무료입니다. 특히 고(Go)는 리눅스 배포판에 기본 사항으로 포함되어 있습니다. 그래서 리눅스 기반의 플랫폼에서는 고(Go)를 쉽게 배포할 수 있습니다. > 고는 빠른 컴파일 속도를 자랑한다 고(Go)는 C 언어와 비슷한 구문입니다. 하지만 C언어의 복잡함을 해결하고 컴파일 속도를 빠르게 했는데요. 이때 고(Go)는 전체적인 헤더 파일을 관리하는 것이 아니라 소스 코드 자체만 관리합니다. 즉 소스 코드 자체를 패키지 할 때 변경된 부분만 컴파일하기 때문에 속도는 자연스럽게 빨라질 수밖에 없습니다. > 고(Go)는 명쾌하고 간결하다 고(Go)는 명쾌하고 간결합니다. 그 이유는 고(Go)가 C 언어와 비슷하지만, 다른 프로그래밍 언어인 C 언어의 키워드는 37개, C++ 언어는 84개인 것과 비교할 때 고(Go)의 키워드가 25개에 불과하기 때문입니다. > 고(GO)는 빠르다. 고(GO)의 바이너리(0과 1로 이루어진 이분법으로 실행, 바이트로 저장되는 파일) 파일의 실행 속도는 빠릅니다. > 고는 자유롭다. 고(Go)의 프로그래밍 언어는 자유롭습니다. 다른 프로그래밍의 외부 C 라이브러리와 통신하거나 네이티브 시스템 호출을 수행하는 데 제약이 없기 때문입니다. 또 리눅스 함수, 컨트롤 그룹(cgroup), 네임스페이스 등과 컨테이너 기능을 구현하는데 편리합니다. > 고(Go)는 작게 설계된 언어이다 고(Go)는 프로그램을 실행하는 데 있어 시간을 절약하기 위해 만들어진 언어로, 작게 설계된 언어라고 할 수 있습니다. 그런데 이 점이 고(Go)가 안고 있는 몇몇 문제점의 요인이기도 합니다. 그 이유는 작게 설계하기 위해서 일부 기능을 생략할 수밖에 없었기 때문입니다. 그래서 다른 언어에서는 일반적으로 쓰이는 기능들이 고(Go)에는 없기 때문에 번거로울 때가 종종 있습니다. 예를 들면 고(Go)에는 개발자들이 자주 사용하는 제네릭(Generics, 함수가 많은 유형의 변수를 받아주는 기능) 기능이 없기 때문에 제네릭 기능을 쓰려면 우회하는 방법을 사용해야 합니다. 또 고(Go)는 커널 또는 장치 드라이버, 임베디드 시스템 등을 만들 때 런타임과 가비지 수집기(GC) 모두 기반 OS에 의존해야 한다는 점이 있습니다. 많은 개발자들이 이러한 개선 사항에 대해서 말하고 있는데요. 고(Go)의 개발자들 역시 이러한 점을 고려해 여러 가지 기능들이 추가될 가능성이 높다고 합니다.