HTTP는 요청할 때 마다 새롭게 연결하나요?

주싱·2022년 4월 9일
9

Network Programming

목록 보기
9/21

HTTP 는 요청을 할 때 마다 새로운 연결을 맺습니다.

잘못된 정보

위 문장은 제가 웹 프로젝트를 처음 시작하고, 한 개발자 모임에서 들은 이야기입니다. 그 당시 저는 TCP 기반의 네트워크 프로그래밍을 많이 해오던 상태였는데 매우 의아했습니다. 간단히 전해 들은 그 분의 요지는 아래와 같았습니다.

  • HTTP 는 Stateless 하다. 연결을 유지하는게 불필요한 상태 관리를 요구한다.
  • 요청할 때 마다 연결을 맺는 것 정도는 아무런 부하도 주지 않는다.

그때 당시 웹 프로젝트를 하고 있었지만 저는 여전히 TCP 프로토콜을 직접 다루는 장비 제어 파트를 맡고 있어서 HTTP 를 직접 다룰 일이 없었습니다. 그래서 그냥 그런가 보다 하고 깊이 살펴보지 않았던 것 같습니다.

HTTP 학습 시작

최근에 Armeria 라는 프로젝트에 기여해 보고 싶어서 작은 이슈를 수정해 보았는데 제가 HTTP 에 대한 이해도가 많이 떨어진다는 느낌을 받았습니다. 그래서 공부를 시작했습니다. HTTP 완벽 가이드라는 책도 한권 사고 이것 저것 Wireshark 로 HTTP 패킷도 캡쳐해서 들여다 보기 시작했습니다. 오늘은 문득 예전에 들었고 의아했던 위 문장이 생각났습니다.

HTTP 는 요청할 때 마다 새로운 연결을 맺는다는데 진짜 그런지 네트워크에서 확인해 봐야겠다.

올바른 정보

일단 Wireshark 로 패킷 캡처를 시작하고 웹브라우저에서 네이버에 접속해 보았습니다. 간단히 패킷들을 보기좋게 필터링도 하고 tcp 연결과 연결 종료가 언제 발생하는지 약 5분 가량 지켜보며 테스트 해보았습니다.

제가 약 5분 가량 패킷을 캡처하며 눈으로 확인해 본 결과는 아래와 같습니다.

  • TCP 연결은 네이버에 접속하는 처음 한 번만 발생합니다.
  • 1번째, 2번째, 이어지는 모든 요청과 응답에 동일한 TCP 연결이 사용됩니다. (즉 연결이 지속됩니다)
  • 제가 네이버에 머두는 동안 연결이 끊어지지 않습니다.
  • 심지어 네이버 탭을 닫아도 연결이 끊어지지 않습니다.
  • 크롬 자체를 닫으니 그때 연결이 끊어집니다.

책의 설명

구입한 HTTP 완벽 가이드 책을 더 찾아보았습니다. 아래와 같이 설명이 나옵니다. 책은 HTTP/1.1 에 대해 설명하지만 위 캡처한 내용은 HTTP/2 에 대한 내용임으로 HTTP/2 에서도 동일한 것 같습니다.

HTTP/1.1의 지속 커넥션은 기본으로 활성화되어 있다. HTTP/1.1에서는 별도 설정을 하지 않는 한, 모든 커넥션을 지속 커넥션으로 취급한다. HTTP/1.1 애플리케이션은 트랜잭션이 끝난 다음 커넥션을 끊으려면 Connection: close 헤더를 명시해야 한다. HTTP/1.1 클라이언트는 응답에 Connection: close 헤더가 없으면 응답 후에도 HTTP/1.1 커넥션을 계속 유지하는 것으로 추정한다.

마치며

인터넷에 정보가 넘치고 주변 개발자들의 얘기도 쉽게 들을 수 있는 시대이지만 여러가지 문맥 안에서 올바른 정보를 정확하게 확인하는 노력이 필요한 것 같습니다. 혹시 제 글에도 오류가 있다면 댓글 남겨주세요 😊

profile
소프트웨어 엔지니어, 일상

3개의 댓글

comment-user-thumbnail
2022년 4월 11일

좋네요 .. 한 가지 추가하자면 Connection 헤더는 HTTP/2 부터는 무시됩니다. 연결관리가 HTTP/2 부터는 다른 메커니즘에 의해서 동작하기 때문이죠. 번역은 살짝 구리지만 HTTP/2 in action 책도 추천드립니다!

1개의 답글