새벽 2시, 트래픽이 몰려 API 서버가 버벅였다. 한 개발자가 로그를 뒤지다 문득 이런 생각을 한다. "언어를 바꾸면 이 문제가 좀 나아질까?" 그 답을 찾다 많은 사람이 만나는 이름이 바로 Go다. 구글이 2009년에 공개한 이 언어는, 요즘 서버·클라우드 세계에서 조용히 그러나 확실하게 자리를 넓혀 왔다.
Go는 화려하지 않다. 오히려 심심할 정도로 단순하다. 그런데 그 단순함이 대규모 서버를 굴리는 회사들에게는 정확히 필요한 미덕이었다. 오늘은 Go가 왜 만들어졌고, 무엇을 잘하며, 어떤 사람이 배워두면 좋은지 차근차근 짚어본다.
왜 하필 Go였을까
Go를 만든 사람들은 구글 안에서 거대한 코드베이스와 씨름하던 엔지니어들이었다. 코드가 수백만 줄로 불어나자, 빌드하는 데만 몇 분씩 걸리고 문법은 복잡해지고, 새로 들어온 사람이 코드를 이해하기 어려워졌다. 그들은 "빠르게 컴파일되고, 읽기 쉽고, 대규모 협업에 강한 언어"를 원했다.
그래서 Go는 처음부터 세 가지를 겨냥했다. 컴파일이 눈 깜짝할 사이에 끝날 것, 문법이 한 사람이 하루면 익힐 만큼 작을 것, 그리고 여러 작업을 동시에 처리하는 일이 쉬울 것.
똑똑한 언어보다 팀 전체가 오래 유지보수할 수 있는 언어. 그것이 Go가 택한 방향이었다.
첫인상 — 놀랄 만큼 단순한 문법
Go의 코드를 처음 보면 대부분 "이게 끝이야?" 하고 되묻는다. 예약어가 25개뿐이고, 클래스 상속 같은 복잡한 개념도 없다. 가장 기본적인 예제는 이렇게 생겼다.
package main
import "fmt"
func main() {
fmt.Println("안녕, Go!")
}변수를 선언할 때도 군더더기가 없다. 타입을 일일이 쓰지 않아도, 대입하는 값을 보고 컴파일러가 알아서 타입을 정해준다.
name := "홍길동" // 문자열로 자동 추론
age := 30 // 정수로 자동 추론이렇게 작은 문법 덕분에 다른 언어를 조금이라도 다뤄본 사람이라면 며칠 만에 실무 코드를 읽을 수 있다. 배우는 비용이 낮다는 건, 팀에 새 사람이 들어와도 금방 전력이 된다는 뜻이기도 하다.
진짜 무기 — goroutine으로 여럿을 동시에
Go를 특별하게 만드는 핵심은 동시성(concurrency)이다. 여러 일을 겹쳐서 처리하는 능력인데, 서버는 결국 수많은 요청을 동시에 받아내는 일이 전부이니 이 부분이 곧 성능으로 직결된다.
Go에서는 함수 앞에 go 한 단어만 붙이면 그 작업이 별도의 흐름으로 떨어져 나간다. 이 가벼운 실행 단위를 goroutine이라 부른다.
func 알림보내기(user string) {
fmt.Println(user, "님에게 알림 전송")
}
func main() {
go 알림보내기("길동") // 동시에 실행
go 알림보내기("영희")
time.Sleep(time.Second) // 끝날 때까지 잠깐 대기
}일반적인 운영체제 스레드는 하나 만드는 데 수 MB의 메모리를 쓰지만, goroutine은 시작할 때 몇 KB밖에 쓰지 않는다. 그래서 서버 한 대에서 수만 개, 수십만 개를 동시에 띄우는 일도 부담이 적다. "동시에 많은 일을 저렴하게" 하는 것, 이것이 Go가 클라우드 시대에 몸값을 올린 결정적 이유다.
어디에 쓰이나 — 눈에 안 보여도 곳곳에
Go로 만들어진 대표적인 소프트웨어를 들으면 생각보다 익숙할 것이다. 컨테이너 기술의 대명사인 도커(Docker)와 쿠버네티스(Kubernetes)가 모두 Go로 작성됐다. 데이터를 저장하고 옮기는 여러 인프라 도구, 수많은 회사의 백엔드 API 서버도 Go를 쓴다.
| 분야 | Go가 잘 맞는 이유 |
|---|---|
| 백엔드 API 서버 | 동시 요청 처리에 강하고 배포 파일이 하나로 깔끔 |
| 클라우드·인프라 도구 | 빠른 실행, 낮은 메모리, 크로스 컴파일 |
| CLI 도구 | 의존성 없이 실행 파일 하나로 배포 가능 |
특히 Go는 컴파일하면 필요한 것이 다 들어간 실행 파일 하나가 나온다. 별도의 런타임을 서버에 깔 필요 없이 그 파일만 올리면 돌아간다. 배포가 단순해진다는 건 운영하는 입장에서 사고를 줄이는 큰 장점이다.
완벽하진 않다 — 알고 시작하자
물론 Go가 만능은 아니다. 단순함을 지키느라 다른 언어에 있는 편의 기능이 일부러 빠져 있어, 익숙한 사람은 답답함을 느끼기도 한다. 에러를 일일이 확인하는 코드가 반복적으로 늘어나는 점도 자주 지적된다.
또한 화면을 다루는 프런트엔드나 복잡한 수치·데이터 과학 영역에서는 파이썬이나 자바스크립트가 더 자연스럽다. 언어에는 저마다 잘하는 자리가 있다. Go는 "많은 요청을 안정적으로 받아내는 서버"라는 자리에서 특히 빛난다.
정리하며
Go는 똑똑함을 뽐내는 언어가 아니라, 여럿이 오래 함께 만들 수 있도록 설계된 언어다. 빠른 컴파일, 작고 명료한 문법, 그리고 저렴하게 동시성을 다루는 goroutine — 이 세 가지가 서버와 클라우드의 세계에서 Go를 든든한 선택지로 만들었다.
혹시 백엔드나 인프라 쪽으로 방향을 잡고 있다면, 주말 하루쯤 투자해 Hello, Go를 찍어보길 권한다. 언어가 이렇게 조용하고 단정할 수도 있구나, 하는 새로운 감각을 만나게 될지도 모른다. 오늘의 한 줄이 언젠가 새벽 2시의 그 개발자를 구할지도 모를 일이다.
댓글 0