구글의 고(Go) 언어는 야생에서 8년 이상을 보내면서 컴퓨터 고수의 ‘호기심’ 대상에서 세계에서 가장 중요한 클라우드 중심 프로젝트의 핵심 프로그래밍 언어로 진화했다. 도커와 쿠버네티스(Kubernetes) 같은 대단한 프로젝트의 개발자가 고를 선택한 이유는 무엇일까? 고의 결정적인 한 방은 무엇이며, 다른 프로그래밍 언어와 어떻게 다르고, 어떤 종류의 프로젝트를 구축할 때 사용하는 것이 좋을까? 고의 기능과 최적의 용도, 언어에서 생략된 것과 한계, 그리고 고의 미래를 살펴보자.



가볍고 단순하다

고는 종종 ‘고랭(Golang)’라고도 불린다. 구글 직원이자 오랜 유닉스 전문가이며 구글의 탁월한 엔지니어인 롭 파이크가 핵심 개발자다. 그러나 엄밀하게 말해서 ‘구글 프로젝트’는 아니다. 오히려 오픈소스 커뮤니티를 중심으로 고가 어떻게 사용돼야 하고 앞으로 어떤 방향으로 발전해야 할지 논의되고 결정된다.


고는 배우고 작업하기 쉬우며 다른 개발자가 이해하기 편하게 만들어졌다. C++ 같은 언어와 비교하면 기능이 다양하지는 않지만, 구문의 형태는 C와 비슷하므로, C 개발자는 비교적 쉽게 배울 수 있다. 고의 많은 기능 중 고의 동시성(Concurrency: 병행성)과 함수형 프로그래밍 등을 보면 얼랭(Erlang) 같은 언어와도 비슷한 점이 많다. 또한, 고는 온갖 종류의 기업용 크로스 플랫폼 애플리케이션을 개발하고 유지보수하는 데 적합하다는 점에서 C 혹은 자바와 유사하다. 어디서나 실행할 수 있는 고속 코드를 개발할 수 있다는 점은 파이썬과 비슷하다(물론 비슷한 점보다 다른 점이 훨씬 더 많다).



모두를 위한 언어

고 개발 사이트의 문서를 보면, 고는 “동적으로 타입을 지정하고 인터프리트 언어 못지 않게 빠르며, 정적으로 타입이 지정되는 컴파일 언어”다. 대형 고 프로그램도 몇 초만에 컴파일할 수 있고 C 스타일의 인클루드 파일과 라이브러리의 오버헤드도 상당 부분을 없앴다. 한마디로, 고는 여러 가지 방면에서 개발자를 편하게 만들어 준다. 고의 주요 특징을 정리하면 다음과 같다.


편리성 : 고는 여러 가지 공통 프로그래밍 필요사항을 충족한다는 점에서 파이썬 같은 스크립트 언어와 비교된다. 동시성과 쓰레드 같은 행태를 보이는 ‘고루틴(goroutine)’ 기능 중 일부는 언어 자체에 내장돼 있으며, 추가 기능은 고의 http 패키지 같은 표준 라이브러리를 통해 사용할 수 있다. 또한, 파이썬과 마찬가지로 가비지 컬렉션(Garbage Collection)을 포함해 자동 메모리 관리 기능을 지원한다.


고는 매우 빠르게 실행되는 네이티브 라이브러리(Native Library)로 컴파일된다. C나 C++와 비교해도 빠른 수준이어

서, 마치 컴파일 언어가 아니라 스크립트 언어로 작업하는 것처럼 느껴질 정도다. 더 나가서, 고의 빌드 시스템은 다른 컴

파일 언어보다 덜 복잡하다. 고 프로젝트를 구축하고 실행하려면 몇 가지 단계와 정리만 거치면 된다.


속도 : 고 바이너리는 C 바이너리보다 조금 늦게 실행되지만 그 속도 차이는 애플리케이션 대부분에서 무시할 정도다. 고

의 성능은 거의 모든 작업에서 C만큼 빠르다. 자바스크립트와 파이썬, 그리고 루비 등 빠른 개발 속도로 알려진 다른 언어와 비교하면 훨씬 더 빠르다.


이식성 : 고 툴체인(Toolchain)을 사용해 생성한 실행 파일은 기본적으로 외부 종속성 없이 단독으로 실행할 수 있다. 다양한 운영체제와 하드웨어 플랫폼에서 고 툴체인을 사용할 수 있으며, 여러 플랫폼에 걸쳐 바이너리를 컴파일할 수도 있다.


