728x90

여러분, 혹시 친구와 나눈 대화를 기억하지 못해서 당황했던 적 있으신가요?

 

"어? 네가 그 얘기 했었어? 난 기억이 안 나는데..."

 

이런 상황이 발생하면 뭔가 민망하지만, 상대는 이런 대화를 Stateless한 태도로 받아들일 수 있을지도 모릅니다.

 

오늘은 이런 "기억하지 않는 대화"와 비슷한 Stateless, 그리고 그와 연관된 Connectionless에 대해 이야기해볼까 합니다.


Stateless란 무엇인가요?

Stateless는 말 그대로 "상태를 기억하지 않는 것"입니다.
쉽게 말해, 여러분이 음식점에서 주문할 때를 떠올려봅시다.

  1. 여러분: "김치찌개 주세요!"
  2. 직원: "네"
  3. 직원: "누구 김치찌개 시켰나요?"
  4. 여러분: "저요!"

직원은 여러분의 상태를 기억하지 않습니다.
다시 말해, 여러분이 누구인지, 이전에 뭘 주문했는지에 대한 정보는 그때그때 잊혀지는 거죠.
HTTP도 딱 이와 같습니다.

HTTP는 요청과 응답 사이에 상태를 저장하지 않습니다.
즉, Stateless한 프로토콜입니다.


Connectionless란 무엇인가요?

Connectionless는 연결을 유지하지 않는다는 의미입니다.
마치 음식점에서 음식을 주문하고 나면, 직원이 테이블 옆에 서서 대기하지 않는 것과 비슷하죠.

  1. 여러분: "김치찌개 주세요!"
  2. 직원: "네" (메모한 뒤 떠남)

직원이 계속 옆에 서 있으면 더 빨리 요구를 들어줄 수도 있겠지만,
그렇게 하면 다른 손님들에게 서비스를 제공하지 못하게 되는 문제가 생깁니다.

HTTP의 Connectionless도 마찬가지입니다.

클라이언트(브라우저)와 서버는 요청을 보낸 뒤 연결을 끊고, 다음 요청 때 다시 연결을 시작합니다.


HTTP는 왜 Stateless를 채택했을까요?

"왜 기억을 안 하지?"라고 궁금할 수 있습니다.
그 이유는 간단합니다: 확장성과 효율성 때문이죠.

  • 확장성:
    상태를 기억하지 않으면 서버는 요청이 올 때마다 독립적으로 처리할 수 있습니다.
    많은 사용자가 동시에 접속해도, 서로의 상태를 신경 쓰지 않아도 되니 시스템이 더 단순해지고 확장성이 높아집니다.
  • 효율성:
    상태를 저장하려면 많은 메모리와 자원이 필요합니다.
    기억해야 할 정보가 많아질수록 서버는 더 느려지겠죠?
    하지만 Stateless구조라면 이런 부담을 줄일 수 있습니다.

여기서드는 의문!

 

"확장성과 효율성을 위해 Stateless하고, Connectionless하면 요청 할 때마다 연결을 끊고 다시 맺을텐데,

성능의 문제가 생길 수 있지 않을까요?"

 

이를 해결하기 위해 "Keep-Alive"가 등장하게 됩니다.


HTTP의 Keep-Alive: "계속 얘기하자!"

음식점 상황을 다시 생각해 봅시다.

  • 기본 HTTP 방식:
    직원이 주문을 받을 때마다 떠났다가 다시 돌아옵니다.
  • HTTP Keep-Alive 방식:
    "저 김치찌개 말고 밥도 추가요!"
    직원이 "네, 계속 말씀하세요!"라고 하며 테이블을 계속 오갑니다.

Keep-Alive는 여러 요청을 처리할 때 연결을 유지한 채 대화를 이어가도록 해줍니다.
그 덕분에 매번 연결을 새로 맺을 필요가 없어 성능이 개선됩니다.


TCP의 Keep-Alive와 HTTP의 Keep-Alive의 차이

HTTP에서의 Keep-Alive와 TCP의 Keep-Alive는 어떤 차이가 있는지 알아보겠습니다.

 

이제 조금 더 깊이 들어가서, TCP Keep-AliveHTTP Keep-Alive의 차이를 알아봅시다.

  1. TCP Keep-Alive:
    TCP 레벨에서 네트워크 연결이 끊어졌는지 확인하는 작은 패킷을 주기적으로 보내는 기능입니다.
    즉, "연결이 살아 있나?"를 체크합니다.
  2. HTTP Keep-Alive:
    HTTP 요청과 응답을 처리할 때 연결을 유지하는 기능입니다.
    "새로운 연결을 맺지 말고 기존 연결을 재사용하자"는 뜻입니다.

비유하자면,

  • TCP Keep-Alive는 친구가 계속 살아있는지 확인하는 안부 전화이고,
  • HTTP Keep-Alive는 한 번에 많은 대화를 효율적으로 끝내는 방법입니다.

 

이러한 기능들은 우리가 사용하는 HTTP프로토콜에서 간단하게 확인해 볼 수 있는데요.

 

HTTP 1.1버전 기준으로 Connection속성keep-alive가 Default로 설정되어있고,

이에 대해 keep-Alive는 60초Timeout을 가지게 됩니다.


Reference

https://developer.mozilla.org/en-US/docs/Web/HTTP/Overview

https://en.wikipedia.org/wiki/HTTP_persistent_connection

https://blog.naver.com/whdgml1996/222153047879

 

728x90

+ Recent posts