NETWORK

HTTP

도원좀비 2025. 3. 17. 21:29

💻  HTTP (HyperText Transfer Protocol)

  • 웹에서 데이터를 주고받는 프로토콜
  • 클라이언트(요청) ↔ 서버(응답)
  • 주로 HTTP/1.1 (TCP) 사용, 최근 HTTP/2, HTTP/3 (UDP) 증가

1️⃣ HTTP 특징

  1. 클라이언트-서버 구조
    • UI(클라이언트) ↔ 데이터·비즈니스 로직(서버)
    • 독립적 발전 가능
  2. Stateless (무상태)
    • 서버는 클라이언트 상태 저장 X
    • 확장성 ↑, 요청마다 데이터 포함 필요
    • 로그인 등은 Cookie, Session, Token 활용
  3. Connectionless (비연결)
    • 요청 처리 후 연결 종료
    • 리소스 절약, 응답 속도 ↓
    • **HTTP 지속연결(Persistent Connections)**로 해결

2️⃣  HTTP 메시지 구조

📌 요청(Request) 메시지

  1. Start Line : Method Path HTTP-Version
  2. Header : 요청 정보 포함
  3. Empty Line : 필수 (공백)
  4. Body : 요청 데이터 (JSON, HTML 등)

📌 응답(Response) 메시지

  1. Start Line : HTTP-Version Status-Code Status-Text
  2. Header : 응답 정보 포함
  3. Empty Line : 필수 (공백)
  4. Body : 응답 데이터

3️⃣  HTTP Method

 

Method 설명 특징
GET 리소스 조회 Query String 사용 가능
POST 리소스 생성 Body 데이터 포함
PUT 리소스 전체 수정 덮어쓰기
PATCH 리소스 부분 수정 일부 데이터 변경
DELETE 리소스 삭제 요청 URI 지정

📌 속성

  • 안전성(Safe) : GET만 O
  • 멱등성(Idempotent) : GET, PUT, DELETE O (POST X)
  • 캐시 가능성(Cacheable) : GET, HEAD O

4️⃣  HTTP 상태 코드

📌 1xx (정보) : 요청 처리 중
📌 2xx (성공) : 요청 성공

  • 200 OK : 정상 처리
  • 201 Created : 리소스 생성 완료
  • 204 No Content : 응답 본문 없음

📌 3xx (리다이렉션) : 추가 작업 필요

  • 301 Moved Permanently : 영구 이동
  • 302 Found : 일시적 이동
  • 304 Not Modified : 캐시 활용

📌 4xx (클라이언트 오류) : 요청 문제

  • 400 Bad Request : 요청 오류
  • 401 Unauthorized : 인증 필요
  • 403 Forbidden : 접근 불가
  • 404 Not Found : 리소스 없음

📌 5xx (서버 오류) : 서버 문제

  • 500 Internal Server Error : 서버 내부 오류
  • 503 Service Unavailable : 서비스 불가

5️⃣  HTTP API 설계

📌 잘못된 예시
❌ /create/board (동사 사용)
❌ /read/board-list (리소스 단수)

📌 올바른 RESTful API 설계

기능HTTP MethodURI
게시글 생성 POST /boards
게시글 조회 GET /boards/{id}
게시글 목록 조회 GET /boards
게시글 수정 PUT/PATCH /boards/{id}
게시글 삭제 DELETE /boards/{id}

📌 규칙

  1. 명사 사용 (리소스 중심)
  2. 복수형 사용 (boards)
  3. 동사 대신 HTTP Method 활용
  4. 계층 구조 표현 (/users/{id}/posts)

6️⃣  HTTP Header

📌 Content 관련 헤더

  • Content-Type : application/json, text/html
  • Content-Length : 데이터 크기 (byte)
  • Content-Encoding : 압축 방식 (gzip)

📌 클라이언트 정보

  • User-Agent : 브라우저, OS 정보
  • Referer : 이전 페이지 URL

📌 인증 관련 헤더

  • Authorization : Bearer {token}
  • WWW-Authenticate : 인증 방식

📌 캐시 제어 헤더

  • Cache-Control : max-age=3600, no-cache
  • ETag : 리소스 버전 정보
  • If-Modified-Since : 마지막 수정 시간

📌 쿠키 관련 헤더

  • Set-Cookie : sessionId=12345; Secure; HttpOnly
  • Cookie : 클라이언트에서 서버로 쿠키 전송

7️⃣  RESTful API

📌 REST란?

  • 리소스 중심 API 설계 방식
  • URI로 자원 식별, HTTP Method 활용

📌 RESTful API 규칙

  1. 명사형 URI (/users X /getUsers X)
  2. HTTP Method 사용 (CRUD 표현 X)
  3. 하이픈(-) 사용 (user-profile X user_profile X)
  4. 소문자 사용 (/Users X /users O)
  5. 파일 확장자 포함 X (.json X)

📌 REST API 성숙도 모델

Level 특징
0 URL만 활용 (/operation?method=POST)
1 리소스 구분 (/users, /posts)
2 HTTP Method 적용 (GET /users/1)
3 HATEOAS (상태 정보 포함)

RESTful API는 Level 2 이상 권장

'NETWORK' 카테고리의 다른 글

Web Application  (2) 2025.03.17
웹(Web)  (0) 2025.03.17
네트워크(Network)  (1) 2025.03.17