2013년 9월 26일 목요일

GO 프로그래밍 언어의 가치

Go언어는 구글에서 나온 서버프로그래밍을 위한 새로운 프로그래밍 언어입니다. 이 언어는 유명한 컴퓨터 과학자인 Ken Thomson과 Rob Pike가 작성하였고, 개발 생산성과 성능의 두가지를 한번에 잡을 수 있는 언어입니다.

얼마나 자주 창조적인 개발을 위한 생산성과 실행 속도를 고민해보셨는지 생각해보셨나요?

Go로의 시작
Go를 이야기 하기 전에 제가 어떻게 Go라는 언어에 이끌렸는지 먼저 이야기 해야 할 것 같습니다. 저는1995년 부터 C언어를 알았고, 2001년에 PHP언어를 시작했습니다. 당시에 PHP언어는 객체지향과는 거리가 멀었고, 에러 처리에도 미흡했지만 웹어플리케이션을 만드는데 있어서, 그렇게 나쁘지만은 않은 언어였습니다.  먼저 저는 아래의 두가지 중요한 사실을 알 수 있었습니다.
  1. "객체지향"은 단지 프로그래밍의 한 방법일 뿐이다. 프로그래밍의 필수조건은 아니다. 개발 전체 시간에서 최고의 가치를 가지지 않는다.
  2. 데이터 모델에서 자유로운 변수 형태와 다양한 배열, 맵등의 지원은 개발 생산성을 향상시키며, 중요한 가치를 가진다.
 PHP는 작은 프로그램을 빠르게 작성하는데 탁월하지만, 모호한 변수타입으로 인해 프로그램을 테스트 하거나 디버깅하는데 그렇게 쉽지 않습니다. 그리고 그런 이유로 느리죠.
저는 2005년에 자바를 시작했는데, 자바는 제가 그동안 알았던 언어 중에 가장 실망스러운 것이었습니다. 지나치게 엄격한 타입을 가지고, 지나치게 장황하게 늘어놓죠. 무엇보다도 무거웠습니다. 꽉 짜여진 클래스에 코드를 담아 무작정 퍼나르며 생각없이 받아 먹는 하나의 캡슐약을 연상시켰습니다. 모든 IDE와 프레임워크, 컴파일 환경등등 지나치게 복잡하고 일이 많았습니다. 초기 개발 시간은 환경 설정에 시간이 많이 흐를정도로 군더더기가 많습니다. 특히나 자바VM은 큰 비용을 필요로 하다는 것입니다.

이후 얼마 안있어 자바대신에 파이썬을 선택했습니다. PHP에서 지원하지 않는 멀티 쓰레드나 불편한 백엔드 시스템 콘솔 개발을 위해, 선택한 언어였습니다. 언어의 기술은 간결했고, 짧은 코드에 강력한 기능을 보여주는 언어였습니다. 실제로 2009년에는 파이썬으로 모바일 프레임워크로 핸드폰을 개발하면서 파이썬의 가능성이 무한하다는 것도 느꼈습니다.
PHP와 같은 인터프리터 언어로 컴파일 없이 수정과 실행을 반복하면서 언어의 개발 속도도 빨랐습니다. 그러나, 파이썬의 문제는 느리다는 것입니다. 모바일 기기에 들어간 파이썬은 하드웨어를 읽어들이는 부분에서 속도의 이슈를 보이면서 오작동을 일으켰고, C로 바인딩하여 해결하기에 버거운 수준이었습니다.

파이썬으로 개발을 시작할 무렵, 구글이 이 언어를 선택했고, 파이썬을 창시한 Guido van Rossum을 채용하는 것을 보며, 앞으로 잠재력이 있을 것이라고 생각했습니다. 최근에 구글로 부터 새로운 언어 Go가 나왔다는 것을 알게 되었고, 쟁쟁한 컴퓨터 역사의 인물들이 개발에 참여했다는 사실에 관심을 갖게 되었습니다.
Go는 2009년에 발표되었습니다. 저는 2012년에 이 언어를 알게 되었는데, 저는 이 언어가 얼마나 대단한지, 초기에는 이해하지 못했습니다.


