728x90
HTTP 란?
- HyperText Transfer Protocol
- 무상태 프로토콜이며 비연결성프로토콜이다 ⇒ Stateless && connectionless
- image, 음성, 영상, 파일
- json, xml 등의 api
- 이외에도 거의 모든 형태의 데이터 전송 가능
- 데이터 전달에도 거의 HTTP 사용!!
- 아주 예외적인 경우 아니면 거의 HTTP 사용!!
- HTTP 는 아주 다양한 버전이 있으나 1.1 버전이 특히 많이 사용된다.
1) HTTP의 특징 : 무상태 프로토콜 - Stateless
- 서버가 클라이언트의 상태를 보존X
- 장점 : 서버 확장성이 높다
- 단점 : 클라이언트가 추가 데이터 전송
Stateful 과 Stateless 의 차이
- Stateful : 상태유지 ⇒ 서버가 클라이언트의 상태 유지
- 상태가 유지된다고 하는것은 서버쪽에서 내가 뭘 선택했는지 알고 있다는 것!
- 결국 서버와 클라이언트는 아래와 같은 대화가 진행될 것이다.
나 : 상품 A 선택할게
서버 : Ok 상품 A 선택 저장
나 : 신용카드로 결제할래
서버 : 좋아 상품 A 선택했고, 신용카드 선택했어
나 : 200만원 결제할게
서버 : 확인! 너는 상품 A를 신용카드로 200만원 결제했어. 배송비는 별도야^^
- Stateless : 무상태 ⇒ 서버가 상태 유지 X, 클라이언트가 그때 그때마다 서버에게 내용을 모두 전달
- 서버에서 클라이언트의 상태가 유지되지 않기에 클라이언트는 서버가 필요한 정보를 그때 그때마다 모두 전달!
- 결국 서버와 클라이언트는 아래와 같은 대화가 진행될 것이다.
나 : 상품 A 선택할게
서버 : 응 그런던지(저장X)
나 : 상품 A를 신용카드로 결제할래
서버 : 응 그러던지(내용저장X)
나 : 상품 A를 신용카드로 200만원 결제할게
서버 : 오키! 주문할게 근데 배송비는 별도야!
요약하자면 Stateful 과 Stateless 는 결국 클라이언트의 정보를 저장하는 쿠키와 세션이 있고 없고의 차이로 정리할 수 있다.
결국 Stateful 과 Stateless 가 왜 필요할까?
바로 Stateful 에서 발생하는 아래의 문제점으로 인해서이다.
- 하지만 기업의 서비스를 이용하는 사람들의 숫자가 많아서 서버를 10대를 쓴다면 이제 문제가 발생한다.
- 클라이언트가 서버에 요청할 때마다 동일한 서버에만 요청을 하는 것이 아니다. 1 번 서버에 처음 접속하여 2번 서버에서 물건을 선택하고 3번 서버에서 결제 정보를 확인하고 10번 서버에서 결제를 처리하게 된다면 Stateful 의 경우 ‘서버가 상태를 저장’ 하고 있어야하는 만큼 서버에서 서버로 넘어갈 때 사용자 요청 처리에 대한 내용에 공백이 생기게 되고 서비스가 제대로 이루어 질 수가 없다. 아니면 각 서버로 넘어갈때마다 서버에서 서버로 다시 정보를 넘겨주어야한다.
- 반면 Stateless 는 이런 문제에서 자유롭다. 왜냐하면 10번 서버에서 결제를 처리 할 때 클라이언트쪽에서 서버에 모든 정보를 전달하기 때문에 다른 서버로 옮겨가더라도 내가 현재 도달한 서버가 장애가 나서 다른 서버로 가더라도 전혀 문제가 생기지 않는다.
- 이러한 문제점에 의해서 그리고 HTTP 프로토콜 자체도 무상태 프로토콜임으로 Stateful 상태유지는 최소한으로만 사용해야하며 최대한 무상태로 설계가 필요하다.
HTTP의 특징 : 비 연결성 프로토콜
- 클라이언트가 요청하고 서버는 응답하고 연결 종료!!
- HTTP 는 기본이 연결을 유지하지 않는 모델
- 일반적으로 초 단위 이하의 빠른 속도로 응답
- 서버 자원을 매우 효율적으로 사용할 수 있음
- 그러나 단점도 분명히 있다.
- 연결이 종료되면 다시 연결을 해야한다 → 3 way handshake 를 다시 해야한다.
- 웹 브라우저로 많은 자원이 다운로드된다 → js, css 등등 ⇒ 연결하면 또 받아야한다
- 이런 단점을 해결하기 위해 최근에는 지속 연결 - Persistent Connections - 를 사용한다.
HTTP 의 특징 : HTTP 의 메시지
HTTP 메시지 구조
- start-line 시작 라인 : request-line 요청 // status-line : 응답
- Request-line : 요청
- request-line : method(get,post) 공백 request-target 공백 HTTP-version
- method : GET(리소스 조회), POST(요청 내역 처리),put, delete 등을 의미한다
- request-target : 절대결로?쿼리
- Http Version : HTTP 버전
- status-line : 응답
- HTTP-version 공백 status-code 공백 reason-phrase(이유문구)
- HTTP 버전
- HTTP 상태 코드 : 요청 성공, 실패를 나타냄
- 200 : 성공
- 400 : 클라이언트의 요청 오류
- 500 : 서버의 문제
- header : 헤더
- HTTP 전송에 필요한 모든 부가 정보가 담긴다
- 메시지 바디의 내용, 메시지 바디의 크기, 압축, 인증, 요청 클라이언트 정보, 서버 애플리케이션 정보, 캐시 관리 정보
- empty line 공백 라인 CRLF —> 필수
- message body
HTTP 상태 코드
- 클라이언트가 보낸 요청의 처리 상태를 응답에서 알려주는 기능
- 1XX : 요청이 수신되어 처리중 → 거의 사용 X
- 2XX Successful : 요청 정상 처리
- 3XX Redirection : 요청을 완료하려면 추가 행동이 필요
- 4XX Client Error : 클라이언트 오류, 잘못된 문법 등으로 서버가 요청을 수행할 수 없음
- 대표 코드 404 - page not found
- 5XX Server Error : 서버 오류, 서버가 정상 요청을 처리하지 못함
- 대표 코드 500 - Server Error
- 클라이언트가 인식할 수 없는 상태코드를 서버가 반환하면 상위 상태코드로 해석해서 처리하게 된다.
- 299 ?? → 200 Ok
- 451 ?? → 4XX Client Error
- 556 ?? → 5XX Server Error
- Reference
모든 사진 : 인프런 김영한님의 개발자를 위한 HTTP 기본 지식 강의
https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/dashboard
https://inpa.tistory.com/entry/WEB-%F0%9F%93%9A-Stateful-Stateless-%EC%A0%95%EB%A6%AC
'Java - Spring &&n SpringBoot' 카테고리의 다른 글
SpringSecurity 와 소셜 로그인 : OAuth2, 카카오 로그인, 네이버 로그인 (4) | 2022.09.15 |
---|---|
Spring - 예외 상황 처리 1) Servlet 예외 처리 : 404 error, 500 error (0) | 2022.08.19 |
Spring - ArgumentResolver (feat.커스텀 어노테이션, 세션) (0) | 2022.08.17 |
Spring - 스프링 인터셉터(3) 스프링 인터셉터 개념과 로그 남기기 (0) | 2022.08.13 |
Spring - 서블릿 필터 다루기(2) : 로그인 여부 체크, 로그인 여부에 따른 페이지 접근 (0) | 2022.08.12 |
댓글