그들이 자바·파이썬 대신 고(Go)를 선택한 까닭

가 +
가 -

깃허브에 공개된 프로그래밍 언어들을 보면 고는 스위프트, 러스트 등과 함께 인기 언어로 올라와있다. 아직 1.5버전이지만 생산성이 높은 이유로 많은 개발자들이 고를 찾고 있다. 특히 2014년부터 ‘고퍼콘‘이라는 글로벌 컨퍼런스가 열리면서 사용자들끼리 활용 사례를 활발히 공유하고 있다. 2015년 8월 한국에서도 ‘GDG 고랭 코리아’가 주최한 ‘고퍼콘 코리아’가 열리기도 했다. 한국 개발자들은 어떤 고민 때문에 고 언어를 사용할까? 고 언어 관련 라이브러리를 개발했던 두 개발자에게 그 사용후기를 직접 들어봤다.

이준성 개발자 “서버 개발, 자바에서 고로 바꿔봤어요”

GoLang_case_01

▲이준성 데브시스터즈 개발자

이준성 개발자는 데브시스터즈에서 서버개발을 맡고 있다. 데브시스터즈는 과거에 주로 자바 언어와 스프링 프레임워크를 이용해 게임 서버를 운영했고, 파이썬, C++도 일부 사용했다. 이준성 개발자는 “새 게임을 준비하면서 개발 목표들을 추가하다보니 고 언어를 고려했다”라고 설명했다.

데브시스터즈는 먼저 복잡하지 않는 서버 구조를 설계하고자 했다. 스프링 프레임워크는 구조가 복잡하고 규모가 큰 편이다. 간단한 어플리케이션을 만드는 데 많은 사전 작업과 지식이 요구된다. 이준성 개발자는 “복잡한 구조는 전체적인 그림을 파악하기 어렵고, 필연적으로 더 많은 버그와 잘못된 코드를 만들거라 생각했다”라고 설명했다.

두 번째로 서버 구성요소들의 확장성을 높이려고 했다. 이준성 개발자는 “사용자가 폭발적으로 늘어날 때 장애 없이 안정적으로 서비스를 운영하려면 서버를 쉽게 늘릴 수 있어야 하고, 반대로 서버를 쉽게 줄일 수 있으면 서버 비용을 아낄 수 있는 장점이 있다”라며 “이때 마이SQL같은 관계형 데이터베이스는 사용량이 늘어날 때 확장하는 데 한계가 있고, 스키마 변경이나 구조 변경 또한 자유롭지 않다”라고 설명했다. 데브시스터즈는 실제로 ‘쿠키런 포 카카오’와 ‘라인 쿠키런’을 운영할 때 마이SQL로 인해 많은 장애를 겪어서 그 이후에는 가급적이면 마이SQL 사용을 최소화하는 방향으로 구조를 설계하고 있다고 한다.

마지막으로 그는 다른 언어와 잘 결합되는 언어를 찾았다. 이준성 개발자는 “다른 언어를 활용해서 성능과 관련된 로직이나 아직 해당 언어로는 구현되어 있지 않은 라이브러리를 사용할 수 있다”라며 “우리 팀은 ‘퀵(QUIC)‘을 사용할 때가 있어 C++과의 결합성을 주로 평가했다”라고 설명했다.

데브시스터즈는 위 목표에 맞게 세 가지 언어를 후보로 선택해 장단점을 비교하기 시작했다. 이때 살펴본 언어는 자바8과 파이썬, 고이다. 후보언어의 장단점은 다음과 같다.

GoLang_case_02-RE

▲사진:이준성 개발자 발표자료

  • 자바나 고는 정적 타입 언어다. 정적 타입 프로그램은 타입 검사가 이루어지기 때문에 프로그램을 실행할 때 조금 더 안전하다. 파이썬는 컴파일 시, 타입 검사가 이루어지지 않아 개발자가 실수할 여지가 조금 더 많다
  • 최근에 출시되는 CPU는 듀얼 코어, 쿼드 코어 이상이  많고, 서버용 하드웨어의 경우에는 16개 이상의 코어를 활용하는 경우도 적지 않다. CPU의 코어를 여러 개 활용하면 더 높은 성능을 낼 수 있다. 이준성 개발자는 “이때 파이썬이나 루비의 경우 GIL의 존재때문에 2개 이상의 코어를 잘 활용하지 못한다”라고 평가했다
