일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 서블릿
- BeanDefnition
- 스프링
- DI
- ExceptionResolver
- HTTP 요청 메시지
- REST #REST API #HTTP 메서드
- 백준4256
- 의존관계
- 스프링 타입컨버터
- BeanValidation
- 스프링 파일 업로드
- 커밋로그
- 웹 스코프
- 스프링 컨테이너
- 객체지향
- http
- 프로토타입 스코프
- 프로토콜 스택 4계층
- 깃허브 저장소 합치기
- BasicErrorController
- 체크에러
- HTTP메시지
- 김영한
- 스프링 빈
- 예외추상화
- 스프링 예외변환기
- 언체크에러
- 백준 2263
- HTTP 응답 메시지
- Today
- Total
Enthusiasm! Enthusiasm!
HTTP 기본 본문
HTTP(HyperText Transfer Protocol)
HTTP는 HyperText Transfer Protocol의 약자로 웹 상에서 정보를 주고 받을 수 있는 프로토콜이다. HTTP의 기본 개념들과 특징을 알아보자.
HTTP의 특징
- HTTP 메시지(헤더+바디)에 모든것을 전송한다.
- HTML,TEXT,이미지,파일,API…등 서버간에 데이터를 주고 받을 때도 HTTP를 사용한다.
- 가장 많이 사용하는 버전은 HTTP/1.1이다. 현재 2,3도 나왔으며 2까지는 TCP, 3부터는 UDP를 사용한다.
- 클라이언트<->서버 구조 / 무상태 프로토콜(Stateless) / 비연결성 HTTP 메시지 / 단순하고 확장 가능하다.
무상태 프로토콜
- 서버가 클라이언트의 상태를 보존하지않는다.
- 서버의 확장성이 높으나 클라이언트가 추가 데이터를 전송해야한다.
- Stateful과 Stateless의 차이는 다음과 같이 고객과 점원의 예시를 통해 쉽게 이해 가능하다.
-Stateful: 서버가 클라이언트의 상태를 계속 알고있어야 한다.
->ex) 이 노트북 얼마에요? / 2개 구매 할게요 / 신용카드로 구매 할게요
같은 점원(서버)이 계속 대화를 하면 위의 대화가 성립한다.(점원이 클라이언트가 무엇을 물어봤는지 알고있어 대화가 성립.)
만약 각 질문마다 다른 점원이 대답을 한다 가정하면, 두번째 질문을 받은 점원은 무엇을 2개 산다는지 알 수 없다. 세번째 점원도 무엇을 몇 개 신용카드로 구매할지 알 수 없다.
즉 중간에 서버가 문제가 생겨 다른 서버로 바뀌면 처음부터 다시 진행해야한다.
-Stateless: 서버가 클라이언트의 상태를 모르고 있어도 된다.
->ex) 이 노트북 얼마에요? / 노트북 2개 구매할게요 / 노트북 두개 신용카드로 구매할게요
각 질문마다 다른 점원이 문제 없이 응답할 수 있다.
즉 중간에 서버가 바뀌어도 계속 진행할 수 있다.
장점
- 갑자기 고객이 증가해도 점원을 대거 투입할 수 있다.
- 갑자기 클라이언트 요청이 증가해도 서버를 대거 투입할 수 있다.
- 무상태는 응답 서버를 쉽게 바꿀 수 있다. -> 무한한 서버 증설 가능
한계
- 모든 것을 무상태로 설계 할 수 없는 경우도 있다.
- 무상태 예시) 로그인이 필요 없는 단순한 서비스 소개 화면
- 상태 유지예시) 로그인한 사용자의 경우 로그인 했다는 상태를 서버에 유지
- 일반적으로 브라우저 쿠키와 서버 세션등을 사용해서 상태 유지, 최소한만 사용하는게 좋다.
비 연결성(connectionless)
- HTTP는 일반적으로 초 단위 이하의 빠른 속도로 응답하기 때문에 기본이 연결을 유지하지 않는 모델이다. 따라서 서버 자원을 효율적으로 사용 가능하다.
- 1시간 동안 수천명이 서비스를 사용해도 실제 서버에서 동시에 처리하는 요청은 수십개 이하로 매우 적다. 이는 모든 사용자가 동시에 검색버튼을 누르거나 하지 않기 때문이다.
- 단점은 매번 TCP/IP 연결을 새로 맺어야 한다. 웹 브라우저로 사이트를 요청하면 HTML 뿐만 아니라 JS, css, 이미지등 다른 자원이 함께 다운로드 되어야 하는데, 각 과정마다 연결을 맺었다 끊으면 시간이 낭비된다.
- 현재는 HTTP 지속 연결로 단점을 해결하였다.
HTTP 메시지
HTTP 메시지는 HTTP 요청 메시지와 HTTP 응답 메시지로 나뉜다. 이 메시지들의 기본 구조와 간단한 특징을 알아보자.
HTTP 메시지 구조
-요청 메시지는 대부분 시작 라인과 헤더를 통해 내용을 전달하며, 대부분 body를 사용하지 않는다.(사용할 수는 있음)
-응답 메시지는 시작라인,헤더,메시지 바디를 전부 사용하며 메시지 바디에 전송할 데이터를 담아 전송한다.
HTTP 요청 메시지
시작라인
- HTTP 메서드: GET, POST, PUT, DELETE …등이 있으며 서버가 수행해야할 동작을 지정한다.
- 요청 대상 absolute-path[?query] (절대경로[?쿼리]) 형식이다. (절대경로= "/" 로 시작하는 경로)
- HTTP 버전: HTTP의 버전을 명시한다.
헤더
- 요청메시지에서의 헤더는 General 헤더와 Request헤더 등이 있다. 추후 구체적으로 다룰 예정이다.
HTTP 응답 메시지
시작라인
- HTTP 버전, 상태코드,이유문구(사람이 이해할 수 있는 짧은 상태코드)
- 상태코드 200:성공, 400:클라이언트 내부 오류, 500:서버 내부 오류 등
헤더
- HTTP 전송에 필요한 모든 부가정보
- 예) 메시지 바디의 내용, 메시지 바디의 크기, 압축, 인증, 요청 클라이언트(브라우저) 정보,
메시지 바디
- 실제 전송할 데이터를 담는다.
- HTML 문서, 이미지, 영상, JSON 등등 byte로 표현할 수 있는 모든 데이터 전송 가능
이상으로 HTTP의 기본 개념과 HTTP 메시지 바디에 대해 알아보았으며, 세부 내용은 이후 포스팅에서 구체적으로 다룰 예정이다!
이전 포스팅-https://yulddong.tistory.com/18
인터넷 네트워크와 웹 브라우저 요청 흐름
인터넷 네트워크 기초 인터넷 망은 복잡한 구조로 되어있다. 인터넷에서 컴퓨터끼리 통신하는 방법에 대해 알아보자. 인터넷 프로토콜 스택의 4계층 인터넷 프로토콜 스택 4계층이란 인터넷에
yulddong.tistory.com
다음 포스팅-https://yulddong.tistory.com/21
HTTP 메서드
이번 포스팅에서는 HTTP API를 설계하는 과정을 통해 HTTP 메서드가 어떻게 사용되는지 설명하겠다. 다음과 같이 회원정보 API를 만든다고 가정하자. 두 API중 어느게 더 좋은 API 일까? API에서 URI를
yulddong.tistory.com
이 포스팅은 모든 개발자를 위한 HTTP 웹 기본지식 (By Inflearn 김영한님) 강의 및 강의자료를 참고하여 작성하였습니다.
'자바 스프링 > HTTP웹 기본지식' 카테고리의 다른 글
HTTP 헤더 (0) | 2023.04.03 |
---|---|
HTTP 상태코드 (1) | 2023.02.02 |
HTTP 메서드 (0) | 2023.01.29 |
인터넷 네트워크와 웹 브라우저 요청 흐름 (0) | 2023.01.16 |