요약

봇의 질문은 짧았지만 준비는 길었다

사람이라면 환율 페이지를 열면 된다. IRC 봇은 질문이 올 때마다 서버에서 숫자를 가져와야 한다. Stenberg는 프로젝트 연대기에서 Amiga 관련 채널의 봇을 만들다가 HttpGet을 찾았다고 설명한다. 브라질 개발자 Rafael Sagula가 1996년 11월 11일 공개한 자유 소프트웨어 명령줄 도구였다. Stenberg의 수정이 들어간 버전은 12월 17일 나왔다. 최초 작성자를 Stenberg로 바꾸거나 1996년 도구를 곧바로 curl이라 부르면, 실제 개발의 이음새가 사라진다.

HttpGet이라는 이름은 처음 일에는 정확했다. HTTP로 데이터를 가져오는 프로그램이었기 때문이다. 1997년에는 HTTP 주소를 명령줄에서 받고 프록시를 지원했다. 이어 Gopher 지원을 손보고 FTP 다운로드를 더했다. 할 수 있는 일은 여러 프로토콜로 넓어졌는데 이름은 HTTP에 묶여 있었다. 그해 8월 2.0판은 urlget이 됐다. 버전 기록은 이름 아래에서 코드가 이어졌다는 사실을 남긴다.

새 이름도 곧 좁아졌다. 1997년 안에 FTP 업로드와 HTTP POST가 들어왔다. 이제 프로그램은 받기만 하는 것이 아니라 보냈다. 환율 봇의 필요는 수신이었지만, 실제 도구는 양방향 전송을 익혔다. 명함이 하는 일을 따라가지 못한 셈이다.

다른 프로그램이 부를 수 있는 문을 만들다

1998년 3월 20일 curl 4가 나왔다. 버전이 4부터 시작하는 이유는 urlget의 후속이기 때문이다. 새 이름은 HTTP에도 다운로드에도 갇히지 않았다. SSL과 쿠키 등은 1998년을 거치며 추가됐다. 이름을 바꾼 날 모든 기능이 한꺼번에 태어난 것처럼 쓰면, 실제 서버와 부딪히며 쌓인 작업을 지워 버린다.

그렇지만 좋은 명령 하나가 곧 좋은 내장 부품은 아니다. 애플리케이션이 외부 명령을 실행하고 출력을 해석하는 방법은 거칠다. 공식 역사는 2000년 봄에 적절한 라이브러리 인터페이스를 위해 코드를 다시 짰다고 기록한다. 8월 7일 출시된 7.1판에는 easy 인터페이스가 들어갔다. 원본 변경 기록에는 공개 libcurl 심벌, 설치되는 헤더, 공유 라이브러리 빌드, 옵션 설정 호출이 보인다. 이런 세부사항이 있어야 남의 프로그램이 전송 엔진을 안정적으로 가져다 쓴다.

프로젝트 역사에는 같은 해 8월 제삼자가 만든 libcurl 바인딩도 등장한다. 유지보수 팀 밖의 개발자가 이 인터페이스를 자기 코드의 토대로 삼았다는 신호다. 현재 C API 문서는 옵션을 정하고, 전송하고, 자원을 정리하는 흐름을 보여 준다. 현재의 모든 기능을 2000년에 있었다고 소급할 수는 없다. 당시의 전환점은 명령을 실행하는 대신 라이브러리를 호출할 수 있게 된 데 있다.

이름을 바꾼 이유보다 비용을 줄인 방식

HttpGet은 HTTP 수신, urlget은 더 많은 주소 방식, curl은 보내고 받는 일, libcurl은 타인의 프로그램 안으로 들어가는 일을 담았다. 이름은 언제나 이미 실행되는 코드의 뒤를 쫓았다. 경제적 선택은 분명하다. 봇마다 프록시와 프로토콜과 전송 상태를 다시 구현하는 것보다 공통 엔진 하나를 유지하는 편이 싸다. 환율 한 줄을 가져오려던 일이 그 반복 비용을 계산하게 했다.