HTTP 통신을 이해해보자 -3

박가현·2023년 6월 5일
2

HTTP

목록 보기
3/8
post-thumbnail

http란?

데이터를 어떤 형태로 요청하고 보낼지를 결정하는 규약

HTTP는 OSI 7 계층과 TCP/IP를 기준으로는 애플리케이션 레이어 속하는 프로토콜이기에 tcp 기반으로 http 가 만들어진다.

현재는 http/2 와 http/3가 나와서 점점 증가하고 있지만 http/1.1이 가장 많이 사용하는 버전이고 http/2와 http/3은 이에 성능을 개선한 버전이라고 생각하면 좋다

아래 내용은 http/1.1에 대해서 다룰 것이다



클라이언트 서버 구조


클라이언트와 서버는 어떻게 구조를 이룰까?

클라이언트와 서버는 요청과 응답으로 구조를 이룬다.

클라이언트는 서버에 요청을 보내고 응답을 대기하고 서버는 요청을 전달받으면 그에 대한 결과를 만들어서 응답한다

클라이언트와 서버를 분리하는게 왜 중요할까?

독립적 진화

비즈니스 로직과 데이터는 서버에 존재하고 ui와 사용성 관련된 부분은 클라이언트에 존재한다 이런 상태이면 데이터가 엄청 많아도 클라이언트에서 트래픽과 같은 문제에 대해서 고민하지 않아도 된다

클라이언트에서는 ui/ux에 대한 고민, 서버에서는 로직과 데이터에 대한 고민으로 양쪽이 독립적으로 진화가 가능하다



Stateless 무상태성


stateful 상태유지

ex)

고객: 이 노트북 얼마인가요?
• 점원: 100만원 입니다.

 고객: 2개 구매하겠습니다.
• 점원: 200만원 입니다. 신용카드, 현금중에 어떤 걸로 구매 하시겠어요?

고객: 신용카드로 구매하겠습니다.
• 점원: 200만원 결제 완료되었습니다.

상태유지라는 것은 말 그대로 문맥을 이해하고 앞의 대화를 기억하며 상태를 유지할 수 있다

stateless 무상태

고객: 이 노트북 얼마인가요?
• 점원A: 100만원 입니다.

고객: 2개 구매하겠습니다.
• 점원B: ? 무엇을 2개 구매하시겠어요?

 고객: 신용카드로 구매하겠습니다.
• 점원C: ? 무슨 제품을 몇 개 신용카드로 구매하시겠어요?

무상태는 상태를 유지하지 않기에 문맥이 사라지고 전의 대화들을 기억하지 못한다

(예시에서는 중간의 점원이 바뀐다고 생각하면 이해가 쉬움)

클라이언트 서버 연결은 이와 같이 무상태성으로 연결한다

고객: 이 노트북 얼마인가요?
• 점원A: 100만원 입니다.

고객: 노트북 2개 구매하겠습니다.
• 점원B: 노트북 2개는 200만원 입니다. 신용카드, 현금중에 어떤 걸로 구매 하시겠어요?

고객: 노트북 2개를 신용카드로 구매하겠습니다.
• 점원C: 200만원 결제 완료되었습니다

이런 무상태의 장점은?

위 예시처럼 중간에 다른 점원이 바뀌어도 되니까 한 고객당 한 점원만 담당하지 않아도 되고 점원을 대거 투입할 수 있다

이를 클라이언트 서버에서 예로 든다면 상태유지는 항상 같은 서버가 유지되어야 하기에 중간에 서버에 장애가 발생하면 문제가 된다 하지만 무상태성은 아무 서버나 호출해도 되고 클라이언트 요청이 증가해도 서버를 대거 투입할 수 있고 무한한 서버 증설 가능하다 (스케일 아웃)

  • stateless 실무 한계
    • 로그인 같은 경우에는 상태 유지가 필요한데 이때는 쿠키와 세션 등을 사용해서 상태를 유지한다

비연결성


tcp와 ip 같은 경우는 클라이언트와 서버의 연결을 유지한다



하지만 이와 같이 연결을 유지하게 되면 클라이언트 2 와 3이 요청을 하지 않아도 서버와 계속 연결이 되어있고 그러면 이는 서버 자원 소모로 이어진다

이를 위해 http는 연결을 유지하지 않는 모델로 비연결성으로 이어진다

요청과 응답이 끝나면 바로 연결을 끊어버리는 것은 자원을 최소화로 줄이고 빠른 속도로 응답을 가능하게 만든다

예를 들어 1시간동안 수천명이 서비스를 사용해도 실제 서버에서 동시에 처리하는 요청은 수십개 이하이므로 서버에서 자원을 효율적으로 사용할 수 있다

  • 비연결성 한계
    • tcp/ip 연결을 새로 맺어야 한다 3way handshake 시간 추가



http 메시지


http 메시지는 공통으로

아래와 같은 구조를 가지고 있다

ex ) 요청메시지

ex) 응답 메시지

시작라인

  • 요청 메시지
    • http 메서드와 요청대상과 http version이 들어간다 요청대상은 절대경로에다가 쿼리합쳐서 들어간다
  • 응답메시지
    - http 버전과 상태코드와 reason phrase (http 상태 코드 나타내는 사람이 읽을 수 있는 문구 ex 200번대면 ok)

헤더

헤더는 아래와 같은 형식이다

field-name ":" OWS field-value OWS (OWS:띄어쓰기 허용)

ex) 요청메시지 Host : www.google.com

ex) 응답메시지 Content-Type:text/html;charset=UTF-8

→ 예시일뿐 요청메시지는 저런 헤더만 응답 메시지는 저런 헤더만 들어간다는 뜻이 아님

용도는 메타데이터 정보를 위해서이다

ex) 메시지 바디의 크기 , 인증 , 캐시 관리 정보

메시지 바디

  • 실제 전송할 데이터
  • 필수가 아니다


위 내용은 김영한 - 모든 개발자를 위한 HTTP 웹 기본를 바탕으로 작성되었습니다.

profile
프론트엔드 공부일지

0개의 댓글