[네트워크] http 특징(stateless)

EMMA·2022년 1월 27일
0

[TIL 4] HTTP 의 특징 deepdive

일단 http에 대해 간략하게 정리 먼저 해보자면,
: hypertext 를 전송하는 프로토콜이나, 이제는 hypertext뿐 아니라 모든 형태의 데이터 전송 가능
: 서버 간 데이터 주고 받을 때도 http 사용하며, http/1.1이 가장 많이 사용됨 (TCP: http/1.1, or http/2)
: http/2, http/3은 업그레이드 버전으로 최근 사용량 증가 (UDP는 http/3을 주로 사용)
: request-response, 클라이언트-서버로 분리되어 있다는 것이 중요한 point!
(클라이언트-서버로 분리되어 단순하고 각각 side의 확장 가능 -> 다양하고 복잡한 비즈니스 로직 구현 가능)


특히 http에서 굉장히 중요한 특징은, 'stateless'한 상태를 지향한다는 것.

  • stateless vs stateful
    : stateless (무상태), 서버가 클라이언트 상태(정보)를 보존하지 않는 것
    : stateful (상태 유지), 서버가 클라이언트 상태(정보)를 지속적으로 체크 & 반영하는 것

얼핏 보면 stateful이 더 좋은 형태의 프로토콜 같지만, 반대다.

stateful의 문제
1) 클라이언트 - 서버 간에 지속적으로 관계가 유지되어야 함
2) 그래서 결국 서버를 무한대로 늘려야 하는 문제가 발생할 수 있음

stateless의 특징
1) 클라이언트는 반드시 동일한 서버와 지속적인 관계를 유지할 필요가 없음
2) 즉 아무 서버나 호출 가능하단 뜻
3) 그렇다고 단점이 없는 것은 아니다. 계속 모든 정보를 서버에 보내줘야 하고, '로그인' 과 같이 모든 것을 stateless 구조로 설계할 수 없음

결론은 stateful은 최소한으로 유지하고, stateless를 지향하는 것이 좋다는 것.
그래서 결국 http는 클라이언트-서버 연결을 유지하지 않고 서버를 매우 효율적으로 사용하는 특징을 갖는다.
그러나 이것 또한 무결한 것은 아니기에,
(아무리 짧은 시간이라 해도, 데이터 전송할 때마다 3 way handshake를 거쳐야 하고 html/css/js 등 모든 데이터들을 그때그때 다운로드 받아야 한다)

  • http 지속 연결 (persistent connection, 모든 데이터가 다운로드 되면 그 이후에 연결 종료)을 적용하는 추세다.
  • 앞서 소개되었던 http2, http3은 바로 이러한 비연결성과 속도 향상에서 업그레이드 된 것이고.

효율적으로 서버 관리하는 것, 그리고 어떠한 상황에서든 비연결성/속도 등과 같은 요소들을 잘 관리하느냐가 개발적으로 중요한 요소라는 것을 느꼈다.
  • http 메세지
    : 단순하고, 확장 가능하다
    : start line > header > empty line > message body 구조
    : 좀 더 살펴 보면,
    • start line
      : request line / status line으로 구성
      : get(리소스 조회), post(요청 내용 처리), put, delete 등 서버가 수행해야 할 동작 지정
      : 상태 코드 (200, 400(클라이언트 요청 오류), 500(서버 내부 오류)...)
    • header
      : http 전송에 따른 부가 정보 (메타 정보/ content-type, content-length...)
    • message body
      : byte로 표현할 수 있는 모든 데이터




내용 출처: 모든 개발자를 위한 HTTP웹 기본 지식, 김영한

profile
예비 개발자의 기술 블로그 | explore, explore and explore

0개의 댓글