사이드 프로젝트/테니스투게더
HTTP 웹 기본지식 #1 (TCP/IP, PORT, URI, HTTP, 무상태)
Ilhoon
2021. 11. 28. 19:54
웹개발을 할때 항상 사용하지만 늘 알쏭달쏭한... HTTP에 대한 모든 것을 한번 정리해보자!!
인터넷 네크워크
![인터넷네트워크의 흐름](https://github.com/ilhoon93/imageHub/blob/master/img/image-20211029211535168.png?raw=true)
IP (INTERNET PROTOCOL)
- 지정한
IP주소
에 데이터 전달 패킷
이라는 통신 단위로 데이터 전달- 한계점
- 비연결성 (패킷을 받을 대상이 없거나 서비스 불능 상태인지 판단할 수 없다)
- 비신뢰성 (패킷의 도착순서, 패킷이 도착했는지 확인할 수 없다)
- 프로그램 구분 (같은 IP에서 어떤 프로그램과 통신해야 하는지 알 수 없다)
TCP (Transmission Control Protocol)
- IP의 패킷의 한계점을 보완
- TCP 3 way handshake
- 출발지와 목적지 간의 연결 상태를 먼저 확인한다.
SYN
,SYN + ACK
,ACK
3단계로 이루어진다.
- 데이터 전달 보증
- 데이터를 잘 받았는지 응답을 보내준다.
- 순서 보장
- 순서 정보를 패킷에 담아서 보낸다.
UDP
- IP와 거의 같고, PORT 정보 정도만 추가되는 형태이다.
- HTTP3에서 TCP의 3way handshake 등의 과정을 최적화 하려다보니 최근 주목을 받고있음.
PORT
- 0 ~ 65535 할당 가능
- 0 ~ 1023 : 잘 알려진 포트, 사용하지 않는 것이 좋음
- IP가 아파트라면 PORT는 몇동 몇호 인지
DNS (Domain Name System)
- IP주소는 기억하기 어렵다
- IP주소는 변경될 수 있다
- 도메인명을 IP주소로 변환해준다
- 도메인명으로 접속
- DNS서버에서 해당 도메인의 IP주소를 리턴
- 해당 IP주소를 가지고 접속
URI (Uniform resource Identifier)
- 리소스를 식별하는 유일한 식별자
- 주로
URL
을 의미한다- URL (Uniform resource Locator) 리소스의 위치
- URL문법형식
scheme
://[userinfo@]host
:port
/path
?query
http
://www.google.com
:443
/search
?q=hello&hl=ko
- 프로토콜, 호스트명, 포트, 패스, 쿼리파라미터
- 포트는 주로 생략가능 (프로토콜마다 주로 사용하는 포트가 있다)
![웹 브라우저 요청 흐름](https://github.com/ilhoon93/imageHub/blob/master/img/image-20211029213819940.png?raw=true)
HTTP (HyperText Transfer Protocol)
- HTTP 메시지로 모든것을 전송 가능
- HTML, TEXT, 이미지, 음성, 영상, 파일, JSON, XML 등 거의 모든 형태의 데이터
- HTTP/1.1 우리가 주로 사용하는 버전 (HTTP/2, HTTP/3도 점점 증가중)
- 클라이언트 서버 구조
- 클라이언트는 요청, 서버는 응답
- UI와 사용성은 클라이언트에서 / 로직과 데이터는 서버에서
- 무상태 프로토콜 (Stateless)
- 클라이언트의 상태를 서버가 보존하지 않는다는 의미
- 가능한 무상태로 설계하는 것이 좋다
- 상태유지 ex) 로그인 정보 / 무상태 ex) 단순 소개 페이지
- 상태유지는
브라우저 쿠키
와서버 세션
등을 사용해서 상태 유지한다.
- 상태유지는
- 클라이언트 쪽에서 서버가 필요한 정보를 한번에 전송해준다.
- 서버 확장성이 높다. (scale out)
- 서버장애발생시
- 상태유지 (Stateful)
- 클라이언트 -> 서버1 (항상 서버1 쪽으로 요청해야한다)
- 통신중 서버1 장애가 발생하면?
- 클라이언트 -> 서버2 처음부터 다시 요청해야한다.
- 무상태
- 통신중 서버1 장애가 발생하면?
- HTTP 요청 메시지를 그냥 서버2로 전달하면된다.
- 상태유지 (Stateful)
- 비 연결성
- 서버에 요청해서 응답 받으면 서버와의 연결 종료
- 서버와의 연결상태를 유지하지 않아서 서버자원 효율적으로 사용가능
- TCP/IP 연결을 계속 새로 맺는데 걸리는 시간 문제
- HTTP 지속연결로 문제 해결
- 기존방식 ->
연결, HTML요청/응답, 종료
|연결,이미지요청/응답, 종료
.... - 지속연결 ->
연결, (HTML, 이미지 등)요청/응답, 종료
- 기존방식 ->
HTTP 메시지
HTTP메시지 구성
요청메시지 | 응답메시지 | |
---|---|---|
시작라인 | HTTP메서드 요청대상 HTTP버전 ex) GET /search?q=hello&hl=ko HTTP/1.1 |
HTTP버전 HTTP상태코드 이유문구 ex) HTTP/1.1 200 OK |
헤더 | Host:도메인명 ex) Host: www.google.com |
HTTP전송에 필요한 모든 부가정보.. ex) Content-Type: text/html;charset=UTF-8;Content-Length: 3423 |
바디 | 있어도 되고 없어도됨. 보통 넣지않는다. | 실제 전송 데이터 ex)... |
참고
인프런 - 모든 개발자를 위한 HTTP 웹 기본 지식(김영한님)