Copyright © Origin Corp. All Rights Reserved.
v1.0.10
로딩 중입니다
행복에는 덕이면 충분하다안티스테네스

2007년 9월 25일, 구글 본사 어느 사무실에서 세 명의 엔지니어가 컴파일이 끝나기를 기다리고 있었어요.
그 기다림이 새 언어를 낳았어요.
당시 구글의 코드베이스는 수천만 줄짜리 C++ 프로그램이었어요.
C++는 성능은 뛰어나지만 컴파일 속도가 느리기로 유명한 언어거든요.
코드 한 번 고치면 빌드가 끝날 때까지 수십 분씩 기다려야 하는 상황이었어요.
Rob Pike, Robert Griesemer, Ken Thompson, 이 셋은 빌드 대기 시간에 화이트보드 앞에 모여 이런 이야기를 나눴어요.
"이러다간 미치겠는데, 그냥 처음부터 컴파일 빠른 언어를 새로 만들면 안 돼요?"
회의 시작을 30분 기다리다가 메모장에 "아예 새 회사 차리자"고 적어버린 격이에요.
반전은 여기 있어요.
세계 최고 IT 회사의 최고참 엔지니어들이 "기능이 부족해서"가 아니라, "기다리기 지겨워서" 언어를 만들었다는 점이에요.
그 화이트보드 낙서가 그대로 Go 언어의 시작이 됐어요.

Go를 만든 사람의 이력에는 한 줄이 더 있어요.
당신이 매일 쓰는 macOS와 Linux의 토대를 만든 인물이라는 것이에요.
켄 톰슨은 1969년 벨연구소에서 유닉스를 만든 사람이에요.
유닉스는 오늘날 macOS, Linux, Android 모두의 뿌리가 된 운영체제로, 현대 컴퓨터가 작동하는 방식의 기초를 세웠어요.
그리고 1972년에는 C 언어의 직계 조상인 B 언어를 설계했고, 1983년에는 컴퓨터 과학 분야의 노벨상이라 불리는 튜링상을 받았어요.
그런 그가 64세에 다시 언어 설계실로 돌아온 거예요.
라이트 형제가 80세에 다시 비행기 도면을 꺼내 든 격이에요.
더 놀라운 건, 컴퓨터 역사를 두 번이나 다시 쓴 사람이 "이제는 C도 너무 복잡하다"며 더 단순한 언어를 만들겠다고 나섰다는 점이에요.
Rob Pike와 Robert Griesemer도 평범한 엔지니어가 아니에요.
Pike는 유닉스의 후계자를 목표로 만든 Plan 9 운영체제를 설계한 인물이고, Griesemer는 자바스크립트 엔진 V8의 초기 설계에 참여했어요.
역대 최강의 언어 설계자 트리오가 빌드 대기 시간을 이용해 언어를 스케치한 셈이에요.
2009년 공개된 Go에는 다른 모던 언어가 다 가진 기능들이 빠져 있었어요.
그 결핍이 의도였어요.
제네릭이 없었어요.
제네릭이란 "정수 리스트를 정렬하는 코드와 문자열 리스트를 정렬하는 코드를 하나로 합쳐서 쓰는 문법"이에요.
오늘날 대부분의 언어가 당연하게 지원하는 기능인데, Go에는 없었어요.
여기에 더해 예외(exception) 처리, 상속, 삼항 연산자, 함수 오버로딩까지 전부 빠져 있었어요.
개발자 커뮤니티는 Go가 나온 순간부터 "제발 제네릭 좀 추가해 줘"를 외쳤어요.
하지만 Go 팀은 12년 동안 거절했고, 2022년 3월 Go 1.18에 와서야 제네릭이 들어왔어요.
다른 식당들이 사이드 메뉴를 100개로 늘릴 때, 한 집이 "냉면 하나면 됩니다"를 12년간 고집한 격이에요.
Go 팀의 철학은 이거였어요.
"기능을 추가하는 건 쉬워요. 그런데 잘못 추가한 기능을 제거하는 건 불가능에 가까워요."
결국 "이건 너무 단순해서 못 쓰겠다"는 비판을 받던 언어가 가장 많이 쓰이는 인프라 언어가 됐어요.
기능을 빼는 데 집중했더니 오히려 더 많은 곳에서 쓰이게 됐다는 거예요.
이건 결코 당연한 결과가 아니에요.
오늘 당신이 켠 모든 앱의 뒷단 어딘가에는 Go가 돌고 있어요.
2013년 나온 도커는 소프트웨어를 컨테이너에 담아 어떤 환경에서도 동일하게 실행할 수 있게 해주는 기술이에요.
택배 박스처럼, 내용물이 어디서든 같은 상태로 배달된다고 이해하면 돼요.
그리고 이 도커가 Go로 짜여 있어요.
2014년 구글이 공개한 쿠버네티스는 그 컨테이너들을 수천 개 동시에 관리하는 도구예요.
카카오, 넷플릭스, 은행 앱 같은 대형 서비스가 트래픽에 따라 서버를 자동으로 늘리고 줄이는 게 바로 쿠버네티스 덕분이에요.
역시 Go예요.
테라폼, etcd, 프로메테우스, 헬름까지, 2010년대 클라우드 인프라를 구성하는 핵심 도구들이 줄줄이 Go로 작성됐어요.
이유는 세 가지예요.
빠른 컴파일, 단일 실행 파일 배포, 손쉬운 동시성이에요.
단일 실행 파일 배포란, 별도 설치 없이 파일 하나만 복사해서 바로 실행할 수 있다는 뜻이에요.
동시성이란, 여러 작업을 동시에 처리하는 구조인데 Go는 이걸 다른 언어보다 훨씬 쉽게 쓸 수 있어요.
"단순해서 못 쓰겠다"고 비판받던 언어의 단순함이, 정작 가장 복잡한 인프라를 떠받치는 힘이 됐어요.
그러니까 결국 이런 셈이에요.
2007년 빌드 대기 중에 짜증난 세 엔지니어가 화이트보드에 낙서한 그 아이디어가, 15년 뒤 전 세계 클라우드 인프라의 토대가 됐어요.
2007년 그날 빌드가 빨랐다면, 지금 우리가 쓰는 클라우드는 어떻게 달라져 있을까요.
TTS 음성이 없어요.
아래 버튼으로 나레이션을 생성할 수 있습니다.
2
개