Http

ys·2023년 12월 31일
0

Computer Science

목록 보기
1/5

오늘날 모든 데이터들이 Http 메시지를 통해 전송되고 있다. 웹 어플리케이션을 개발공부를 하면서, http 에 대해 확실히 정리하고 싶어서 포스팅을 적어보겠다.
김영한 강사님의 "모든 개발자를 위한 HTTP 웹 기본 지식" 강의를 들었습니다.

HTTP 특징

  1. 클라이언트 서버 구조
  2. 무상태 프로토콜(stateless)
  3. 비연결성
  4. Http 메시지
  5. 단순함, 확장 가능성

1.클라이언트 서버 구조

  • Request, Response 구조라고 한다.
  • 클라이언트는 서버에 요청을 보내고, 응답을 대기한다
  • 서버가 요청에 대한 결과를 만들어서 응답한다
  • 이렇게 클라이언트와 서버를 독립적으로 둔다면, 서로 독립적으로 진화 가능하다
  • 클라이언트는 UI,사용성에 집중하고, 비지니스 로직, data, 아키텍처 등등은 서버에서 집중할 수 있다.

2.무상태 프로토콜(stateless)

  • 서버가 클라이언트의 상태를 보존하지 않는 것이다.
  • 만약 서버가 stateful하다면, 클라이언트와 통신하는 서버가, 항상 같은 서버와만 통신해야 한다. 만약 통신하던 서버가 장애가 난다면 처음부터 다른 서버와 연결해서 다시 해야한다.
  • 하지만 무상태(stateless)라면, 서버에서 클라이언트의 정보를 저장하지 않으므로 통신하던 서버가 아닌, 아무 서버나 호출해도 된다
  • 스케일 아웃(수평 확장) 때 유효한데, 클라이언트의 요청이 많이 오면, 같은 기능을 하는 서버들을 확장하고, 통신 와중 아무 서버에 연결을 해서 많은 클라이언트의 요청을 해결한다.

Stateless의 실무 한계

  • 그렇다면 모든 것을 무상태(stateless)로 설계할 수 있을까?
  • 모든 것을 무상태로 설계할 수 있는 경우도 있고 없는 경우도 있다
  • 만약 로그인이 필요없는 단순한 서비스 화면 소개라면???
    • 정적 페이지에서는 stateless하게 설계해, 메모리를 보존한다
  • 상태유지가(statefull) 필요한 로그인 상황에서는???
    • 로그인했다는 상태를 서버에 유지해야 한다
    • 브라우저 쿠키, 서버 세션을 이용해 최소한의 상태 유지만 사용
    • 데이터를 많이 보내 서버의 세션이 날라가거나 서버가 죽으면, 로그인 했던 상태유지가 유지되지 않음-> 최소한만 사용!

3.비연결성

  • 한 서버가 여러 클라이언트와 통신을 하게 될텐데, 클라이언트의 요청이 없어도 서버의 연결이 계속 유지된다면, 서버 유지에 계속 자원을 소모하게 된다
  • 처음 클라이언트가 요청을 주기 전에 TCP/IP연결을 하는데, 서버의 응답이 끝나면 TCP/IP연결을 종료해 자원을 아끼는 것을 비연결성이라고 한다
  • 이는 HTTP가 기본이 TCP/IP연결을 유지하는 모델이라서 그렇다
  • 실제로 1시간동안 수천명이 서비스를 사용해서, 실제 서버에 동시에 처리하는 요청은 수십개 이하로 매우 작다 -> 서버 자원의 효율성
  • 하지만, 연결이 끝난 클라이언트가 다시 요청을 하려면 -> TCP/IP 연결을 새로 맺어야 한다 -> 3 way handshake사간 추가
  • 실제로 웹 브라우저에 사이트를 요청하면 HTML뿐만 아니라 css,image, java script등등 많은 요청이 오는데 이때마다 서버를 재연결 하기는 아쉽다
  • Http지속 연결(persistent Connection)으로 연결을 몇초동안 지속시켜놔서 한번의 연결에 모든 서버 정보를 다운 받게 한다

4.HTTP 메시지

  • 우리가 1번에서 클라이언트와 서버를 분리했다
  • 그렇기 때문에, 클라이언트가 서버에 요청하는 요청 HTTP 메시지와, 서버가 클라이언트에게 응답하는 HTTP 응답 메시지가 있다
  • 우리가 서버를 호출하면, 웹브라우저가 http요청 메시지를 만들어준다
  • 서버에서 http응답 메시지를 만들고, 클라이언트에게 전달해준다
  • HTTP 메세지시작라인, 헤더, 공백라인, 메시지 바디 이렇게 나눠져 있다.

http 요청 메시지

  • 시작라인 : http 요청 메시지의 시작라인은 request-line이라고 한다
  • 시작라인의 구성은 method SP request-target SP HTTP-version CRLF(엔터)
    • method : HTTP메서드(GET,POST,PATCH)
    • request-target : 요청 대상(/search), 절대경로+쿼리문
    • HTTP Version : http 버젼
  • HTTP 헤더
    • haeader-field = field-name ":" OWS fidle-value OWS
    • HTTP 전송에 필요한 모든 부가정보가 들어간다(뒤에서 상세하게..)
    • 표준 헤더형식, 임의의 헤더 추가 기능

http 응답 메시지

  • 시작라인: http 응답 메시지의 시작라인은 status-line이라고 한다
  • 시작라인의 구성은 HTTP-Version SP status-code SP reason-pharse CRLF
    • Http-version
    • status-code : Http 상태코드
    • reason-pharse : 사람이 이해할 수 잇는 짧은 상태 코드 설명 글
  • HTTP 헤더
  • HTTP 바디
    - 실제 전송할 데이터를 메시지 바디에 넣는다(POST방식)
    - HTML, 문서, 이미지, 영상, JSON등등 byte로 표현할 수 있는 모든 데이터를 전송 할 수 있다.

5.단숨함 확장가능

  • HTTP는 단순한다
  • HTTP 메시지는 단순
  • 크게 성공하는 표준 기술은 단순 + 확장가능한 기술
profile
개발 공부,정리

0개의 댓글