그냥 빌어먹을 Go를 써라

백엔드 개발자라면 한 번쯤 이렇게 생각해본 적이 있을 것이다. 새로운 서비스를 만들어야 하는데, 어떤 언어로 시작하지? Python은 쉽지만 성능이 딸리고, JavaScript/TypeScript는、생태계가 넓지만 복잡하고, Rust는 강력하지만 러닝커브가 가파르다. 그리고 결국 많은 프로젝트가 "그냥 Python/Django로 하자" 또는 "Node.js로 하자"라는 결론에 도달한다.
그런데 2026년 현재, 그 사이 어딘가에 자리 잡은 언어가 있다. 바로 Go다. 그리고 솔직히 말해서, 많은 경우에서 Go가 가장 합리적인 선택이다.
왜 Go인가?
Go를 한마디로 요약하면 "과도한 복잡성을 거부하는 언어"다. 여기서 "과도한 복잡성"이란 무엇일까?
프론트엔드 세계에서 HTML은 복잡한 프레임워크 없이도 웹페이지를 만들 수 있는 단순한 대안이었다. 그런데 지금은 React, Vue, Angular 같은 프레임워크 없으면 "진짜" 웹 개발이 아닌 것처럼 여겨진다. 백엔드 세계도 마찬가지다. 초당 40개 요청을 처리하는 간단한 CRUD API에 Node.js 패키지 수백 개, TypeScript 빌드 도구, Kubernetes 오케스트레이션, 거대한 마이크로서비스 아키텍처까지 동원하는 것은 과하다.
Go는 이런 과도한 복잡성의 대안이다.
단순하지만 강력한 언어 설계
Go의 철학은 명확하다. struct, 함수, 인터페이스, goroutine, channel—이 다섯 가지만으로 대부분의 백엔드 문제를 해결할 수 있어야 한다.
데코레이터, 메타클래스, 매크로, trait, Monad 같은 복잡한 추상화 도구는 없다. 그래서 Go 코드는 처음 보는 사람도 빠르게 읽을 수 있다. 한 가지 더—gofmt가 코드 포맷을 강제하기 때문에 팀 내에서 "이 파일은 탭으로 들여쓰기, 저 파일은 스페이스 4개" 같은 불필요한 논쟁이 벌어지지 않는다.
신입 개발자가 입사 첫날, 2년 전에 principal 엔지니어가 작성한 Go 코드를 읽을 수 있다. 이것은 엄청난 생산성이다.
표준 라이브러리만으로 웹 앱 구축하기
Go의 가장 매력적인 점 중 하나는 별도 웹 프레임워크가 필요 없다는 것이다. 표준 라이브러리만으로 웹 앱을 만들 수 있다.
package mainimport ("embed""html/template""net/http")//go:embed templates/.htmlvar files embed.FSvar tmpl = template.Must(template.ParseFS(files, "templates/.html"))func main() {http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {tmpl.ExecuteTemplate(w, "index.html", map[string]string{"Name": "World",})})http.ListenAndServe(":8080", nil)}
webpack, Vite, 거대한 node_modules, 개발 서버—전부 필요 없다. go build하면 바이너리 하나가 생성되고, 그 파일을 서버에 복사하면 배포가 완료된다.
표준 라이브러리가 해주는 것들
Go의 표준 라이브러리는 정말 깊이 있다. 웹 개발에 필요한 대부분의 기능이 기본으로 포함되어 있다:
| 작업 | 표준 라이브러리 |
|---|---|
| 데이터베이스 | database/sql |
| JSON 처리 | encoding/json |
| HTTP 서버/클라이언트 | net/http |
| 테스트 | go test |
| 벤치마크 | go test -bench |
| 프로파일링 | go tool pprof |
| 템플릿 | html/template |
| 임베딩 | embed |
io.Reader와 io.Writer: 단순하지만 강력한 추상화
Go의 io.Reader와 io.Writer는 각각 메서드 하나만 가진 인터페이스다. 그런데 이 두 인터페이스가 생태계 전반의 기반으로 작동한다.
HTTP 응답 본문을 gzip으로 압축하고, 다시 디스크 파일로 저장하는 파이프라인을 단 몇 줄의 코드로 구성할 수 있다. 같은 패턴이 네트워크, 파일, 암호화, 압축 등 곳곳에서 반복되므로, 한 가지를 익히면 여러 곳에 적용할 수 있다.
고통을 줄이는 동시성 모델
Go의 동시성 모델은 다른 언어와 비교했을 때 극명한 차이를 보인다.
goroutine은 OS 스레드가 아니라, 런타임이 OS 스레드 위에 다중화하는 경량 실행 단위다. 시작 비용이 약 2KB에 불과해서, 일반적인 노트북에서도 10만 개를 생성할 수 있다.

