GoSuda

Proč programovací jazyk Go?

By Rabbit Princess
views ...

서론

프로그래밍 언어는 제품을 만들기 위한 도구입니다. 단순히 어떤 언어를 쓴다고 해서 개발자의 실력이 정해지진 않습니다. 하지만 어떤 언어를 선택하고 어떻게 다루느냐는, 개발자의 사고방식과 성장 방향에 직접적인 영향을 줄 수 있습니다. 특히 지금 사용하는 언어를 벗어나 다른 언어들과 비교해보는 일은, 기술적 시야를 넓히고 본질에 대한 감각을 기르는 데 큰 도움이 됩니다. 이 글에서는 제가 왜 Go를 선택했는지, 그리고 그것이 어떤 점에서 개발자의 성장을 돕는지 다섯 가지 측면으로 나누어 이야기해 보려 합니다.

1. Go 는 성능과 생산성의 균형을 맞춘 언어입니다.

세상에는 수많은 프로그래밍 언어가 존재하며, 모든 언어는 특성에 따라 장단점을 지닙니다.

  • C 는 뛰어난 성능과 저수준 제어가 가능하지만, 메모리 관리를 개발자가 직접 해야 하며 고수준 기능이 부족해 생산성이 낮고 유지보수가 어렵습니다.
  • C++ 와 Rust 는 객체지향, 템플릿, 메타프로그래밍 등 다양한 고급 기능을 지원하지만, 문법이 복잡하고 학습 곡선이 가파르며 느린 컴파일 속도로 반복적인 배포에 적합하지 않습니다.
  • Java 와 C# 은 플랫폼 독립성과 안정성을 제공해 대규모 서비스에 널리 쓰이지만, 무거운 가상머신에서 실행되어 배포와 실행 환경이 복잡하고 리소스 요구량도 높습니다.
  • Python 과 Javascript 는 간결한 문법과 풍부한 생태계 덕분에 빠른 개발에 적합하지만, 실행 성능이 떨어지고 생태계의 신뢰도가 낮아 대규모 시스템에서 구조적 한계가 드러납니다.

그 반면에, Golang은 성능과 생산성 사이에서 뛰어난 균형을 갖춘 언어입니다. Go 는 C와 같은 컴파일 언어이기 때문에 높은 실행 성능을 보장하면서도, 빠른 컴파일 속도로 인터프리터 수준의 배포 유연성을 제공합니다. 즉, Go는 뚜렷한 단점 없이 대부분의 환경에서 안정적으로 활용 가능한 균형있는 언어입니다.

2. Go 는 카고 컬트 프로그래밍을 막습니다.

2차 세계대전 중에 연합군은 전쟁을 돕기 위해 태평양 섬에 공군 기지를 지었습니다. 많은 양의 보급품과 군 장비 지원으로 인해 군인과 원주민의 삶을 크게 바꾸었습니다. 주민들은 비행기가 제조된 옷과 통조림 식품 그리고 기타 물품을 싣고 오는 것들을 처음 보았습니다. 전쟁이 끝나자, 기지는 버려졌고 화물이 더는 도착하지 않았습니다. 그래서 섬 주민들은 군인들을 흉내내기 위해 항공 교통 관제사나 군인, 그리고 선원처럼 복장을 차려입고 활주로 비슷한 곳을 만들어 놓고 막대기를 이용해 착륙 신호를 항공기에 보냈습니다. 항공기에서 화물이 낙하산으로 떨어지도록 하기 위한 행진을 계속했습니다. 그러나 그들이 기다리는 비행기는 오지 않았습니다.

카고 컬트 프로그래밍은 코드나 기술의 원리를 이해하지 못한 채 겉모습만 흉내 내는 개발 습관을 말합니다. 현대 개발자들, 특히 웹 개발 분야에서는 이런 식의 의미를 모른 채 따라 하는 습abits이 흔히 발생합니다. React, Next, Spring, Django 같은 프레임워크 덕분에 내부 구조를 모르고도 개발이 가능해졌지만, 작은 에러 하나에도 제대로 대응하지 못하는 경우가 많습니다. 여기에 최근 AI 코드 생성 도구까지 더해지면서, 코드를 직접 작성하거나 원리를 이해하기보다는 결과만 복사·붙여넣는 개발 방식이 더욱 만연해지고 있습니다.

