개발자

“클라우드를 움직이는 힘” 고 언어의 장점과 단점 9가지

Serdar Yegulalp | InfoWorld 2023.12.04
구글의 고(Go) 프로그래밍 언어가 처음 등장했을 때는 이 언어는 호기심 많은 컴퓨터 전문가나 다루던 언어였다. 그러나 이후 10여 년의 시간을 거치면서 세계적으로 중요한 여러 클라우드 네이티브 프로젝트를 움직이는 검증된 프로그래밍 언어로 발전했다.
 
ⓒ Getty Image Bank

도커, 쿠버네티스와 같은 중요한 프로젝트에서 개발자가 고를 선택한 이유는 무엇일까? 고의 대표적인 특징은 무엇이고, 다른 프로그래밍 언어와 어떤 면에서 다를까? 고는 어떤 종류의 프로젝트에 가장 적합할까? 여기서는 고의 기능과 최적의 사용 사례는  물론 부족한 기능과 제약을 살펴보고 앞으로의 발전 방향을 예측해 본다. 
 

작고 간소한 고 언어 

고, 또는 흔히 말하는 고랭(Golang)은 오랜 유닉스 권위자이자 구글 특별 엔지니어인 롭 파이크를 주축으로 구글 직원이 만든 언어지만 엄밀히 말하면 “구글 프로젝트”는 아니다. 그보다는 언어의 사용 방법과 방향에 대해 명확한 소신이 있는 리더십의 주도로 커뮤니티에서 개발한 오픈소스 프로젝트라고 하는 편이 더 정확하다. 

고는 쉽게 배울 수 있고 다루기 편하며 다른 개발자가 읽기 쉬운 언어를 목표로 한다. 고는 특히 C++와 같은 언어와 비교해 기능이 많지는 않다. 구문 측면에서는 C와 비슷하므로 오랜 기간 C를 사용해 온 개발자라면 비교적 쉽게 배울 수 있다. 그러나 고의 여러 기능, 특히 동시성 및 함수형 프로그래밍 기능은 얼랭(Erlang)과 같은 언어와 더 비슷하다. 

고는 온갖 종류의 크로스 플랫폼 엔터프라이즈 애플리케이션을 구축하고 유지하기 위한 C와 유사한 언어로, 자바와도 많은 공통점을 갖고 있다. 또한 파이썬과는 유사점보다 차이점이 훨씬 더 크긴 하지만 어디에서나 실행 가능한 코드를 빠르게 개발할 수 있다는 면에서는 마찬가지라고 할 수 있다. 고 설명 문서를 보면, 고를 “동적 형식 지정 인터프리트 언어처럼 느껴지는 빠른 정적 형식 지정 컴파일 언어”라고 설명한다. 규모가 큰 고 프로그램도 컴파일에는 몇 초밖에 걸리지 않는다. 또한 고에서는 C 스타일의 include 파일 및 라이브러리에 따르는 오버헤드를 대부분 피할 수 있다. 
 

고 언어의 강점 

고는 여러 가지 면에서 개발자의 일을 편하게 해준다. 

강점 1. 편리함 
고는 많은 일반적인 프로그래밍 요구를 충족할 수 있다는 점에서 파이썬과 같은 스크립팅 언어와 자주 비교된다. 이런 기능 중에는 동시성과 스레드 동작을 위한 고루틴처럼 언어 자체에 내장된 경우도 있고, 고의 http 패키지와 같이 고 표준 라이브러리 패키지로 제공되는 부가적인 기능도 있다. 고는 파이썬과 마찬가지로 가비지 수집을 포함한 자동 메모리 관리 기능을 제공한다. 

고 코드는 파이썬과 같은 스크립팅 언어와 달리 실행 속도가 빠른 네이티브 바이너리로 컴파일된다. 또한 C 또는 C++와 달리 고의 컴파일 속도는 매우 빨라서 고로 작업하다 보면 컴파일 언어보다는 스크립팅 언어에 가깝게 느껴진다. 고 빌드 시스템은 다른 컴파일 언어에 비해 덜 복잡하다. 몇 단계만 거치면 별다른 수고 없이 프로젝트를 빌드하고 실행할 수 있다. 

