“TCP 서버에요 HTTP 서버에요?”
“네…?”
“아, 그러니깐 소켓 서버냐고요 HTTP 서버냐고요.”

TCP 서버는 뭐고 HTTP 서버는 뭐지?
소켓 서버랑 HTTP 서버는 다른건가?

사실 뭘 묻는건지 알고는 있었습니다.

HTTP와 JSON 궁합이 세상을 점령하기 전에 또 다른 세상이 있었습니다.
listen, bind, accept, connect, send, recv 등의 함수로 직접 소켓프로그래밍을 해서 서버와 클라이언트를 만들어야 했던 시절.

iocp 를 쓸지, epoll 을 쓸지 fork 를 쓸지.
클라이언트와 통신할 프로토콜도 직접 정의합니다.

이 메세지의 헤더 길이는 몇 바이트야.
첫 바이트는 이런 뜻이고, 바디 길이는 여기에 적혀있어.
바디는 살짝 암호화를 할껀데, 이렇게 풀면 돼.
클라이언트에게 말합니다. “조심해서 잘 파싱해.”

이렇게 서버를 만들면 이 서버를 TCP 서버라고 부르곤 했습니다.
아파치 같은 웹서버를 사용하면 HTTP 서버라고 불렀습니다.

“TCP 서버에요 HTTP 서버에요?”
라는 질문은 서버를 직접 짰어요 아니면 아파치나 nginx 같은 웹서버를 사용했어요? 라는 질문이었습니다.

저는 이상했습니다.
어? 그런데 HTTP는 TCP가 아닌가? TCP 위에 얹은 애플리케이션 프로토콜일 뿐인데.
서로 레이어가 다른데 왜 TCP 서버냐 HTTP 서버냐라고 묻는거지?
차라리 커스텀 프로토콜 서버냐 HTTP 서버냐라고 물어보지.

저는 이상했지만 이런 생각은 속으로만 했습니다.
“아, TCP 서버에요.”
“아, HTTP 서버에요.”

물어보는대로 대답했습니다.

‘HTTP 서버는 TCP 서버가 아닌가요?’
라고 물어보는 순간 저 우주까지 가는 긴 대화가 이어질 수 있기 때문에…

함께 읽으면 좋은 글: