HTTP Web Network
영한님의 모든 개발자를 위한 HTTP 웹 기본 지식 강의 HTTP Web Network 강의 노트
- HTTP 기본
인터넷 네트워크
message를 서버를 통해 어떻게 전달될까?
IP(Internet Protocol)
- 지정한 IP Address에 데이터 전달
- Packet이라는 통신 단위로 데이터 전달
- IP Packet 정보 : 출발지 IP, 목적지 IP, 기타.. 전송 데이터
- 인터넷 노드들끼리 목적지 IP를 향해 Packet을 전달
- Internet Protocol의 한계
- 비연결성 (대상이 없거나 서비스 불능 상태일 경우)
- 비신뢰성 (패킷이 사라지거나, 순서가 지켜지지 않을 경우)
- 프로그램 구분
TCP, UDP
참고
> 프로토콜 계층 순서- 애플리케이션 계층 (브라우저, 채팅, 게임 등)
- HTTP, FTP
- OS
- 전송 계층 : TCP, UDP
- 인터넷 계층 : IP
- 네트워크 인터페이스
- LAN 드라이버/장비
- 애플리케이션 계층 (브라우저, 채팅, 게임 등)
TCP (Transmission Control Protocol)
특징- 연결지향 (3 Way Handshake)
- 데이터 전달 보증
- 순서 보장 등..
- IP의 한계를 해결. 대부분이 사용
UDP (User Datagram Protocol)
- 기능이 거의 없지만, 추가 설정 가능
- 단순하고 빠름
- IP와 동일하지만 PORT, 체크섬 정도 추가
PORT
- TCP/IP 패킷
- IP로 목적지 서버 찾기
- PORT로 같은 서버 안에서 프로세스 구분
- 클라이언트 IP : 100.100.1:1010
- 서버 IP : 200.200.200:80
- 0 ~ 65535 까지 할당 가능
0 ~ 1023 은 잘 알려진 포트이므로, 사용하지 않는 것을 추천
- FTP : 20, 21
- TELNET : 23
- HTTP : 80
- HTTPS : 443
DNS
- Domain Name System
도메인명
(이름)과IP
(전화번호)가 저장된 전화번호부
📑
복잡한 인터넷 망을 통해 메시지를 보내기 위해서 IP가 필요.
IP만으로는 신뢰가 부족하고 구분이 힘들기 때문에 TCP/UDP가 필요.
같은 IP 안에서 동작하는 애플리케이션을 구분하기 위해 PORT가 필요
IP는 변하기 쉽고 외우기 어렵기 때문에 DNS가 필요
URI과 웹 브라우저 요청 흐름
URI
(Uniform Resource Identifier)
- 자원을 식별하는 방법
- URI는
- UResourceLocator : 리소스가 있는 위치를 지정
- foo://example.com:8042/over/there?name=ferret#nose
- UResourceName : 리소스에 이름을 부여
- urn:example:animal:ferret:nose
- 또는 둘 다 추가로 분류될 수 있음.
- UResourceLocator : 리소스가 있는 위치를 지정
- RFC Reference
- URL 문법
- https://www.google.com:433/search?q=hello&hl=ko
https
: 프로토콜 (http, https, ftp 등)www.google.com
: 호스트명433
: 포트 번호 (http는 80, https는 443)/search
: Path (리소스 경로)q=hello&hl=ko
: query parameter or query string 으로 불림
- https://www.google.com:433/search?q=hello&hl=ko
웹 브라우저 요청 흐름
- https://www.google.com:433/search?q=hello&hl=ko
- www.google.com : DNS 조회 -> 200.200.200.2
- 443 : HTTPS PORT 생략
- 웹 브라우저가 HTTP 요청 메시지 생성
- GET /search?q=hello&hl=ko HTTP/1.1
- Host: www.google.com
- socket 라이브러리를 통해 TCP/IP에 전달
- TCP/IP 패킷 생성, HTTP 메시지 포함
- ..
- 응답 메시지
- www.google.com : DNS 조회 -> 200.200.200.2
HTTP 기본
HTTP
- HyperText Transfer Protocol
- HTTP에 거의 모든 형태의 데이터를 전송할 수 있음
- HTML, TEXT, IMAGE, 음성, 영상, 파일, JSON, XML …
- 특징
- 클라이언트 서버 구조
- Stateless, connectionless
- HTTP 메시지로 통신
- 단순, 확장성
클라이언트 서버 구조
- Request-Response 구조
- 클라이언트는 서버에 request 후 response 대기
- 서버가 request에 대한 결과를 만들어서 응답
Stateful, Stateless
Stateful
- 서버가 클라이언트의
이전 상태를 보존
- ex) 점원이 바뀌면 고객의 상태를 알 수 없음 (로그인)
- 항상 같은 서버와 연결
- 일반적으로 브라우저 쿠키와 서버 세션들을 사용해 상태 유지
- 상태 유지는 최소한만 사용
Stateless
- 서버가 클라이언트의
이전 상태를 보존 X
- ex) 점원이 바뀌어도 고객의 상태를 알 수 있음 (소개 페이지)
- 스케일 아웃(수평 확장)에 유리
- 장: 서버 확장성이 높음, 응답 서버를 쉽게 바꿀 수 있음
- 단: 클라이언트가 필요한 데이터를 지속적으로 전송
비 연결성(connectionless)
- Connectionless
- 서버 연결을 유지하는 모델
- 서버 자원 소모
- 서버 연결을 유지하지 않는 모델
- 최소한의 자원 유지
- 서버 연결을 유지하는 모델
- HTTP는 기본이 연결을 유지하지 않는 모델
- 서버의 자원을 효율적으로 사용
- HTTP 지속 연결(Persistent Connections)로 TCP/IP의 3 way handshake 시간 소요 해결
- HTTP/2, HTTP/3 에서 최적화
HTTP 메시지
- HTTP 메시지 구조
- 시작 라인 (start-line)
- 헤더 (header)
- 공백 라인 (empty line, CRLF)
- message body
Start-Line
- request-line (
GET
/search?q=hello&hl=ko
HTTP/1.1
)- HTTP 메서드 -GET, POST, PUT, DELETE
- 요청 대상 (absolute-path[?query])
- HTTP Version
// 요청 메시지 GET /search?q=hello&hl=ko HTTP/1.1 Host: www.google.com
status-line
- HTTP 버전
- HTTP 상태 코드
- 200, 400, 500
- 이유 문구
// 응답 메시지 HTTP/1.1 200 OK Content-Type: text/html;charset=UTF-8 Content-Length: 3423 <html> <body>...</body> </html>
HTTP Header
- HTTP 전송에 필요한 모든 부가정보
- message body를 제외하고 필요한 모든 메타 정보
Message Body
- 실제 전송할 데이터
- HTML 문서, 이미지, 영상, JSON 등등 (Byte 표현 가능한 모든 데이터)
스프링 완전 정복 로드맵
- 스프링 입문 > 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
- 스프링 핵심 원리 > 기본편
- 모든 개발자를 위한 HTTP 웹 기본 지식
- 스프링 웹 MVC 1편
- 스프링 웹 MVC 2편
- 스프링 DB 1편 > 데이터 접근 핵심 원리
- 스프링 DB 2편 > 데이터 접근 활용 기술
- 스프링 핵심 원리 > 고급편
- 실전! 스프링 부트