왜 Go언어를 사용하나요?

왜 Go언어를 사용하나요?

– 개발 속도가 빠르다.

– 모듈화를 위한 의존성

– 동적 타입을 가진 속성 언어

– 가비지 컬렉션

– 병렬처리

 

Go언어는 2009년 구글에서 개발한 프로그래밍 언어로 구문이 C언어와 유사하며 가비지 컬렉션과 메모리 보안, CSP 스타일의 동시성을 지원합니다. 특히 Go루틴을 통한 간편한 동시성 지원은 엔터프라이즈 서비스에서도 Go언어를 적극적으로 도입하게 되는 계기가 됐습니다. 이와 함께 단일 파일로 컴파일 되는 실행 파일은 외부 라이브러리에 대한 의존성이 없어 운영 환경에서 라이브러리 버전 충돌로 인한 시스템 구성 문제를 간단히 해결합니다. 이와 같이 배포에 최적화 되면서 컨테이너기반의 시스템에서도 널리 쓰이게 됐습니다.

 

이 글에서는 웹 서비스와 이를 위한 백엔드 서비스 개발 관점에서 Go언어에 대해 조금은 다른 시각으로 논해보려 합니다.

 

세상에는 많은 개발 언어와 프레임 워크가 있습니다. 명령어 몇 줄이면 간단한 웹사이트 하나 정도는 바로 생성되기도 합니다. Ruby On Rails, Python의 Django, Node.js의 Express, Java의 Spring boot등 웬만한 언어마다 대표적인 프레임 워크들이 있습니다.

 

Go 언어는 어떨까요? Go언어 또한 다양한 프레임 워크들이 있습니다. 간단한 구글링만으로도 많은 프레임 워크들이 검색되며 어떤 프레임 워크가 더 많은 github 스타를 갖고 있는지 순위를 정하며 비교해놓은 블로그 글들도 많이 볼 수 있습니다. 아직은 다른 언어에 비해 신성이기에 웹프레임워크 또한 춘추전국시대이며 이중에서 좀 좋아 보이는 프레임 워크를 골라 소개의 글을 쓰는게 맞겠지만 반대로 “프레임 워크를 쓰지 말고 직접 만드세요.” 라고 권해드리고 싶습니다.

 

“바퀴를 다시 발명하지 마십시오!” 라는 말도 있습니다. 이미 동작하는 기능이며 많은 사용자들이 사용하는 검증된 프레임 워크가 있는데 굳이 다시 만들어야 할 필요가 있을까요? 이와 같은 질문에 다음 인터뷰를 들어 보시기 바랍니다. SQLite를 개발한 Richard Hipp의 인터뷰로 번역한 글도 인터넷에서 많이 찾아 볼 수 있습니다.

 

https://corecursive.com/066-sqlite-with-richard-hipp

 

주된 내용은 미해군의 구축함에 들어가는 DB에 문제가 있어 이를 해결하기 위해 직접 DB를 만들기 시작했고 현재는 안드로이드폰에 설치되면서 세상에서 가장 많이 설치된 DB가 됐습니다. 개발을 하다 보니 버전 관리 시스템도 필요했고 버그 트랙커도 필요해서 직접 만들었다고 합니다. 바퀴를 하나도 아닌 여럿 발명하게 됩니다.

 

그의 인터뷰 내용을 보면 필요한 것을 자신이 직접 만들므로 인해 모든 것으로부터 자유로워 졌다고 합니다.

 

프레임 워크는 양날의 검과 같습니다. 내부 구조를 잘 이해하고 사용하면 더할 나위 없이 빠른 생산성을 제공하겠지만 어설프게 사용하다 보면 되려 독이 될 수도 있습니다. 지난 겨울 Java진영의 Log4j 보안 이슈가 터져 나왔을 때 제일 먼저 생각났던 것이 Richard Hipp의 인터뷰였습니다. 단순 로깅 데이터를 파일에 기록하기 위해 log4j를 썼을 뿐인데 난데 없는 원격코드 실행이라니. 당시 해당 이슈를 직접 패치한 개발자는 전세계에 몇 명이나 있었을까요?. 한 번 여러분이 사용하는 개발 툴에서 프로젝트 의존성으로 추가된 라이브러리들을 하나하나 열어 보세요. 때때로 어떤 라이브러리는 단 몇 줄로 작성되어 있어 굳이 직접 만들지 않고 왜 참조를 하고 있을까? 라는 생각이 들기도 합니다.

 

물론 현실적으로 모든 것을 다 새로 만들 수는 없습니다. 하지만 큰 규모의 서비스도 작게 나눠 한 가지 기능에 최적화된 서비스들로 구성할 수 있습니다. 프레임 워크를 공부하고 개발 가이드를 숙지하는 대신 프로토콜을 이해하고 아키텍처를 분석하여 직접 만들어 나가는 것입니다. 소스 코드 저장소를 봤을 때 하나의 서비스를 만들기 위해 직접 개발한 많은 라이브러리와 서비스들이 같이 담겨 있게 하는 것이죠.

 

이와 같은 생각에 공감한다면 Go언어는 충분히 훌륭한 선택지가 될 수 있습니다. 장황하지 않은 문법과 간결한 동시성 지원, 든든한 기본 라이브러리와 낮은 학습 곡선은 더할 나위 없이 훌륭한 언어입니다. 웹 서비스의 경우 자체 라이브러리에서 제공하는 기능 만으로도 충분히 작고 견고한 서비스를 만들 수 있습니다. 숙련된 개발자라면 A Tour of Go 웹사이트 내용 만을 보고도 바로 실무에 사용할 수 있을 정도로 진입 장벽도 낮습니다.

 

이미 해외 많은 IT기업에서는 Go언어를 메인 개발 언어로 사용하고 있습니다. 지금부터라도 프레임 워크에서 벗어나 관리 가능한 서비스 개발을 해보고 싶으시다면 Go언어를 추천합니다.