강점 2. 빠른 속도 
고 바이너리의 실행 속도는 C 바이너리에 비하면 느리지만 그 차이가 크지는 않아서 대부분의 애플리케이션에서 무시해도 될 정도다. 성능은 대부분의 작업에서 C에 필적하며, 자바스크립트, 파이썬, 루비 등 개발 속도로 유명한 다른 언어와 비교하면 대체로 훨씬 더 빠르다. 

강점 3. 이식성 
고 툴체인으로 생성된 실행 파일은 기본적인 외부 종속성 없이 독립적으로 작동할 수 있다. 고 툴체인은 다양한 운영체제 및 하드웨어 플랫폼용으로 제공되며, 이러한 툴체인을 사용해 여러 플랫폼에 걸쳐 바이너리를 컴파일할 수 있다. 

강점 4. 상호운용성 
고는 모든 기능을 기반 시스템에 대한 접근성을 희생하지 않고 제공한다. 고 프로그램은 외부 C 라이브러리와 통신하거나 네이티브 시스템을 호출할 수 있다. 예를 들어 도커에서 고는 저수준 리눅스 함수, 컨트롤 그룹(cgroups) 및 네임스페이스와 상호작용해 컨테이너 동작을 구현한다. 

강점 5. 광범위한 지원 
고 툴체인은 리눅스, 맥OS 또는 윈도우 바이너리나 도커 컨테이너로 무료로 사용 가능하다. 고는 레드 햇 엔터프라이즈 리눅스, 페도라와 같은 많은 인기 있는 리눅스 배포판에 기본적으로 포함되므로 이러한 플랫폼에 비교적 쉽게 고 소스를 배포할 수 있다. 마이크로소프트 비주얼 스튜디오 코드부터 액티브스테이트(ActiveState)의 코모도(Komodo) IDE에 이르기까지 많은 서드파티 개발 환경도 충실하게 지원한다. 
 

고 언어가 가장 적합한 분야 

모든 작업에 적합한 언어는 없지만 다른 언어에 비해 더 많은 작업에서 효과적인 언어는 있다. 고는 다음과 같은 애플리케이션 유형 개발에서 가장 빛을 발한다. 

분야 1. 클라우드 네이티브 개발 
고의 동시성과 네트워킹 특성, 높은 수준의 이식성은 클라우드 네이티브 앱을 구축하는 데 적합하다. 실제로 고는 도커, 쿠버네티스, 이스티오를 포함한 클라우드 네이티브 컴퓨팅의 여러 초석을 구축하는 데 사용됐다. 

분야 2. 분산 네트워크 서비스 
네트워크 애플리케이션의 성패는 동시성에 달려 있는데, 고루틴과 채널 등 고의 네이티브 동시성 기능이 이 부분에서 강점이 있다. API, 웹 서버, 웹 애플리케이션을 위한 최소한의 프레임워크 등 네트워킹, 분산 기능 및 클라우드 서비스를 위한 고 프로젝트가 많은 것도 이 때문이다.

분야 3. 유틸리티 및 독립형 툴 
고 프로그램은 최소한의 외부 종속성을 가진 바이너리로 컴파일된다. 따라서 시작 시간이 빠르고 즉시 패키징해 재배포할 수 있으므로 유틸리티나 다른 툴을 만드는 데 적합하다. 한 가지 예로 SSH 등에 사용되는 텔레포트(Teleport)라는 액세스 서버가 있다. 텔레포트는 소스에서 컴파일하거나 사전 빌드된 바이너리를 다운로드하는 방법으로 빠르고 쉽게 서버에 배포할 수 있다. 
 

고 언어의 제약

