1. 인터넷 네트워크
🌐 인터넷 통신은 어떻게 작동할까?
인터넷에서 컴퓨터끼리는 클라이언트 - 서버 구조로 통신한다.
한쪽이 요청하면 다른 쪽은 응답을 보내주는 방식이다. 이때 IP라는 것을 사용한다.

IP(Internet Protocol) 는 인터넷에서 각 기기의 주소 역할을 한다.
우리가 "택배 주소"를 적듯이 데이터를 목적지로 정확히 보내기 위한 시스템이다. IP는 패킷이라는 단위로 데이터를 나눠 보내며 각 패킷은 출발지 IP, 목적지 IP 등의 정보를 가진다.
⚠️ 하지만 IP만으로는 완벽하지 않다.
- 비연결성: 대상이 없거나 서비스 불능 상태여도 패킷 전송
- 비신뢰성: 중간에 패킷이 사라지거나 순서가 바뀔 수 있음
- 프로그램 구분 : 같은 IP를 사용하는 서버에 애플리케이션이 둘 이상일 경우?
🌐 TCP와 UDP
IP의 한계를 보완하기 위해 전송 계층이 존재한다. 대표적으로 TCP와 UDP가 있다.
👉 TCP (신뢰 보장)
- 3-way 핸드쉐이크로 연결 설정
- 접속 요청(client) -> 요청 수락, 접속 요청 (server) -> 요청 수락(client)
- 데이터가 순서대로 도착하는지 확인
- 손실된 데이터 재전송
- 대부분의 서비스는 TCP 사용
👉 UDP (빠르지만 비신뢰성)
- 연결 없이 바로 데이터 전송
- 순서 보장 X, 손실 보장 X
- 실시간 게임, 영상 스트리밍에 자주 사용
- IP에서 + port, 체크섬 정도
🌐 PORT
PORT는 한 서버(IP) 안에서 여러 프로그램을 구분하기 위한 번호이다.
⚠️ IP는 기억하기 어렵고, 변경될 수 있다는 문제점이 존재한다.
🌐 DNS
그래서 우리는 어려운 IP 주소 대신 www.google.com이라는 도메인으로 사용한다.
해당 도메인을 DNS 서버를 통해 200.200.200.2 같은 IP로 바꿔주는 것이 DNS(Domain Name System)이다.
2. URI와 웹 브라우저 요청 흐름
🌐 URI
URI : 자원을 식별하는 통합된 개념 (Uniform Resource Identifier)
- URL : 자원이 어디 있는지 위치를 알려줌 (Locator)
- URN : 자원의 이름을 알려줌 (Name)
실제 URN 이름만으로 리소스 찾을 수 있는 방법이 보편화되지 않아 URI = URL 이라고 하자!!
👉 구성 요소
scheme://[userinfo@]host[:port][/path][?query][#fragment]
ex) https://www.google.com:443/search?q=hello&hl=ko
- scheme
- 주로 프로토콜 사용
- https는 http에 보안이 추가된 것
- userinfo
- host
- port
- 일반적으로 생략 가능, 생략 시 http는 80 / https는 443
- path
- query
- key=value 형태
- ?로 시작, &로 추가 가능
- 쿼리파라미터, 쿼리스트링으로 불림
🌐 웹 브라우저의 요청 흐름
- 사용자가 URL을 입력
- DNS로 IP 주소를 조회
- HTTP 요청 메시지를 생성
- TCP/IP로 서버에 전달
이때 패킷 상태는 아래와 같다.
- 응답 메시지를 받고 HTML을 렌더링
3. HTTP
‼️ 모든 것이 HTTP
- HTTP 메시지에는 HTML, TEXT, IMAGE, 영상, 파, JSON, XML 등 거의 모든 형태의 데이터 전송이 가능하다.
- HTTP/1.1 을 가장 많이 사용하며 HTTP/2,3은 성능 개선 위주라 결론은 1.1을 제대로 공부하자!
- HTTP/1.1은 TCP 프로토콜 기반이다.
‼️ 특징
➡️ 클라이언트 서버 구조
➡️ 무상태 프로토콜(stateless)
-
서버가 클라이언트 상태를 보존하지 X
-
stateful은 중간에 다른 점원으로 바뀌면 상태 정보를 다른 점원에게 미리 알려줘야하지만, stateless는 다른 점원이 바뀌어도 상관이 없다.
-
이 말은 즉!!
갑자기 고객이 증가해도 점원을 대거 투입 가능
= 갑자기 클라이언트 요청이 증가해도 서버 대거 투입 가능
= 무한한 서버 증설 가능
= 대용량 트래픽에 유용
-
상태 유지는 최소한만 사용하도록 하자! But 로그인과 같이 상태를 유지해야하는 경우도 있다.
➡️ 비연결성
- HTTP는 기본이 연결을 유지하지 X 모델
- 일반적으로 초 단위 이하의 빠른 속도로 응답하며 최소한의 서버 자원 사용
- 1시간 동안 수천명의 서비스를 사용해도 실제 서버에서 동시에 처리하는 요청은 수십개 이하로 작다.
- ex) 웹 브라우저에서 계속 연속해서 검색 버튼을 누르지 X, 누르는 경우만 연결!
- ⚠️ 3 way handshake 시간 추가와 많은 자원이 다운로드 된다는 단점이 있음
- 💡지속 연결(Persistent Connections)로 문제 해결
‼️ HTTP 메시지
시작라인
- 요청 : HTTP 메서드 + 요청 대상 + 버전
- 응답 : 버전 + HTTP 상태 코드
헤더
- field-name (대소문자 구분 x) : OWS field-value OWS
- 응답 : HTTP 전송에 필요한 모든 부가 정보
바디
- 응답 : 실제 전송할 데이터 -> HTML 문서, 이미지, 영상, JSON 등등 byte로 표현할 수 있는 모든 데이터 전송 가능