Difference HTTP Keep Alive & WebSocket

song for the mute
5 min readFeb 22, 2023
Photo by NASA on Unsplash

요즘 웹 성능 최적화에 관련된 내용을 배우고 있는데, 테크닉을 배우고 적용하기에 앞서, 네트워크 통신에서 HTTP의 발전을 공부하다가 HTTP/1.0에서 도입된 지속적 연결, 혹은 연결 재사용 기술이라고도 하는 Keep-Alive를 보며 문득 의문이 생겼다.

기본적으로 HTTP는 Stateless한 통신 방식의 프로토콜로, 초기에는 클라이언트가 서버에 연결을 요청할 때마다 TCP 연결에서 ACK, SYN 패킷 교환을 통해 신뢰성을 확보하는 과정인 3-way Handshake 과정을 거쳤다.

하지만 웹이 발전하며 콘텐츠가 다양하고 복잡해지며 무거워지면서, 그런 콘텐츠들을 여러 번 요청하게 되는 경우, 매 요청마다 3-way Handshake를 하게 되면서 반복적인 작업이 발생하고, 이는 곧 웹 페이지 로딩 시간의 증가와 사용자 경험의 하락으로 이어지게 된다.

그런데 이전에 Node.js를, 무언가를 구현해 보며 학습하기 위해서 했던 것들 중에, socket.io로 WebSocket 프로토콜을 이용해 간단한 리얼 타임의 메시지 기능을 구현했던 적이 있었다.

그래서 여기서, 의문이 발생했다.

HTTP의 Keep-Alive는 지속적 연결 방식이라고도 부르는데, 그렇다면 같은 TCP 통신 방식을 사용하며 클라이언트와 서버가 연결을 유지한 상태로 패킷을 교환하는 방식인 WebSocket 프로토콜과 무엇이 다른가? 방식이 유사하다면, Keep-Alive 기술도 비용이 많이 발생하게 되는 것이 아닐까?

그래서 이에 대한 의문을 Stack Overflow에서 해결할 수 있었다 — 사실 이전에 습득하는 과정에 있어 깊이가 없었던 듯하다.

HTTP Keep-Alive는 클라이언트가 서버와의 지속적 연결 방식을 취하기 위해 사용된다. 이를 통해 한 번 연결되면, 제한 시간 내에는 신뢰할 수 있는 연결을 위해 3-way Handshake를 재차 하며 발생시킬 수 있는 오버헤드가 없어지는 것이다.

하지만 연결이 되어 있는 동안 결국 통신 프로토콜은 HTTP의 요청 및 응답 방식을 따르기 때문에, 클라이언트가 서버에 데이터를 요청하고 응답받는 것은 가능하지만, 서버가 원할 때에 클라이언트에게 데이터를 보내줄 수는 없다.

하지만 WebSocket은 다르다. 양방향 전송 프로토콜이므로, HTTP처럼 클라이언트가 서버에게 데이터를 요청하고 응답받는 것은 물론이며, 서버 또한 언제든지 원하는 때에 클라이언트에게 데이터를 보내줄 수 있다.

결국 Keep-Alive도 HTTP를 따르는, HTTP의 기술이었던 것이다.

의문은 해결되었지만, 기존의 프로젝트에서도 추가 혹은 시험해 볼 수 있을까 싶은 호기심이 새로이 생겨 MDN 문서를 찾아본 결과, 현재는 Deprecated 되어 실제 프로덕션에서는 사용하지 말라는 권고를 하고 있으며, Keep-Alive는 HTTP/2에서 무시된다는 사실을 알려 주고 있다.

그렇다면, HTTP/2가 차세대 표준이므로 거의 모든 부분에서 HTTP/1.1 보다 더 괜찮을 것이라고 생각했다. 하지만, 해당 글에 의하면 HTTP/2이 HTTP/1.1보다 확실히 일반적으로 개선되었으나 모든 상황에서 항상 더 나은 성능을 보여주는 것은 아니라고 한다.

특히, 최선의 연결 상태가 아닌 모바일 사용자가 많고, 상대적으로 요청이 적은 애플리케이션의 경우에 HTTP/2가 일반적인 성능을 저하시킬 수 있다고 한다.

또한 당연한 이야기겠지만, 이식한다면 기존의 프로덕트나 서비스에서 마이그레이션에 필요한 시간이나 비용 등도 발생할 수 있을 것이다.

아무리 생각해도 확실히 여타 다른 사람들보다 일찍이 컴퓨터와 웹 환경을 접했지만 그 내부는, 엄청나게 복잡하고 고도화되어 있다고 느낀다.

여태 네트워크 통신과 프로토콜에 관련된 이야기가 그런 이유와 꽤 추상적인 이야기 같아 선뜻 와닿지 못했는데, 몇 번의 프로젝트를 하며 배포까지 진행하여 나의 웹 페이지를 만들어 보고 그런 간접 된 경험에 접목시켜 이해하니, 이제서야 필요성에 의한 네트워크 학습에 그치지 않고 순수한 기술로서의 네트워크에 대한 흥미와 호기심이 생기고 있다.

--

--

song for the mute

A FE developer who dreams of sustainable development and is interested in user interfaces and user experiences.