구글의 고(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)에서 영감을 얻은 새 언어를 컴파일하는 데 고 어셈블러와 툴체인을 사용한다. 그러나 안타깝게도 현재는 개발이 중단된 상태다.


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



클라우드 컴퓨팅 도입은 오늘날 비즈니스의 주요 원동력으로 빠르게 자리잡아가고 있다. 비용을 절감하고 애질리티를 증대시키기 위해 애플리케이션들이 온-프레미스 데이터 센터를 벗어나고 있기 때문이다.

Credit:GettyImages



아마존 웹 서비스(AWS), 마이크로소프트 애저(Azure), 그리고 구글 클라우드 플랫폼 등 주요 클라우드 업체 셋은 보안과 데이터 주권에 대한 초기 우려들을 각자 나름의 방식으로 해결하려 했다. 그리고 매우 규제가 엄격한 기업을 제외한 거의 모든 기업이 이들의 솔루션을 도입했다.

이러한 변화는 IaaS 시장을 포화 상태로 만들었고, 2016년 기준 IaaS 시장 규모는 무려 250억 달러에 이르렀다고 가트너는 최근 통계를 통해 밝혔다. 가트너는 IaaS 시장 규모가 내년이면 450억 달러 수준으로 성장할 것으로 예측했다.

IaaS는 써드파티 제공자가 하드웨어, 소프트웨어, 서버, 스토리지 등 핵심 인프라를 고객을 대신하여 호스팅 및 관리해주는 서비스 모델이다. 주로 고도의 확장적 환경에서 애플리케이션을 호스팅하고, 고객들은 실제 사용하는 인프라에 대해서만 요금을 지불하는 형식으로 이루어지고 있다.

AWS는 2006년 클라우드 서비스 공급을 시작한 이후 줄곧 시장에서 지배적 위치를 점해 왔다. 2017년 2월 시너지 리서치(Synergy Research) 보고서에 따르면 AWS의 시장 점유율은 40%에 육박하는데 MS, 구글, IBM의 점유율을 모두 합한 것이 23% 정도인 것을 고려하면 AWS의 시장 지배력을 짐작할 수 있다.

그러나 AWS의 이런 우위에도 불구하고, 마이크로소프트는 ‘클라우드 우선’ 정책을 적극적으로 펼친 CEO 사티아 나델라의 리더십 하에 빠르게 글로벌 클라우드 네트워크를 구축하며 IaaS 시장에서의 입지를 굳혀 나갔다. 또한 인터넷 거인 구글 역시 구글 클라우드 플랫폼(GCP) 하에 퍼블릭 클라우드 서비스 및 IaaS 비즈니스를 구축해 나갔다.

그렇다면 이들 세 기업의 클라우드 서비스는 어떤 차이가 있을까? 그리고 어떤 IaaS 플랫폼이 우리 기업에 가장 적합한지를 어떻게 판단할 수 있을까?

기능 및 서비스
클라우드 선택은 결국 개별 고객의 요구, 워크로드 등에 의해 좌우된다. 사실 많은 기관에서는 비즈니스 오퍼레이션별로, 혹은 사용례 별로 각기 다른 서비스를 이용하는 멀티 클라우드 방식을 채택하고 있다.

그렇지만 이러한 기업들의 클라우드 솔루션 도입 방식에도 각각 차이점이 있으며, 이런 차이점을 만드는 요소들을 이해한다면 엔드 유저 입장에서도 어떤 방식이 가장 적합한지를 판단하기 쉬워질 것이다.

AWS, 마이크로소프트 애저, 그리고 구글 클라우드 플랫폼은 유동적인 컴퓨트, 스토리지, 네트워킹과 관련해서는 대체로 유사한 기능을 보인다. 세 서비스 모두 공용 클라우드의 공통적 요소들을 지니고 있다. 셀프서비스와 인스턴트 프로비저닝(instant provisioning), 오토스케일링(autoscaling), 그리고 여기에 덧붙여 보안, 컴플라이언스, 신원 관리 기능 등이 그것이다.

세 기업 모두 클라우드 서비스에 투자를 아끼지 않는 기업들이며 이를 지원할 수 있는 든든한 모기업을 지니고 있다. 덕분에 이들 기업은 좀 더 정교하고 성숙한 애널리틱스 서비스를 제공할 수 있게 되었다. 예를 들어 AWS(엘라스틱 맵 리듀스), 애저(HD인사이트), 구글(Dataproc) 모두 하둡 클러스터를 지원한다.

컴퓨트, 스토리지, 데이터베이스뿐 아니라 애널리틱스, 네트워킹, 모바일, 개발자 툴, 매니지먼트 툴, IoT, 보안, 그리고 기업 애플리케이션에 이르기까지, AWS는 100여 개 분야를 아우르는 가장 폭넓은 서비스를 제공하는 기업이다. 하지만 이는 어느 정도는 AWS가 가장 오래된 시장 참여자이기 때문이기도 하다.

