일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 딥러닝
- 캐싱
- post
- 너비우선탐색
- 강화학습
- 코딩
- 해시
- 자바
- Merge sort
- 파이썬 오류
- 알고리즘
- rest api
- HTTP
- 머신러닝
- 지도학습
- 비지도학습
- 코테
- 멱등
- 스택과 힙
- 코딩테스트
- 파이썬 알고리즘
- 파이썬
- BOJ
- bineary search
- 오버라이딩
- 깊이우선탐색
- 프로그래머스
- 백준
- 이진탐색
- 딕셔너리
- Today
- Total
chae._.chae
HTTP 기본 본문
✨HTTP란 ?
HyperText Transfer Protocol로, 서버간에 데이터를 주고 받을 때 사용된다.
http로는 거의 모든 형태의 데이터를 주고 받을 수 있고, 현재는 HTTP/1.1의 버전을 가장 많이 사용한다.
✨HTTP의 특징
1. 클라이언트 서버 구조 : Response와 Request의 구조이다. 클라이언트가 서버에 요청을 보내고, 응답을 대기한다.
서버는 클라이언트의 요청에 대한 결과를 만들어서 응답한다.
2. 무상태 프로토콜 (stateless) : 무상태 프로토콜은 서버가 클라이언트의 상태를 보존하지 않는 것을 뜻한다.
stateless와는 반대는 stateful(상태유지)이다.
stateful의 예제이다.
점원이 이전에 고객이 말한 내용을 기억하고 있는다.
=> 중간에 다른 점원으로 바뀌면, 고객이 무엇을 2개 구매하는지, 무엇을 얼마나 신용카드로 구매하는지 알 수 없다!
stateless의 예제이다.
점원은 이전에 고객이 말한 내용을 기억하고 있지 않는다.
따라서 고객은 점원에게 2개(x), 노트북 2개(o)라고 말한다.
즉, Stateless의 상태에서는 점원(서버)은 정보를 저장하지 않기에, client와 server가 소통하기 위해서는 필요한 정보를 client(고객)가 매번 server에게 알려주어야 한다.
=> 중간에 점원이 바뀌면, 고객이 계속 필요한 정보를 전달해주기 때문에 문제가 발생되지 않는다.
- Stateful(상태유지) : 항상 같은 서버가 유지되어야 한다. 중간에 서버에 문제가 생기면, 다른 서버가 그 서버를 대체하지 못한다.(고객의 정보가 없기 때문에) ex) 단순 정보 전달 페이지
- Stateless(무상태) : 응답 서버를 쉽게 바꿀 수 있으며, 서버에 문제가 생겼을 때, 다른 아무 서버가 그 서버를 대체할 수 있다. 서버를 무한히 증가시키는 수평 확장에 유리하다.(스케일 아웃) 즉, 서버가 모두 같은 역할을 수행한다. ex) 로그인 : 로그인했다는 상태를 서버에 유지해주어야 한다.
- => 따라서, 개발 시에는 상태유지는 최소한으로 사용하고 최대한 무상태로 설계하는 방식을 취해야 한다.
- 서버 개발자들은, 같은 시간에 발생하는 대용량 트래픽을 어려워한다. (자정 선착순, 수강신청, 명절 KTX예약 등)
3. 연결을 유지하지 않는다 : http는 기본이 연결을 유지하지 않는 모델이다.
서버와 클라이언트는 데이터를 주고 받을 때만 연결되어있고, 그 연결은 데이터 전달이 끝나면 끊기게 된다.
연결이 계속 지속된다면, 서버의 자원을 소모하고 사용자가 몰릴 때, 문제가 발생할 수 있다.
실제 검색웹사이트에서 수천, 수만 명이 서비스를 사용하지만, 실제 서버에서 동시에 처리하는 요청은 수십개 정도로 매우 작다. (연결을 끊기 때문에!) 따라서, 일반적으로 초단위 이하의 빠른 속도로 응답을 한다.
- 비연결성은 서버의 자원을 매우 효율적으로 사용할 수 있게 해준다.
- 연결을 했다 끊었다를 반복하기에 매번, TCP/IP 연결을 맺어줘야 하기에, 3 way handshake의 시간이 매번 소요된다.
- => HTTP 지속 연결(Persistent Connections)로 문제를 해결할 수 있다.
4. HTTP메시지
HTTP 메시지는 4가지의 구조로 이루어져 있다.
- 시작라인 start-line
- 헤더
- 공백라인 empty line
- 전송할 데이터message body
+ HTTP 요청메시지, HTTP 응답메시지로 나뉜다.
a. 시작라인
a-1) 요청 메시지
HTTP 메서드 : GET
요청대상 : /search?q=hello&hl=ko + HTTP 버전 정보
메서드는 GET, POST 등 서버가 수행해야 할 동작이 지정되어 있다.
a-2) 응답 메시지
HTTP 버전 + HTTP 상태코드 + 문구(OK)
HTTP 상태코드는 요청의 성공 여부를 나타낸다.
(200: 성공, 400: 클라이언트 요청 오류, 500: 서버 내부 오류)
문구는 사람이 이해가능한 짧은 상태의 코드 설명글이다. (OK)
b. HTTP 헤더
b-1) 요청 메시지
header-field = field-name ":" OWS field-value OWS
HOST : 도메인주소(www.google.com)
b-2) 응답 메시지
HTTP 전송에 필요한 모든 부가정보를 담고 있다.
(내용, 크기, 인증, 브라우저 정보, 서버 정보, 캐시 관리 정보 등등)
c. 전송할 데이터
실제 전송할 데이터를 담고 있다.
HTML문서, 이미지, 영상, JSON등 모든 데이터 전송이 가능하다.
5. 단순함, 확장 가능성
http는 매우 단순하다. 단순하기에 확장가능성이 매우 크다!
'프로그래밍' 카테고리의 다른 글
세미나 : 협업을 위한 Git & Github 이해하기 (0) | 2022.03.25 |
---|---|
HTTP 메서드 (0) | 2022.02.06 |
파이썬에서 리스트 중복 제거하기 (0) | 2022.02.03 |
깃허브란 ? (0) | 2022.02.01 |
스택과 힙 영역 (0) | 2022.01.15 |