GoLang_case_03

▲사진:이준성 개발자 발표자료

  • 고는 초보자가 익히기 쉬운 문법이다. 이준성 개발자는 “언어 차원에서 간단한 설계와 코드를 어느 정도 권장하고 강제하기 때문에, 프로젝트에 새로운 개발자가 합류했을 때에도 상대적으로 학습 과정이 짧았다”라며 “어떤 문제가 생겼을 때 발견하고 해결하기에도 상대적으로 용이했다”라고 설명했다
  • 언어 표현력 자체만을 비교했을 때는 자바나 고나 비슷하다. 하지만 런타임에서 기본적으로 제공하는 기능에서 많은 차이가 나고, 특히 동시성, 병렬성 문제를 풀 때와 C 바인딩 같은 부분에서는 고가 월등히 코드의 양에서 차이가 난다. 이준성 개발자는 “우리가 필요한 부분에서 고가 월등하다는 뜻이고, 모든 경우에서 자바보다 짜야할 코드의 양이 적다는 뜻은 아니다”라고 밝혔다
  • 자바의 경우에는 JVM 위에서 동작하는 언어이다 보니 JVM 환경 세팅과 의존 라이브러리를 패키징하는 과정이 필요하다. 제대로 성능을 내기 위해서는 JVM, 톰캣, DB 풀 등의 파라미터를 튜닝한다. 이런 튜닝 과정에 많은 리서치와 시간이 필요하다. 고의 경우에는 여러 가지 최적화와 패키징 기능을 언어 차원에서 내장하고 있고, 필요한 라이브러리를 모두 모아 하나의 정적 바이너리를 생성하기 때문에 상대적으로 배포가 간단합니다. 이준성 개발자는 “사실 최근에는 도커를 통한 컨테이너 디플로이가 대세가 되어가고 있기 때문에, 언어에 따른 차이는 거의 의미가 없다고 볼 수도 있다”라고 설명했다

고 언어를 도입하고 난 뒤 느낀 장단점은 어떤 것이 있었을까? 이준성 개발자는 먼저 채널을 활용한 손쉬운 동시성 구현할 수 있고, 가벼운 고루틴을 장점으로 꼽았다. 또한 간결한 코드를 사용하면서 생산성이 향상됐고, 컴파일 속도와 실행속도가 빨라 테스트가 쉬웠다.  여기에 인터페이스가 다루기 쉽고, 정적 타입이지만 마치 동적 언어 언어처럼 사용할 수 있는 것도 매력이라고 설명했다. 코딩 스타일이 정해져 있어, 일관성이 있는 것도 특징이다. 이준성 개발자는 “고는 선언하고 사용하지 않은 변수가 있으면 에러가 나고, 임포트(import)한 후 사용하지 않은 라이브러리가 있으면 또 에러가 나고, 중괄호 앞에 줄바꿈을 한 줄만 해도 에러가 난다”라며 “글자수나 줄바꿈 스타일 등에 대한 고민을 적게한다”라고 설명했다. 단점은 쓸 만한 디버거가 없고, 코드의 많은 부분이 에러처리 된다는 점이다. 서드파티 라이브러리 관련 버그가 아직 많은 것도 불편하다고 답했다.

“초기에 익숙치 않다보니 좀 헤매면서 힘들어 했던 시기들이 있었습니다. 팀원들이 모여서 정말 이대로 프로젝트를 고 언어로 개발해도 괜찮을지 진지하게 고민해보기도 했죠. 한 가지 확실하게 느낀 점은 고가 ‘모든 것을 해결해주는 가장 좋은 언어’는 아니라는 겁니다. 장점도 단점도 정말 뚜렷한 언어입니다. 어느 쪽이 더 클지 신중하게 잘 고민해야 합니다. 저희 팀에서는 그래도 장점이 단점보다는 훨씬 더 크다고 생각했습니다.”