results := make(chan string, len(urls))for _, url := range urls {go func(u string) {resp, _ := http.Get(u)results <- resp.Status}(url)}for range urls {fmt.Println(<-results)}
별도 라이브러리, 별도 프레임워크, async/await 문법—no다. go 키워드와 channel만으로 병렬 HTTP 요청을 처리할 수 있다.
context.Context: 취소의 전파
context.Context는 Go에서 취소 전파를 처리하는 표준 방식이다. 사용자가 브라우저 탭을 닫으면, 해당 요청의 context가 취소되고, 이어서 데이터베이스 쿼리와 하위 HTTP 호출까지 자동으로 취소된다.
goroutine 누수나 좀비 쿼리를 방지하려면, context를 첫 번째 인자로 전달하고 존중하는 습관을 들이면 된다.
주말을 망치지 않는 의존성 관리
Go의 의존성 관리는 끔찍한 복잡성 없이 명확하게 작동한다. go mod init으로 모듈을 시작하면, 의존성은 go.mod와 go.sum에 기록된다. go.sum은 실제로 받은 각 의존성에 대한 암호학적 기록이므로, "내가 받은 것과 네가 받은 것이 다르다"는 상황을 방지할 수 있다.
node_modules지지옥, peer dependencies, optional dependencies, devDependencies—이런 개념이 없다. 오프라인 빌드가 필요하면 go mod vendor로 vendor/ 디렉터리에 의존성을 통째로 내려받을 수 있다.
컴파일러와 함께 제공되는 도구들
Go는 서드파티 플러그인이나 별도 설정 파일 없이도 강력한 도구를 제공한다:
• gofmt: 코드 포맷 자동 정렬
• go vet: 명백한 버그를 잡아내는 정적 분석
• go test: 유닛 테스트 및 벤치마크 실행
• go test -race: 데이터 레이스 탐지
• go tool pprof: CPU/메모리 플레임 그래프 프로파일링
배포는 복사 명령으로 끝난다
Go의 궁극적인 강점은 배포의 단순함에 있다. go build로 생성된 단일 바이너리를 서버에 복사하고, systemd로 관리하면 된다. Docker, Kubernetes, 복잡한 CI/CD 파이프라인이 필요 없다.
go build -o myappscp myapp user@server:/opt/myapp/systemctl restart myapp
이 네 줄이면 새로운 버전의 서비스가 운영 환경에 배포된다.
마무리: Go가 향하는 방향
Go는 "영리한 추상화"보다 읽기 쉬운 코드, 배포 가능한 결과물, 작은 운영 부담을 지향한다. 복잡한 프레임워크와 거대한 의존성 트리 대신, 단순하지만 충분히 강력한 도구로 문제를 해결하자는 언어다.
신입 개발자도 첫날부터 생산적으로 기여할 수 있고, 팀원 모두가 같은 스타일의 코드를 작성하며, 배포는 바이너리 하나 복사하면 끝이다.
만약 당신이 백엔드 서비스를 만들고 싶다면, 그리고 빠른 컴파일, 단순한 배포, 충분한 성능을 원한다면—그냥 Go를 써라.
📚 출처
• 그냥 빌어먹을 Go를 써라 (blainsmith.com)
tags: Go, Golang, 백엔드, 웹개발, 프로그래밍언어, 클라우드, DevOps, 동시성
📚 출처
'AI 뉴스' 카테고리의 다른 글
| Camofox Browser - AI 에이전트를 위한 스텔스 헤드리스 브라우저 완벽 가이드 (0) | 2026.05.09 |
|---|---|
| 당분간 새 소프트웨어를 설치하지 않는 게 좋을지도 모릅니다 (0) | 2026.05.09 |
| AI가 취약점 문화를 깨뜨리고 있다 — 보안 공개의 새 시대가 온다 (0) | 2026.05.09 |
| GPT-5.5 추론 레벨 완전 정리: low·medium·high·xhigh, 비용 대비 성능의 모든 것 (0) | 2026.05.09 |
| OpenAI, Codex에 "Pet" 기능 추가 — 에이전트 작업 상태를 눈앞에서 확인하는 펫 UI (1) | 2026.05.09 |