4월 29일 - Stateless와 Connectionless

Yullgiii·2024년 4월 29일
0
post-thumbnail

Stateless와 Connectionless에 대한 설명

Stateless란?

Stateless는 서버가 클라이언트의 상태 정보를 유지하지 않는 설계 방식을 말한다. 이는 서버가 이전 요청에 대한 정보를 저장하지 않으며, 각 요청을 완전히 독립적으로 처리한다는 의미이다. 이로 인해 서버의 복잡성이 줄고 확장성이 증가하지만, 각 요청이 필요한 모든 정보를 포함해야 하므로 데이터 중복 전송이 발생할 수 있다.

Connectionless란?

Connectionless는 요청과 응답이 독립적으로 처리되며, 연결을 유지하지 않는 통신 방식을 말한다. 각 요청은 다른 요청과 독립적이며, 서버는 요청 사이의 연결 상태를 유지하지 않는다. 이 방식은 시스템 리소스를 절약하며, 많은 클라이언트와의 통신에 유리하지만, 각 요청이 전체 정보를 포함해야 하므로 통신 효율이 낮아질 수 있다.

왜 HTTP는 Stateless 구조를 채택하고 있는가?

HTTP가 Stateless 구조를 채택하는 주된 이유는 서버의 단순성과 확장성을 최대화하기 위해서이다. Stateless 구조를 사용하면 서버가 사용자의 상태 정보를 저장할 필요가 없어져, 서버 설계가 단순해지고, 서버 간에 요청을 자유롭게 분산시킬 수 있다. 이는 대규모 분산 시스템에서 서버를 추가하거나 제거하는 것을 용이하게 하며, 로드 밸런싱과 장애 허용성을 향상시킨다.

Connectionless의 성능 문제와 해결 방법

Connectionless 방식은 각 요청이 독립적으로 처리되기 때문에 성능 문제가 발생할 수 있다. 이를 해결하기 위한 방법으로는 다음과 같은 기술이 사용된다:

  • 캐싱: 자주 요청되는 데이터를 클라이언트 측이나 서버 측에서 캐싱하여, 반복적인 데이터 전송을 줄일 수 있다.
  • HTTP Keep-Alive: TCP 연결을 재사용함으로써, 여러 HTTP 요청이 같은 TCP 연결을 통해 전송될 수 있도록 한다. 이는 연결 설정과 해제에 소요되는 시간과 리소스를 절약할 수 있다.

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

  • TCP의 Keep-Alive: TCP 수준에서 연결이 여전히 활성 상태임을 보장하기 위해 주기적으로 킵얼라이브 패킷을 보내는 기능이다. 이는 네트워크 단절이나, 비활성 연결을 감지하는 데 사용된다.
  • HTTP의 Keep-Alive: HTTP 수준에서 동일한 TCP 연결을 여러 HTTP 요청/응답에 걸쳐 재사용할 수 있도록 하는 기능이다. 이는 특히 웹 페이지가 여러 리소스(이미지, 스타일시트 등)를 요청할 때 유용하여 연결 설정과 해제에 따른 오버헤드를 감소시킨다.

이 설명들은 프로토콜의 특성과 네트워크 통신의 복잡성을 이해하는 데 도움이 되며, 최적의 통신 전략을 설계하는 데 필수적이다.

profile
개발이란 무엇인가..를 공부하는 거북이의 성장일기 🐢

0개의 댓글