Achievement Goals
HTTP 기반 네트워크 흐름에 대해 이해할 수 있다.
TCP/IP 기반 네트워크 흐름에 대해 이해할 수 있다.
TCP/IP 패킷이 왜 필요한 지 설명할 수 있다.
TCP와 UDP의 차이에 대해 설명할 수 있다.
HTTP 기본 동작과 특징에 대해 이해할 수 있다.
상태유지(Stateful)과 무상태(Stateless)의 개념에 대해 설명할 수 있다.
HTTP 메시지 구성에 대해 설명할 수 있다.
HTTP 헤더의 역할에 대해 이해할 수 있다.
표현, 콘텐츠 협상 등 다양한 헤더의 역할에 대해 알 수 있다.
캐시가 왜 필요한 지 알 수 있다.
브라우저 캐시, 프록시 캐시에 대해 설명할 수 있다.
조건부 요청, 캐시 무효화 방법 등을 사용할 수 있다.
네트워크는 OSI 7계층 또는, TCP/IP 4계층으로 구분
복잡한 인터넷 망 속 클라이언트와 서버가 통신하는 법
--> IP(인터넷 프로토콜) 주소를 컴퓨터에 부여하여 이를 이용
--> 패킷 단위로 전송을 하면 노드들은 목적지 IP에 도달하기 위해 서로 데이터를 전달
지정한 IP 주소(IP Address)에 패킷(Packet)이라는 통신 단위로 데이터 전달
pack과 bucket이 합쳐진 단어로 소포로 비유
우체국 송장처럼 전송 데이터를 무사히 전송하기 위해 출발지 IP, 목적지 IP와 같은 정보가 포함되어 있다
ex) 채팅 프로그램에서 메시지 보낼 때
- HTTP 메시지가 생성됨
- Socket 라이브러리를 통해 전달됨
네트워크 소켓(Socket) : 프로그램이 네트워크에서 데이터를 송수신할 수 있도록, “네트워크 환경에 연결할 수 있게 만들어진 연결부“
- IP 패킷을 생성하기 전 **_TCP 세그먼트_**를 생성
- 생성된 TCP/IP 패킷은 LAN 카드와 같은 물리적 계층을 지나기 위해 이더넷 프레임 워크에 포함되어 서버로 전송
(그림표현하기)
TCP 세그먼트 - IP 패킷의 출발지 IP와 목적지 IP 정보를 보완할 수 있는 출발지 PORT, 목적지 PORT, 전송 제어, 순서, 검증 정보 등을 포함
전송 제어 프로토콜 (Transmission COntrol Protocol)
<그림> 왼 - 클라이언트/ 오- 서버
1. 클라이언트 : 서버에 접속 요청하는 SYN 패킷 전송
2. 서버 : SYN요청 받음, 클라이언트에게 요청 수락하는 ACK + SYN설정된 패킷 발송(클라이언트의 응답 기다림)
3. 클라이언트 : 서버에게 ACK보냄- 연결성립, 데이터 전송 가능(3번에서 함께 데이터전송 가능)
IP 패킷의 한계인 비연결성을 보완
-> 데이터 전송이 성공적으로 이루어진다면 이에 대한 응답을 돌려줌
IP 패킷의 한계인 비신뢰성(순서를 보장하지 않음)을 보완
-> 패킷이 순서대로 도착하지 않는다면 TCP 세그먼트에 있는 정보를 토대로 다시 패킷 전송을 요청
사용자 데이터그램 프로토콜(User Datagram Protocol)
IP 프로토콜에 PORT, 체크섬 필드 정보만 추가된 단순한 프로토콜
체크섬(checksum): 중복 검사의 한 형태로, 오류 정정을 통해, 공간(전자 통신)이나 시간(기억 장치) 속에서 송신된 자료의 무결성을 보호하는 단순한 방법.
HTTP3 -> UDP를 사용, 이미 여러 기능이 구현된 TCP보다는 하얀 도화지처럼 커스터마이징이 가능하다는 장점
TCP | UDP |
---|---|
연결지향형 프로토콜 | 비 연결지향형 프로토콜 |
전송 순서 보장 | 전송 순서 보장 x |
데이터 수신 여부 확인 | 데이터 수신 여부 확인x |
신뢰성 ↑속도 ↓ | 신뢰성 ↓ 속도 ↑ |
좋은 기능이 다 들어있는 무거운 라이브러리 vs 필요한 기능만 들어있는 가벼운 라이브러리
TCP vc UDP
HTTP/1.1, HTTP/2는 TCP 기반이며 HTTP/3는 UDP 기반 프로토콜
요청을 주고 받을 때만 연결을 유지하고 응답을 주고나면 TCP/IP 연결을 끊음 -> 최소한의 자원으로 서버 유지
HTTP 초기 : 각각의 자원을 다운로드하기 위해 연결과 종료를 반복해야 했다
트래픽이 많고, 큰 규모의 서비스를 운영할 때에는 비연결성은 한계
HTTP 지속 연결(Persistent Connections)
연결이 이루어지고 난 뒤 각각의 자원들을 요청하고 모든 자원에 대한 응답이 돌아온 후에 연결을 종료
(MDN에 자세히 나와있으니 기본을 숙지하고 MDN을 항상 참고가능)
HTTP 메시지는 헤더와 바디로 구분
HTTP body: message body(=payload) 통해 표현 데이터 전달
HTTP header : 표현 데이터를 해석할 수 있는 정보 제공( HTTP 전송에 필요한 모든 부가정보)
표현헤더
요청, 응답 둘 다 사용
주요헤더
콘텐츠 협상
동일한 URI에서 리소스의 서로 다른 버전을 서브하기 위해 사용되는 메커니즘 - 가장 잘 맞는 프레젠테이션의 결정
협상헤더
-요청시에만 사용
캐시(cache)
데이터나 값을 미리 복사해 놓는 임시 장소
캐시의 접근 시간에 비해 원래 데이터를 접근하는 시간이 오래 걸리는 경우나 값을 다시 계산하는 시간을 절약하고 싶은 경우에 사용
요청 - 응답을 받았을 때 브라우저 캐시에 해당 응답 결과를 저장하며 이는 지정한 시간동안 유효
캐시 유효 시간 초과 : 다시 서버에 요청을하고 지정 시간동안 유효한 이미지를 응답받음 -> 네트워크 다운로드
검증 헤더(Validator), 조건부 요청 헤더
프록시 캐시
한국에 있는 클라이언트에서 특정 데이터가 필요한 상황인데 해당 데이터의 원 서버가 미국에 있다고 가정(ex-youtube)
클라이언트와 원 서버 사이에 위치한 프록시 캐시 서버를 도입
private 캐시 : 클라이언트에서 사용하고 저장하는 캐시프록시 캐시
public 캐시 : 서버의 캐시
클라이언트가 캐시를 적용하지 않아도 임의로 브라우저가 캐시를 적용하는 경우