제약 1. 생략된 언어 기능이 많음 
지향점이 뚜렷한 고의 기능은 칭찬과 비판을 동시에 받아왔다. 고는 작고 이해하기 쉬운 언어에 중점을 두고 설계됐으므로, 일부 기능은 의도적으로 생략됐다. 그 결과 다른 언어에서는 일반적인 몇 가지 기능을 고에서는 볼 수 없다. 

오랜 불만 중 하나는 한 함수가 여러 유형의 변수를 받을 수 있게 해주는 제네릭 함수의 부재였다. 고 개발 팀은 고의 나머지 부분을 보완하는 구문과 동작을 구현해야 한다는 이유로 오랜 시간 동안 제네릭 추가에 반대 입장을 고수했다. 그러나 2022년 초에 출시된 고 1.18부터는 제네릭을 위한 구문이 포함됐다. 여기서 알 수 있는 점은 고는 여러 버전 간에 폭넓은 호환성을 보존한다는 이유로 중대한 기능을 추가하는 일이 거의 없고, 추가할 때도 많은 고민을 거친다는 것이다. 

제약 2. 바이너리 크기가 클 수 있음 
고의 또 다른 잠재적인 단점은 생성된 바이너리의 크기다. 기본적으로 고 바이너리는 정적으로 컴파일된다. 즉, 런타임에 필요한 모든 요소가 바이너리 이미지에 포함된다. 이 방식은 빌드 및 배포 프로세스를 간단하게 해주지만 그 대가로 “Hello, world!”를 출력하는 바이너리의 크기가 64비트 윈도우 기준 약 1.5MB에 이른다. 고 팀은 각 릴리스마다 바이너리의 크기를 줄이기 위한 작업을 해오고 있다. 또한 압축이나 디버그 정보를 제거하는 방법으로 고 바이너리 크기를 줄이는 것도 가능하다. 후자의 방법은 서비스가 실패할 경우 디버그 정보를 유용하게 사용할 수 있는 클라우드 또는 네트워크 서비스보다는 독립형 분산 앱에서 더 적합하다. 

제약 3. 가비지 수집에서 많은 리소스 소비 
고가 자랑하는 기능인 자동 메모리 관리는 단점이 되기도 한다. 가비지 수집을 위해 얼마간의 처리 오버헤드가 필요하기 때문이다. 고는 설계상 수동 메모리 관리 기능을 제공하지 않으며, 고의 가비지 수집은 엔터프라이즈 애플리케이션에서 발생하는 메모리 부하에 잘 대응하지 못한다는 비판을 받아왔다. 그래도 새 버전이 나올 때마다 메모리 관리 기능이 개선되고 있다. 예를 들어 고 1.8에서는 가비지 수집의 지연 시간이 크게 줄어들었다. 고 개발자는 C 확장에서 수동 메모리 할당을 사용하거나 서드파티 수동 메모리 관리 라이브러리를 사용할 수 있지만, 대부분의 고 개발자는 이러한 문제에 대해 네이티브 솔루션을 선호한다. 

제약 4. GUI 구축을 위한 표준 툴킷의 부재 
데스크톱 애플리케이션의 GUI와 같이 고 애플리케이션을 위한 풍부한 GUI를 구축하는 소프트웨어 문화는 여전히 빈약하다. 대신 대부분의 고 애플리케이션은 명령줄 툴 또는 네트워크 서비스다. 다만 고 애플리케이션에 GUI를 제공하기 위한 다양한 프로젝트가 진행 중이다. 대표적인 것이 GTKGTK3 프레임워크를 위한 바인딩이다. C 바인딩에 의존하며 순수 고로 작성되지 않았지만 플랫폼 네이티브 UI를 제공하는 프로젝트도 있다. 윈도우 사용자라면 워크(walk)를 사용해볼 수 있다.

