클라이언트에서 서버 데이터 전송 TCP/IP, HTTP

최형안·2025년 4월 11일

클라이언트 → 서버 통신 방법 정리

패킷(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)

0개의 댓글