Go와 작업하기
저는 프로젝트의 프로토타입을 작업하면서, Go의 가치를 알 수 있었습니다.

  1. 컴파일러 언어의 이점 : 저는 컴파일러 언어로 돌아가는 것에 대한 이점을 알고 있습니다. 컴파일러는 프로그램이 실행가능한지 여부를 이론적으로 판단하여 에러를 체크할 뿐 아니라 이후에 문제를 해결하도록 에러를 도출 합니다. Go의 특별한 능력은 아니라 할 수 있지만 Go는 인터프리터와 함께 컴파일 기능을 동시에 가지고 있습니다.
  2. 표준 포맷 : Go는 C나 PHP보다는 엄격한 코딩 포맷을 가지고 있습니다. 파이썬보다는 덜 엄격하지만, 파이썬의 포맷보다 유연합니다.
  3. 작은 언어 : Go는 아주 작고 쉽게 설치가 됩니다. 이는 프로그래밍을 배우고 시작하는데 도움을 줍니다.
  4. 많은 기능 들 : Go언어는 파이썬과 같이 많은 서버프로그램의 기능을 언어 자체에 내장하고 있습니다. 가령, 웹서버를 돌린다거나 소켓 서버를 작성하는 것, OS의 내부 기능을 엑세스하는 것등 파이썬과 거의 유사하게 이용할 수 있습니다.
  5. 쉬운 다중 작업 : Go의 채널과 go루틴은 다중작업을 쉽게 처리하도록 해줍니다. 이는 Node.js와 파이썬의 Twisted보다 나은 기능을 제공합니다. 
  6. 쉬운 시작 : Go를 배우는데 시간이 그렇게 오래 걸리지 않습니다. 개발 환경도 컴파일러와 에디터만 있으면 바로 시작 가능합니다.
  7. 빠른 개발 속도 : Go의 개발 생산성은 무척 높습니다. 언어 내부에 공용 서버 컴포넌트가 있어 복잡한 서버를 빠른 시간안에 작성 할 수 있습니다. 적은 코드는 정확한 기능을 빠르게 만든다는 것을 의미합니다.
  8. 멀티코어 지원, 높은 성능 : 언어의 실행은 놀랍게도 빠르고 안정적입니다. 심지어 파이썬으로 개발하는 사람들에게는 경이적이다는 생각까지 들 정도입니다. 파이썬과 Node.js의 런타임과는 달리 Go의 런타임은 다중 OS 쓰레드를 지원하고, 동시적인 실행기능을 지원합니다.

생산성 향상을 위한 Go언어
Go언어의 일부 특징은 프로그램을 작성하고 배포하고 나서 알 수 있는 것들이 있습니다.
이 부분에 대한 Go언어의 장점이라고 생각하는 것들은 아래와 같습니다.

  1. 단일 실행파일 : Go는 정적으로 링크된 바이너리를 만듭니다. 이는 파일 하나에 모든 것을 넣고, 소스를 빌트하면 바로 작동가능하다는 것을 의미합니다. 이 특징은 오늘날 클라우드 기반의 배포 환경에서 유리합니다. 왜냐하면 배포되는 대상 서버에서는 기준 서버의 환경을 모르기 때문입니다.
  2. 크로스 컴파일 : 자바는 이부분에 대해서 완벽하지 않습니다. Go언어는 맥에서 작성되고 테스트 된 프로그램이 리눅스에서 완벽하게 컴파일 될 수 있음을 보장합니다. 그리고 대상 시스템을 맞는 옵션으로 컴파일을 하여 바이너리를 대상시스템으로 복사하면 바로 작동이 가능합니다.
  3. 설정을 빌트인 : 몇줄의 코드로 CPU, 메모리, lock여부등의 시스템 자원 정보를 프로그램에 담을 수 있습니다.

결론
저는 Go언어가 최고의 서버 프로그래밍 언어라고 생각합니다. Go는 파이썬의 모던한 개발 방식과 C와 C++의 속도를 가지고 있습니다. Go언어가 쉽게 개발되고, 많은 복잡한 시스템에 쉽게 배포되는 환경속에서도 개발 생산성과 속도를 다 동시에 만족시켜줍니다. 그리고 표준화되는 코드포맷과 작은 언어 스팩, 명확한 코드기술을 통해 협업을 하는데 이점을 줄 것입니다.

댓글 없음:

댓글 쓰기