Go는 이러한 문제를 언어 철학 차원에서 근본적으로 지양합니다. Go는 프레임워크 중심이 아닌, 표준 라이브러리 중심으로 설계된 언어입니다. 개발자는 net/http, database/sql과 같은 기본 라이브러리만으로도 실제 서비스 수준의 웹 서버를 구축할 수 있으며, 이를 통해 자연스럽게 네트워크, 데이터베이스, I/O 등 저수준 구조에 대한 직관과 이해를 키우게 됩니다. 이처럼 프레임워크에 의존하지 않고 기본기부터 탄탄하게 익힐 수 있는 구조는, 개발자가 기술의 본질을 놓치지 않고 지속적으로 성장할 수 있는 기반이 되어줍니다.

3. Go 는 강력한 동시성 모델을 제공합니다.

현대의 CPU는 단일 코어의 속도를 높이기보다, 여러 개의 코어를 병렬로 활용해 성능을 향상시키는 방향으로 발전하고 있습니다. 이에 따라 하나의 프로그램이 여러 작업을 동시에 처리할 수 있는 동시성은 필수가 되었고, 이를 효율적으로 설계하고 구현할 수 있는 언어의 중요성도 점점 커지고 있습니다. Go는 이러한 환경에 최적화된 언어입니다. goroutine은 Go가 제공하는 경량 스레드로, 몇 KB 수준의 스택만으로 생성 가능하며, 수천 개를 동시에 실행해도 시스템 자원을 거의 소모하지 않습니다. Go 런타임은 자체 M:N 스케줄러를 통해 수많은 goroutine을 OS 스레드에 효율적으로 분산시키며, 이 과정은 개발자가 직접 개입하지 않아도 자동으로 최적화됩니다. 이를 통해 개발자는 복잡한 동기화 로직이나 커스텀 스케줄링 없이도, 안전하고 일관된 방식으로 동시성 로직을 설계할 수 있습니다.

또한 Go는 mutex, waitGroup과 같은 동기화 도구, channel, context를 활용한 현대적인 동시성 설계를 적극 지원합니다. 이러한 구조 덕분에 개발자는 복잡한 이론에 얽매이지 않고도 동시성과 병렬성에 대한 실질적인 감각을 자연스럽게 체득할 수 있으며, 무에서 활용 가능한 수준 높은 추상화와 설계 능력에 도달할 수 있습니다.

4. Go 는 훌륭한 개발자들이 중심을 잡고 만든 언어입니다.

Go는 Google 과 Robert Griesemer, Rob Pike, Ken Thompson 이라는 전설적인 개발자들이 주도하여 탄생한 언어입니다. 특히 이들은 유닉스와 C 언어의 창시자, 그리고 컴파일러와 시스템 소프트웨어 분야의 거장들로, 그 자체로 Go의 기술적 신뢰도를 증명합니다. 여기에 수많은 구글 엔지니어들의 실전 경험과 대규모 서비스 운영 노하우가 반영되면서, Go는 처음부터 현실적인 문제 해결을 지향하며, 일관된 철학과 방향성을 갖고 발전해왔습니다.

다른 언어들은 종종 호환성 단절, 설계 변경, 불안정한 라이센스, 비표준화된 생태계로 인해 커뮤니티와 사용자들에게 혼란을 안겨주곤 합니다. 예를 들어, Python은 2와 3의 호환성 단절로 인해 생태계가 수년간 양분되었고, Java는 Oracle 인수 이후 라이선스 정책이 불안정해지면서 기업의 도입을 꺼리는 사례가 늘었습니다. 또한 Node.js는 여전히 CJS와 ESM이 공존하면서 일관된 모듈 시스템을 제공하지 못하고 있습니다.

반면 Go는 일관성과 안정성을 proritouje na prvním místě. Go 팀은 하위 호환성을 철저히 유지하며, 새로운 기능을 도입할 때에도 기존 코드와 충돌하지 않도록 점진적인 통합 방식을 고수합니다. 문법 또한 불필요한 키워드를 지양하고, 과도한 추상화를 제한함으로써 언어 자체가 불필요하게 복잡해지는 것을 방지합니다. 또한 go fmt, go mod, go build, go test와 같은 일관된 공식 툴체인은 모든 Go 프로젝트가 동일한 개발 환경과 구조를 갖도록 유도하며, 강력하고 실용적인 표준 라이브러리는 별도의 프레임워크 없이도 웹 서버, 파일 처리, 데이터베이스 연동 등 실전 개발에 필요한 대부분의 기능을 충실히 지원합니다.

5. Gopher 가 귀엽습니다.

Gopher1

Gopher2

Gopher3