洪民憙 (홍민희) 블로그

프로토콜이 간단하다는 말의 의미

The HTTP must not be used for internal messaging as it’s easy, but not simple, quite the contrary it’s complicated protocol with 5 RFCs describing only basics. And misunderstanding smallest part of spec may lead to a security vulnerability. (via Materialistic)

어떤 표준 명세가 길고 복잡하다는 것과, 그 표준이 활용하기에 복잡하다는 것은 실무에서 꽤나 분리된 이야기다. HTTP를 바닥부터 구현하려면 할 게 매우 많다는 것은 자명하다. 하지만 HTTP를 활용하기 위해 HTTP를 직접 구현할 사람이 얼마나 되겠는가?

구조의 복잡함이란 구조를 위해 우리가 갖추고 있는 재료(primitives)에 상대적으로 평가되는 것이다. 예전에 썼던 글을 끌고 오자면,

관계형 데이터베이스가 고수준이라는 것은 우리가 현대에 사용하고 있는 전자 컴퓨터가 제공하는 프리미티브 위에서 복잡하게 구현해야 한다는 것을 뜻한다. 전자 컴퓨터가 제공하는 프리미티브는 우리가 수준1을 얘기할 때 생략되지만 암시적으로 가리키는 것이다. CSS 렌더링 엔진은 Linux보다 고수준이다. 하지만 JavaScript 프로그래머 입장에서는 CSS 렌더링은 프리미티브에 한없이 가까운 저수준이며 jslinux는 매우 고수준의 달성 과제이다. 전자 컴퓨터 위에서 구현하는 간단한 트리는 관계형 데이터베이스보다 훨씬 저수준이지만, 당연히 관계형 데이터베이스 위에서 nested set model로 구현하는 트리는 아무 것도 하지 않아도 이미 그 자리에 있는 관계형 데이터베이스에 비해 고수준이다.

HTTP는 클라우드 시대의 TCP가 되어버렸고, 현대의 프로그래밍 언어들은 HTTP 통신을 마치 파일 입출력 다음으로 흔한 것처럼 대우해준다. 요즈음 실무에서 네트워크 프로그래밍을 하려는데 HTTP만큼 프리미티브로 취급되는 빌딩 블럭도 소켓을 제외하면 찾기 힘들 것이다.

HTTP의 RFC 명세가 길고 복잡한데도 간단하다고 말하는 것은, IBM 호환 PC가 복잡한 물리적 구성요소로 이루어져 있음에도 구성하기에 간단하다고 하는 것과 비슷한 표현이다.


  1. 고수준이다 혹은 저수준이다 말할 때의 수준을 뜻한다.