모든 개발자를 위한 HTTP 웹 기본 지식
이 글은 김영한님의 모든 개발자를 위한 HTTP 웹 기본 지식 강의를 정리한 내용입니다.
1. 소개
- 웹 개발은 HTTP 기반위에서 개발하는데 언젠가 한번은 정리해야 함
강의 목표
- HTTP 전체 흐름 이해
- 실무에 필요한 핵심 내용
- 쉽게 설명
2. 인터넷 네트워크
인터넷 통신
- 인터넷에서 컴퓨터 둘은 어떻게 통신할까?
IP(인터넷 프로토콜)
- 지정한 IP 주소(IP Address)에 데이터 전달
- 패킷(Packet)이라는 통신 단위로 데이터 전달
- 통신에는 클라이언트와 서버의 IP가 필요하다.
IP 프로토콜의 한계
- 비연결성
- 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송 -> 받을 수 있는 상태인지 모름
- 비신뢰성
- 중간에 패킷이 사라지면? -> 패킷이 소실되어도 모름
- 패킷이 순서대로 안오면?
- 일반적으로 1.5KB 이상이면 끊어서 보내는데, 메세지의 순서가 다르게 도착해도 모름
- 프로그램 구분
- 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상이면?
TCP, UDP
위 IP 프로토콜의 단점을 TCP가 해결해준다
인터넷 프로토콜 스택의 4계층
- 애플리케이션 계층 - HTTP, FTP
- 전송 계층 - TCP, UDP
- 인터넷 계층 - IP
- 네트워크 인터페이스 계층 - LAN 카드, 드라이버, 장비
- 프로그램이 Hello, world! 메시지 생성 - Application
- SOCKET 라이브러리를 통해 전달 - Application -> OS
- TCP 세그먼트 생성, 메시지 데이터 포함 - OS
- IP 패킷 생성, TCP 데이터 포함 - OS
- 이더넷 프레임 생성(MAC 주소 포함), IP 데이터 포함 - LAN
MAC과 IP
-
MAC(Media Access Control) 주소: 네트워크 카드에 부여된 하드웨어 주소
- 변하지 않는 식별자 (물론 수동으로 변경 가능하지만 일반적으로 고정)
- 로컬 네트워크(LAN)에서만 의미 있음
-
IP(Internet Protocol) 주소: 네트워크 상의 논리 주소
- 동적으로 할당 가능 (예: DHCP)
- 인터넷 또는 내부 네트워크에서 사용
둘은 1:1, 1:N, N:1, N:M등 다양하게 매핑되어 ARP, RARP 프로토콜을 통해 연결되어 있다.
TCP 특징
전송 제어 프로토콜(Transmission Control Protocol)
-
연결지향 - TCP 3 way handshake(가상 연결)
- SYN: 접속 요청 - 클라이언트 -> 서버
- SYN + ACK: 서버의 요청 수락 및 클라이언트 접속 요청 - 서버 -> 클라이언트
- ACK: 클라이언트의 승인(최적화로 함께 데이터 전송) - 클라이언트 -> 서버
- 과거에는 랜선을 직접 꽂아줬다고 하는데(물리적 연결), TCP 연결은 수많은 노드들을 거치지만 가상연결
-
데이터 전달 보증
-
순서 보장
- 패킷 순서가 달라지면 달라진 패킷부터 다시 보내달라고 요청 보냄(내부적 최적화가 있을수도)
-
데이터 전달 보증, 순서 보장을 해주기에 신뢰할 수 있는 프로토콜
-
현재는 대부분 TCP 사용
UDP
-
하얀 도화지에 비유(기능이 거의 없음)
-
연결지향 X - TCP 3 way handshake X
-
데이터 전달 보증 X
-
순서 보장 X
-
데이터 전달 및 순서가 보장되지 않지만, 단순하고 빠름
-
정리
- IP와 거의 같다. + PORT + 체크섬정도만 추가
- 애플리케이션에서 추가 작업 필요
-
HTTP/3는 UDP 위에서 동작함
-
HTTP/2까지는 TCP위에서 동작하지만 TCP의 한계
- 연결 설정에 3-way handshake 필요 → 느림
- TCP 연결은 OS 커널 레벨에서 관리 → 브라우저/앱에서 자유롭게 개선 불가
- TCP 멀티플렉싱 시 한 패킷 손실이 모든 스트림에 영향을 줌(HOL Blocking)