새로운 언어를 기업 환경에 도입하는 건 사실 쉽지 않다. 일단 주변 팀원들이나 상사의 허락을 얻는 과정을 거쳐야 한다. 데브시스터즈의 경우는 개방적인 개발문화 덕에 고 언어 도입에 큰 반대는 없었다. 대신 본격적으로 고를 적용하기 1년 전부터 단계적으로 여러 인프라에 고를 적용해 고의 장단점을 파악하는 시간을 가졌다.

“국내에서 고 언어를 본격적으로 도입한 사례는 아직은 거의 보지 못했습니다. 다만 내부에서 도입을 검토하거나, 작게라도 시범적으로 도입한 기업은 꽤 있는 것으로 알고 있습니다. 아무래도 아직은 국내에서 고 개발자를 기 어렵습니다. 그게 고 언어 도입에 가장 큰 걸림돌이 아닐까 싶습니다. 그럼에도 불구하고, 고는 고성능 언어로써 C++과 자바 외에 다른 대안이 필요하거나 특히 C++이나 자바보다 단순한 언어가 필요하시다면, 고 언어를 꼭 검토해보셨으면 좋겠습니다”

※ 데브시스터즈가 사용한 고 언어 활용한 라이브러리도구

※데브시스터즈가 직접 개발한 고 언어 오픈소스 도구

  • 씨네(Cine) : 동시성 소프트웨어의 설계 방법 중 하나인 ‘액터 모델(Actor model)’을 고로 구현한 것
  • 고퀵(GoQuic) : 구글의 네트워크 프로토콜 QUIC(퀵)을 고 언어용 라이브러리로 만든 라이브러리. 퀵  프로토콜의 구현 코드가 크로미엄 프로젝트 안에 들어있지만, 실제로 가져다 사용하려면 크로미엄과 그 의존성을 모두 빌드해야 해서 무척 까다롭다. 보다 사용하기 쉽도록 퀵만의 핵심 코드와 의존성을 분리한 것이 ‘libquic’이고, 이것을 기반으로 고퀵을 구현했다고 한다

※고 개발시 참고한 문서

※참고문헌

이경찬 애드투페이퍼 CTO “파이썬 공부하다가 고에 관심이 생겼어요”

GoLang_case_06

▲이경찬 애드투페이퍼 CTO

이경찬 개발자는 스타트업 애드투페이퍼의 CTO이자 오랫동안 파이썬을 사용했던 개발자다. 그는 “파이썬은 빠르게 서비스를 개발해야 하는 스타트업에게 최적의 언어이며 특히 생산성이 매우 높다”이며 “파이썬 언어 자체의 성능이 다른 언어에 비해 비교적 낮기는하나 I/O bound인 웹·앱 서비스들의 경우에는 최적화를 통해 성능 문제를 충분히 극복할 수 있다”라고 설명했다. 실제로 인스타그램, 핀터레스트와 같은 유명 서비스들이 파이썬으로 개발됐고, 국내에서도 많은 스타트업에서도 파이썬을 활용하고 있다.

현재 애드투페이퍼 기술 대부분이 파이썬으로 개발되고 있다. 아직 고 언어를 업무에 도입할 계획은 없다고 한다. 그럼에도 불구하고 이경찬 개발자는 왜 고 언어에 관심을 두고 있을까?

“고 언어는 언어 자체의 성능도 뛰어나고요. 파이썬만큼은 아니지만 뛰어난 생산성을 가지고 있어서 좋아합니다. 또 높은 동시성을 가진 어플리케이션을 작성할 때 유리한 점이 많아 고를 공부하게 됐습니다. 아직 회사 업무에는 도입하고 있지는 않습니다. 아무래도 적은 개발 인원으로 효율적으로 서비스를 운영하려면 백엔드에 사용하는 언어는 파이썬으로 통일하는 게 좋다고 생각했거든요. 고로 프로그램을 작성하면 성능면에서는 이득이 있겠지만 코드의 양이 늘어나고 기존의 파이썬 코드로 작성된 백엔드와 같이 운영할 때 관리 비용이 증가할 수 있다고 생각했고요.”