세 업체 모두 머신러닝 툴은 물론 사물 인터넷, 서버리스 컴퓨팅(AWS의 람다(Lambda), 애저 및 구글의 펑션(Functions) 등)과 같은 첨단 기술을 겨냥한 기능들을 추가했다. 고객들은 자신의 요구에 맞는 클라우드를 선택해 모바일 앱을 만들거나, 고기능 컴퓨팅 환경을 조성할 수 있게 됐다.

세 업체 모두 고유의 인터넷 전문성에 기반을 둔 강력한 머신러닝 기능을 제공함은 물론이다.

AWS는 2015년 4월 아마존 머신러닝(Amazon Machine Learning) 서비스를 출시해 개발자들의 머신러닝 모델 생성에 도움을 주었다. 그리고 지난 2016년에는 이미지 인식이 가능한 새로운 머신러닝 서비스(AWS 레코그니션)와 텍스트를 음성으로 변환하는 학습 모델(폴리), 그리고 알렉사를 구동하는 엔진(렉스)을 발표하기에 이르렀다.

구글은 오픈소스 텐서플로(TensorFlow) 딥러닝 라이브러리에 기반하여 머신러닝 모델을 제작할 수 있도록 지원하는 클라우드 머신러닝 엔진(Cloud Machine Learning Engine)을 제공한다. 또한 구글은 자연어 처리, 번역 및 컴퓨터 비전 등의 작업을 위해 규격 API 서비스를 제공하기도 한다.

마이크로소프트의 애저 머신 러닝 스튜디오(Azure Machine Learning Studio)는 알고리즘 작성, 테스트 및 설치를 위한 전문 개발자용 솔루션이자 규격 API를 위한 시장이기도 하다.

요즘 트렌드라 할 수 있는 컨테이너의 인기를 반영하여 세 업체 모두 도커(Docker) 서비스를 지원하고 있다.

세 기업 모두 파트너십을 수용하는 자세를 보이고 이로 인해 고객들 역시 다양한 앱 및 서비스를 자신의 클라우드 환경에서 시험해 볼 수 있다.

구글을 예로 들면 SAP, 피보탈, 랙스페이스와 같은 탄탄한 업체들과의 제휴를 수차례 발표하기도 했다.

컴퓨트, 스토리지, 데이터베이스, 그리고 네트워킹
컴퓨트에서 AWS의 메인 옵션은 EC2 인스턴스다. EC2 인스턴스의 장점은 다양한 옵션을 맞춤 개발할 수 있다는 것이다. 또한 앱 설치를 위한 엘라스틱 빈스톡(Elastic Beanstalk)이나 EC2 컨테이너 서비스, AWS 람다 및 오토스케일링 같은 서비스도 제공한다.

한편 애저의 컴퓨트 옵션은 보다 가상 머신(VM)에 치중해 있으며 클라우드 서비스 및 리소스 매니저 등 클라우드에 애플리케이션을 설치하기 위한 다른 툴도 함께 제공한다.

구글의 확장적 컴퓨트 엔진(Compute Engine)은 구글 데이터 센터의 VM을 제공한다. 빠른 부팅과 지속적인 디스크 스토리지, 그리고 일관된 성능을 보장하며 고객의 요구에 맞춰 유연하게 커스터마이징 할 수 있다.

세 업체 모두 관계형 데이터베이스를 지원하는 것도 공통점이다. 애저의 SQL 데이터베이스, 아마존의 릴레이셔널 데이터베이스 서비스(Relational Database Service), 레드시프트(Redshift)와 구글 클라우드 SQL, 그리고 NoSQL 데이터베이스 및 애저 도큐먼트DB, 아마존 다이나모DB(DynamoDB), 구글 빅테이블(Bigtable) 등이 그것이다.

AWS 스토리지에는 심플 스토리지(Simple Storage, S3), 엘라스틱 블록 스토리지(EBS), 엘라스틱 파일 시스템(EFS), 임포트/엑스포트(Import/Export) 대용량 데이터 전송 서비스, 글레시어(Glacier) 아카이브 백업 및 온-프레미스 환경과 통합되는 스토리지 게이트웨이(Storage Gateway) 등이 포함된다.

마이크로소프트의 서비스에는 핵심 애저 스토리지 서비스, 애저 블롭(Blob) 블락 스토리지, 테이블(Table), 큐(Queue), 파일 스토리지 등이 포함된다. MS 사는 또한 사이트 리커버리(Site Recovery), 임포트/엑스포트(Import/Export), 애저 백업(Azure Backup) 등도 제공한다.

세 기업 모두 전반적으로 훌륭한 네트워킹 기능을 보장하며 자동화된 서버 로드 밸런싱과 온-프레미스 시스템에 대한 연결성을 약속한다.

원문보기: 
http://www.ciokorea.com/news/35680#csidx86dbcd8322f14c39a50155fab59a92c 

+ Recent posts