그러나 아직은 확고한 승자나 장기적인 관점에서 안전한 방법이 없다. 크로스 플랫폼 GUI 라이브러리를 구축하고자 했던 구글 프로젝트를 포함한 몇몇 프로젝트도 성과 없이 끝났다. 또한 고는 설계상 플랫폼 독립적이므로 이와 같은 프로젝트가 표준 패키지 모음의 일부가 될 가능성은 낮다. 마지막으로, 고는 네이티브 시스템 함수와 통신할 수 있지만 커널 또는 디바이스 드라이버, 임베디드 시스템과 같은 저수준 시스템 구성요소를 개발하기 위한 용도로는 적합하지 않다. 결국 고 런타임과 고 애플리케이션을 위한 가비지 수집기는 기반 운영체제에 의존한다. 이런 작업에 적합한 최신 언어에 관심이 있다면 러스트 언어를 추천한다.
 

고 언어의 미래 

고 개발진은 고집을 부리기보다는 고 개발자 기반을 더욱 포용하는 방향으로 언어의 방향을 바꾸고 있으며, 그에 따라 앞으로는 이 개발자층의 희망 및 요구사항을 더 반영하며 개발될 것이다. 이 같은 변화의 대표적인 예가 최선의 방법에 대한 오랜 숙고 끝에 추가된 제네릭이다. 2021년 고 개발자 설문에서 고 개발자들은 고 언어가 제공하는 기능에 전반적으로 만족한다고 답했지만 개선해야 할 부분도 많다고 지적했다. 고 사용자들이 주로 개선을 원하는 분야는 종속성 관리(고 언어의 오랜 숙제), 버그 진단, 안정성이며, 그에 비해 메모리, CPU 사용률, 바이너리 크기, 빌드 시간 등의 순위는 훨씬 낮았다. 

대부분의 언어는 핵심 사용 사례에 중점을 둔다. 고는 처음 등장하고 10년 동안 네트워크 서비스 틈새를 파고들었으며 이 영역에서 계속 확장해 나갈 가능성이 높다. 설문에서 확인된 고 언어의 주 사용 사례는 API 또는 RPC 서비스 생성(49%), 데이터 처리(10%), 웹 서비스(10%), CLI 애플리케이션(8%) 순이었다. 

고 언어의 매력이 높아지고 있음을 보여주는 또 다른 신호는 언어 평가 후 실제로 도입하는 개발자의 수다. 프로젝트에 고 사용을 고려 중이라고 답한 설문 응답자 중 75%는 고를 선택했다. 고를 선택하지 않은 개발자가 선택한 주요 대안은 러스트(25%), 파이썬(17%), 자바(12%)였다. 이들 각 언어는 다른 틈새 시장을 발견했거나 지금 찾고 있다. 러스트의 경우 안전하고 빠른 시스템 프로그래밍, 파이썬은 프로토타이핑과 자동화 및 글루 코드, 자바는 전통적인 엔터프라이즈 애플리케이션이다.

고의 속도와 간편한 개발이 다른 사용 사례로 얼마나 확산될지, 또는 고가 엔터프라이즈 개발 분야에 얼마나 깊이 침투하게 될지는 아직 알 수 없다. 그러나 주요 프로그래밍 언어로서 고의 미래는 이미 보장돼 있다. 특히 고의 속도와 단순함은 가장 큰 미덕이다. 장기적인 유지 관리가 가능한 확장성 있는 인프라를 더 쉽게 개발할 수 있는 기반이 되는 클라우드에서고 언어의 미래는 확실하다. 
editor@itworld.co.kr
 Tags Go
Sponsored

회사명 : 한국IDG | 제호: ITWorld | 주소 : 서울시 중구 세종대로 23, 4층 우)04512
| 등록번호 : 서울 아00743 등록발행일자 : 2009년 01월 19일

발행인 : 박형미 | 편집인 : 박재곤 | 청소년보호책임자 : 한정규
| 사업자 등록번호 : 214-87-22467 Tel : 02-558-6950

Copyright © 2024 International Data Group. All rights reserved.