- 이 게시글은 인프런 "모든 개발자를 위한 HTTP 웹 기본지식"의 김영한님 강의를 보고 요약한 내용입니다.
1. HTTP(HyperText Transfer Protocol)
HTTP 메시지에 모든 것을 전송한다 !!
- HTML
- Text
- Image
- 음성, 영상, 파일
- JSON
- XML(API)
→ 거의 모든 형태의 데이터 전송이 가능
HTTP 역사
- HTTP/0.9 : 1991년, GET메서드만 지원하며 HTTP 헤더 없음
- HTTP/1.0 : 1996년, 메서드와 헤더 추가
- HTTP/1.1 : 1997년, 가장 많이 사용하며 우리에게 중요한 버전
- HTTP/2 : 2015년, 성능 개선에 초점
- HTTP/3 : 진행 중, TCP 대신 UDP 사용, 성능 개선에 초점
기반 프로토콜
- TCP : HTTP/1.1, HTTP/2
- UDP : HTTP/3 → 성능 최적화를 위해
HTTP 특징
- 클라이언트 서버 구조
- 무상태 프로토콜(Stateless), 비연결성
- HTTP 메시지를 통해 통신
- 단순하며 확장 가능함
2. 클라이언트 서버 구조
- 클라이언트가 요청을 보내고 응답을 대기
- 서버가 요청에 대한 결과를 만들어서 응답
- Request Response 구조
클라이언트 : 사용성과 UI에 집중
서버 : 복잡한 비즈니스 로직이나 데이터 등을 처리
→ 클라이언트와 서버를 분리하여 독립적으로 진화하도록 !
3. 무상태 프로토콜(Stateless)
무상태(Stateless)와 상태유지(Stateful) 차이는?
- 무상태(Stateless)
- 서버가 클라이언트의 이전 상태를 보존하지 않는다.
- 응답 서버를 쉽게 바꿀 수 있다. → 무한한 서버 증설 가능
- 스케일 아웃 → 수평 확장 유리
- 상태유지(Stateful)
- 서버가 클라이언트의 이전 상태를 보존한다.
- 항상 같은 서버가 유지되어야 한다.
* 무상태와 상태유지의 이해에 관한 자세한 예시는 강의 참고
무상태(Stateless)의 실무 한계
- 단순한 서비스 소개화면은 무상태로 가능하지만 로그인 서비스와 같이 상태를 유지해야하는 경우에는 불가능
→ 일반적으로 쿠키와 서버 세션 등을 사용하여 상태 유지
- 상태유지는 최소한만 사용
- 클라이언트가 추가 데이터를 전송하므로 데이터를 너무 많이 보냄
4. 비연결성
* 클라이언트와 서버 TCP/IP 연결을 유지하는 모델
- 서버는 연결을 계속 유지하므로 서버 자원이 소모
* 클라이언트와 서버 TCP/IP 연결을 유지하지 않는 모델
- 클라이언트가 요청을 보내고 서버가 응답하면 바로 연결을 끊음
- 서버는 연결을 유지하지 않으며 최소한의 자원을 유지
- HTTP는 기본적으로 연결을 유지하지 않는 모델 !
- 일반적으로 초 단위 이하의 빠른 속도로 응답
- 서버 자원을 매우 효율적으로 사용 가능
비연결성 한계와 극복
- TCP/IP 연결을 새로 맺어야 함 → 3 way handshake 시간이 추가됨
- 웹 브라우저 사이트 요청 시 html뿐만 아니라 수 많은 자원(javascript, css, image 등)이 함께 다운로드됨
- 지금은 HTTP 지속 연결(Persistent Connections)로 문제 해결
- HTTP/2, HTTP/3 에서는 더 많은 최적화
5. HTTP 메시지
- HTTP 메시지 구조
start-line 시작라인 |
header 헤더 |
empty line 공백 라인(CRLF) |
message body |
- HTTP 요청 메시지 예시
GET/search?q=hello&hl=ko HTTP/1.1 |
Host: www.google.com |
* 요청 메시지도 body 본문을 가질 수 있음
* HTTP 요청 메시지 시작라인
- HTTP 메서드 : 서버가 수행해야 할 동작 지정(GET: 리소스 조회, POST: 요청 내역 처리, PUT, DELETE...)
- 요청 대상 : 절대 경로 = "/"로 시작하는 경로
- HTTP Version
- HTTP 응답 메시지 예시
HTTP/1.1 200 OK |
Content-Type: text/html;charset=UTF-8 Content-Length: 3423 |
<html> <body>...</body> </html> |
* HTTP 응답 메시지 시작라인
- HTTP Version
- HTTP 상태 코드 : 요청 성공, 실패를 나타냄(200: 성공, 400: 클라이언트 요청 오류, 500: 서버 내부 오류)
- 이유 문구 : 사람이 이해할 수 있는 짧은 상태 코드의 설명 글
- HTTP 헤더
- field-name ":" OWS field-value OWS (OWS: 띄어쓰기 허용)
- field-name 은 대소문자 구분이 없음
* 용도
① HTTP 전송에 필요한 모든 부가정보(메타 정보가 다 들어있음)
ex) 메시지 바디 내용, 메시지 바디 크기, 압축, 인증, 요청 클라이언트 정보, 서버 애플리케이션 정보, 캐시 관리 정보 등
② 표준 헤더 많이 존재
③ 필요시 임의의 헤더 추가 가능
- HTTP 바디
* 용도
① 실제 전송할 데이터
② HTML 문서, 임지, 영상, JSON 등 byte로 표현할 수 있는 모든 데이터 전송 가능
이번 수업내용의 최종 결론은?
지금은 HTTP 시대 !
'HTTP' 카테고리의 다른 글
[HTTP] 웹 기본 지식 정리 - HTTP 메서드 활용② (0) | 2023.01.15 |
---|---|
[HTTP] 웹 기본 지식 정리 - HTTP 메서드 활용① (0) | 2023.01.15 |
[HTTP] 웹 기본 지식 정리 - HTTP 메서드 (0) | 2023.01.12 |
[HTTP] 웹 기본 지식 정리 - URI와 웹 브라우저 요청 흐름 (0) | 2023.01.08 |
[HTTP] 웹 기본 지식 정리 - 인터넷 네트워크 (0) | 2023.01.06 |