상호운용성 : 고로 소프트웨어를 만들면 하부 시스템에 대한 제한 없이 실행할 수 있다. 외부 C 라이브러리와 통신하거나 네이티브 시스템을 호출할 수 있기 때문이다. 예를 들면, 도커에서 컨테이너를 사용할 경우 시스템 수준(Low-level)의 리눅스 함수, cgroup(컨트롤 그룹), 그리고 네임스페이스(namespace)와 인터페이스 등을 할 수 있다.


지원 : 고 툴체인은 리눅스, 맥OS는 물론 윈도우 바이너리나 도커 컨테이너에서 자유롭게 사용할 수 있다. 레드햇 엔터프라이즈 리눅스(RHEL)와 페도라(Fedora) 같은 여러 유명 리눅스 배포판에도 기본으로 포함돼 있으므로, 이런 플랫폼에서 고 소스를 간편하게 배포할 수 있다. 마이크로소프트 비주얼 스튜디오 코드부터 액티브스테이트(ActiveState)의 코모도(Komodo) IDE에 이르기까지 여러 서드파티 개발 환경이 고를 지원한다.



고의 미래

고는 현재 갈림길로 서 있다. 다음 단계는 고를 사용하는 개발자의 요구와 필요 요건이 더 많이 반영될 가능성이 크다. ‘고’ 수호자의 고집이 고의 미래를 결정하는 대신, 실제 고 사용자를 확대하기 위해 언어를 수정해 나갈 것이다. 본래 의도와는 다소 차이가 있을수 있지만 결국 형식 매개 변수 기능이 추가될 것이라는 전망이 나오는 것도 이 때문이다.


실제로 ‘고랭’ 개발자의 요구는 명확하다. 2016년 고랭 사용자 설문 조사에서 “어떤 것이 가장 필요할까?”라는 질문에 형식 매개 변수가 압도적 1위를 차지했다. 이어 종속성과 패키지 관리 개선이 뒤를 이었다. 이러한 변화를 도입하면 현재 자바, 자바스크립트, 파이썬이 장악한 엔터프라이즈 개발 분야에서 고의 입지가 더 단단해질 것이다.


그러나 이러한 큰 폭의 변화가 없다고 해도 인프라 재구축이나 멀티 언어 프로젝트용 개발 언어로 고는 점점 더 많이 사용될 것이다. 시스템 프로그래밍용으로 고를 활용한 대표적 사례가 에토스(Ethos)다. 안정성을 극대화한 소프트웨어 플랫폼용 운영체제로, 커널은 C로 작성됐지만 사용자 공간(userspace) 애플리케이션은 고로 개발될 예정이다. 고의 강점을 활용하는 동시에, C에 적합한 것은 C에 맡기는 현명한 절충인 셈이다.


고 툴체인 관련 서드파티 개발 성과도 급속히 늘고 있다. 액티브스테이트의 액티브고 (ActiveGo)는 고랭의 상용 버전을 제공하고, LLVM과 gccgo 등 2개 프로젝트는 대체 툴체인을 통해 자유롭게 라이선스되는 오픈소스로 제공된다.


고가 진화하는 또 다른 방식은 전혀 새로운 언어를 만드는 기반으로 쓰이는 것이다. 한 예가 헤브(Have) 언어이다. 헤브는 고에서 많은 아이디어를 차용했으며 쉬운 실행을 위해 고로 트랜스파일(Transpile)되지만, 고 구문을 간소화하고 몇 가지 개념을 자신만의 독특한 방식으로 재구성했다. 이밖에 오덴(Oden)이라는 프로젝트도 있다. 리스프(Lisp)와 하스켈(Haskel)에서 영감을 얻은 새 언어를 컴파일하는 데 고 어셈블러와 툴체인을 사용한다. 그러나 안타깝게도 현재는 개발이 중단된 상태다.


이밖에 진정한 혁신을 이루는 또 다른 방법도 있다. 즉, 더 많은 개발자가 고를 샅샅이 살펴 초기 개발팀이 의도하지 않았던 새 쓰임새를 찾는 것이다. 해킹이 가능한 프로젝트로서 고랭의 미래는 이제 막 시작됐다. 동시에 주요 언어로써 고의 장래는 매우 밝으며, 특히 유지보수가 가능한 확장성 있는 인프라를 쉽게 개발하고자 한다면 고의 속도와 단순성을 거부할 수 없을 것이다. 특히 클라우드에서 고의 매력은 치명적이다.

+ Recent posts