이경찬 개발자는 파이썬 언어 사용자는 쉽고 고 언어를 배울 수 있다고 설명한다. 그만큼 파이썬과 고는 닮은점이 많다. 그는 “고가 처음 만들어질 때 정적 타입 언어의 성능 및 메모리 안정성과 동적 타입 언어의 생산성을 모두 갖춘 언어를 만드는 것을 목표로 삼았다고 들었다”라며 “특히 C와 파이썬의 장점들을 많이 가져온 것을 볼 수 있다”라고 설명했다.

GoLang_case_07

▲파이썬과 고를 문법 비교(사진:이경찬 개발자 발표자료)

GoLang_case_08

▲파이썬과 고를 문법 비교(사진:이경찬 개발자 발표자료)

GoLang_case_09

▲파이썬과 고를 문법 비교(사진:이경찬 개발자 발표자료)

이경찬 개발자는 꼭 업무에 사용하지 않아도 다양한 언어와 기술들을 살펴보고 있다. 새 언어를 공부하면서 오히려 기존에 알고 있던 언어에 대한 이해도를 높일 수 있기 때문이다. 예를 들어 이경찬 개발자는 고 언어의 기본 자료 구조인 ‘array’, ‘slice’, ‘map’을 살펴보다가 파이썬에서 서 비슷한 역할을 하는 list, dict 등의 기본 자료 구조의 내부 구현에 대해서도 살펴봤다. 이때 학습은 문서를 보는 것뿐만 아니라 라이브러리를 직접 개발하면서 개념을 익혔다. 이때 외부 라이브러리는 쓰지 않았다. 기존 패키지만으로도 충분히 새로운 라이브러리를 개발할 수 있었다고 한다. 이경찬 개발자가 개발한 고 오픈소스 라이브러리는 다음과 같다.

  • 어카운팅 : 어카운팅은 통화 관련 표기(Currency formatting)를 도와주는 라이브러리 입니다. 각 나라의 통화 마다 표기 방법이 다른데요. 예를 들면 -127.54를 표기할때 -£127.54(영국), -127,54 F(프랑스), kr-127,54(덴마크), € 127,54-(네덜란드), ($127.54)(미국) 이런식으로 표기법이 다릅니다. 이런 처리를 개발자가 직접 하려면 여간 귀찮지 않습니다. 어카운팅을을 사용하면 이러한 통화 표기 관련 작업을 비교적 쉽게 할 수 있습니다. 다른 언어들에는 비슷한 기능을 하는 라이브러리들이 많이 있는데 고 언어에는 없어서 만들어 보았습니다.
  • 타임유틸 : 타임유틸은은 다른 언어에서 제공하는 ‘Timedelta’, ‘Strftime’ 등의 날짜 처리 관련 기능들을 지원하는 라이브러리 입니다. 파이썬을 사용할 때 Timedelta와 Strftime을 빈번하게 사용했고, 고에서도 해당 기능들이 있으면 유용할 것 같아 만들어 보았습니다.

“최근 들어서 국내의 몇몇 회사들이 고를 도입하고 있다는 말을 들었습니다. 아무래도 기업 실무 환경에서는 완성도 있는 프레임워크와 라이브러리를 선호하게 되는데요. 고는 아주 많은 유명한 오픈소스들이 생겨나고 있지만, 아직 완성도가 높지 않은 것들이 대부분입니다. 고를 이용하여 서비스를 만들게 되면 사용하게 되는 오픈소스 프레임워크와 라이브러리에 기여하면서 서비스에 도입해야 한다는 단점이 있을 것 같습니다. 하지만 고 언어에 내장된 기본 라이브러리나 검증된 라이브러리를 잘 가려서 사용한다면 높은 생산성으로 고성능 어플리케이션을 개발할 수 있을 것 같습니다. 이미 해외에서는 고 언어가 실무 환경에서 많이 사용되고 있다고 합니다.”

※ 이경찬 개발자가 활용한 고 언어 개발 도구

※이경찬 개발자가 고 언어 학습시 참고한 문서

※참고문헌