What I like about Go
sagebl.eu
lu 님의 블로그를 의역/요약한 글입니다
---
몇 주전, 한 인터뷰에서 “Go 언어를 왜 좋아하고 사용하는지 이유를 알려주세요”라는 질문을 받았다. 순간적으로 나는 그동안 수많은 프로젝트를 Go 개발 언어로 진행했음에도 그 이유에 대해 깊게 생각해본 적이 없음을 깨달았다.
그 생각의 결과를 두 가지 관점에 공유하겠다. Ops (운영) 관점과 Dev (개발) 관점이다.
Ops 관점
성능: Go는 준수한 성능을 뽑아내는 개발 언어이다. 서버리스처럼 런타임 시간에 제한이 있는 환경이나 미니멀한 환경에서도 잘 돌아간다. 서버리스 환경에서 런타임 성능은 중요한데 그 이유는 과금이 함수 실행 시간만큼 되기 때문이다. 물론, Rust나 C++ 만큼 효율적이라고 볼 수는 없지만 Python 개발 언어에서 넘어온 나에게 Go 성능은 합리적이다.
크로스-컴필레이션: 다수의 환경과 아키텍처에 손쉽게 배포를 감행할 수 있는 것은 매우 중요하다. 작성하는 서비스를 보면 클라우드, 일반 서버, 노트북, 라즈베리파이 등 여러 환경에서 돌아가야 한다. 특히 Arm64 서버가 제공되기 시작하면서, 내 노트북과 CI 및 클라우드에서 동일하게 잘 작동할 수 있어야 한다.
정적 바이너리와 컨테이너화: 앞서 말한 것처럼, 배포 환경이 다양한데 이 때 자주 사용되는 방식이 컨테이너화 된 앱을 구동하는 것이다. Go 프로그램을 컨테이너화 하는 것은 쉽고 심지어 정적 바이너리 덕분에 상당히 가벼운 이미지 파일로 컨테이너를 구동 시킬 수 있다.
시작 시간: Kubernetes나 AWS ECS 등 컨테이너 오케스트레이션 툴을 사용할 때 컨테이너들이 빠르게 구동되는 것은 중요하다. 이는 롤링 배포나 스케일 아웃 시 직접적인 영향을 미치기 때문이다. 또한, 짧은 시작 시간은 서버리스 환경에서도 더 적은 구동 시간을 뜻한다.
Dev 관점
로우 레벨과 하이 레벨 언어 그 사이 어딘가: Go 개발 언어를 배우기 전, 난 Python으로 개발을 많이 했었다. Python은 하이 레벨 언어다. Go는 좀 더 로우 레벨에 가깝다. 물론 C 언어 만큼은 아니지만 Python과 비교 하자면 그렇다. 이는 딱 적절한 균형이 잡힌 개발 언어인 것 같다. 세세한 디테일을 모두 알 필요 없을 만큼 고차원 적이고 필요할 때는 로우 레벨 코드로 작성할 수 있어서 좋다.
타입 시스템: 이건 지극히 주관적이다. 난 컴파일 타임에 에러를 잡아주는 정적 타이핑을 선호한다. Go 언어는 구조적 타이핑을 지원하고 있는데 나는 이게 일반 타이핑 보다 더 직관적으로 이해하기 편하다.
잘 설계 된 동시성 프로그래밍: Go 언어라고 동시성 프로그래밍이 쉽다는 뜻은 아니다. 동시성 프로그래밍은 어렵다. 다만, Go 개발 언어에서는 gorountines와 channel로 이를 좀 더 쉽게 작성할 수 있게 해준다.
스탠다드 툴: 요즘 나오는 대부분의 개발 언어처럼, Go 언어도 패키지 매니저, 테스트, 빌드, 포맷, 및 벤치마크 툴을 기본적으로 제공해준다.
일관된 코드 작성 방식: Go 언어는 대부분 직관적인 struct 뿐이라서 코드로 잔재주를 부리기 어렵다. 주니어나 시니어나 일관된 코드 작성 방식을 지킬 수 있다.
---
원글: https://lu.sagebl.eu/notes/what-i-like-about-go/
다음 내용이 궁금하다면?
이미 회원이신가요?
2024년 3월 3일 오후 2:58
like the majority of new programming languages, comes with built-in support for package management https://spacebar-clicker.net/
드
... 더 보기누
... 더 보기이
... 더 보기W
... 더 보기