클라이언트 → 서버 통신 방법 정리
패킷(Packet) 기반 통신
클라이언트가 서버에 데이터를 보낼 때는 패킷(Packet)이라는 통신 단위를 통해 IP 주소로 전달한다.
패킷의 구조는 다음과 같다:
- 패킷 = 출발지 IP + 목적지 IP + 데이터
패킷은 목적지까지 수많은 노드를 거쳐 이동하며, 이 과정에서 다음과 같은 문제와 해결책이 존재
1. 라우팅
중간 노드(라우터)가 목적지 IP를 보고 다음 노드를 결정
2. IP 주소가 없는 대상이면?
→ 패킷은 도착하지 못하고 폐기되거나 재전송 요청이 발생
3. 패킷 순서가 뒤죽박죽이면?
→ 데이터 용량이 크면 여러 패킷으로 나뉘어 전송되며, 순서가 뒤바뀔 수 있다.
→ TCP가 이를 해결
네트워크 통신 과정 – TCP/IP 네트워크 계층 구조
응용 계층 (Application Layer)
- 사용자가 보내고자 하는 실제 데이터를 생성 (예: HTTP 요청)
SOCKET 라이브러리를 통해 전송 계층으로 전달
전송 계층 (Transport Layer)
- TCP 헤더 + 응용 계층 데이터 → 세그먼트(Segment)
- TCP는 순서 보장, 신뢰성 보장
인터넷 계층 (Internet Layer)
- IP 헤더 + 세그먼트 → IP 패킷(Packet)
- IP 헤더에는 라우팅 정보, 출발지/목적지 IP 주소 포함
네트워크 인터페이스 계층 (Network Layer)
- 이더넷 헤더(MAC 주소) + 패킷 → 프레임(Frame)
- 이더넷, 와이파이 등의 실제 물리적 전송 수행
TCP vs UDP – 전송 방식의 차이
TCP (Transmission Control Protocol)
- 연결 지향: 3-way handshake로 가상 연결 생성
→ SYN → SYN+ACK → ACK
- 신뢰성 보장: 데이터 도착 확인 응답 발송, 재전송 처리
- 순서 보장: 나뉜 패킷을 올바른 순서로 재조립
UDP (User Datagram Protocol)
- 비연결 지향: handshake 없이 바로 전송
- 신뢰성, 순서 보장 없음
- 가볍고 빠름
- IP에 PORT 번호 추가된 느낌
→ PORT 번호: 한 IP에서 여러 앱을 실행할 때, 어떤 앱으로 가야 할 패킷인지 구분하기 위해 사용
HTTP 프로토콜
HTTP란?
- 무상태(Stateless) 프로토콜: 요청과 응답 사이에 상태를 저장하지 않음
- 비연결성(Connectionless): 요청 후 응답하면 연결 종료
→ 서버 자원 효율적 사용
→ 지속연결(Persistent Connections)로 해결 가능
- TCP 위에서 동작
Stateless 장점
- 요청마다 독립적으로 처리되므로 서버 확장이 용이
- 하나의 요청이 실패해도 다른 서버로 넘겨 처리 가능
→ 상태 유지가 필요하다면?
세션, 쿠키, 토큰 등을 사용해 보완
HTTP 메시지 구조
시작라인
헤더
(빈 줄)
본문(Body)
- 요청 시작라인 예시:
GET /index.html HTTP/1.1
- 응답 시작라인 예시:
HTTP/1.1 200 OK
HTTP 헤더
- 인증 정보, 브라우저 정보, 콘텐츠 길이, 타입 등 다양한 부가정보 포함
HTTP 바디
- HTML, JSON, 이미지, 영상 등 byte로 표현 가능한 모든 데이터
HTTP의 특징 요약
1. 멱등성 (Idempotent)
- 같은 요청을 여러 번 보내도 결과가 같다
- GET, PUT, DELETE는 멱등 → 클라이언트가 같은 요청을 다시 해도 되는지 판단 근거가 되며, 자동 복구 가능
2. 캐시 가능성
- GET, HEAD 등은 캐시 활용 가능
- 리소스를 자주 요청하는 경우 성능 향상 가능
3. PRG 패턴 (POST-Redirect-GET)
- POST 후 결과를 GET으로 리다이렉트
- 새로고침 시 마지막 요청을 다시 하는데 중복 주문 같은 오류 방지
HTTP 표현 (Representation)
표현 = 표현 메타데이터 + 표현 데이터
→ 리소스를 HTML, JSON 등 여러가지로 표현할 수 있음에서 유래
→ REST에서 R
| 속성 | 설명 |
|---|
| Content-Type | 표현 데이터의 형식 (HTML, JSON 등) |
| Content-Encoding | 압축 방식 |
| Content-Language | 자연어 정보 |
| Content-Length | 데이터 길이 |
협상(Negotiation)
클라이언트가 선호하는 표현을 요청
→ Accept, Accept-Language 등의 헤더를 사용
URI란?
- URI (Uniform Resource Identifier): 리소스를 식별하는 통합 자원 식별자
종류
- URL: 리소스의 위치 (예:
https://example.com/image.png)
- URN: 리소스의 이름 (예:
urn:isbn:1234567890)