💻 HTTP (HyperText Transfer Protocol)
- 웹에서 데이터를 주고받는 프로토콜
- 클라이언트(요청) ↔ 서버(응답)
- 주로 HTTP/1.1 (TCP) 사용, 최근 HTTP/2, HTTP/3 (UDP) 증가
1️⃣ HTTP 특징
- 클라이언트-서버 구조
- UI(클라이언트) ↔ 데이터·비즈니스 로직(서버)
- 독립적 발전 가능
- Stateless (무상태)
- 서버는 클라이언트 상태 저장 X
- 확장성 ↑, 요청마다 데이터 포함 필요
- 로그인 등은 Cookie, Session, Token 활용
- Connectionless (비연결)
- 요청 처리 후 연결 종료
- 리소스 절약, 응답 속도 ↓
- **HTTP 지속연결(Persistent Connections)**로 해결
2️⃣ HTTP 메시지 구조
📌 요청(Request) 메시지
- Start Line : Method Path HTTP-Version
- Header : 요청 정보 포함
- Empty Line : 필수 (공백)
- Body : 요청 데이터 (JSON, HTML 등)
📌 응답(Response) 메시지
- Start Line : HTTP-Version Status-Code Status-Text
- Header : 응답 정보 포함
- Empty Line : 필수 (공백)
- 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} |
📌 규칙
- 명사 사용 (리소스 중심)
- 복수형 사용 (boards)
- 동사 대신 HTTP Method 활용
- 계층 구조 표현 (/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 규칙
- 명사형 URI (/users X /getUsers X)
- HTTP Method 사용 (CRUD 표현 X)
- 하이픈(-) 사용 (user-profile X user_profile X)
- 소문자 사용 (/Users X /users O)
- 파일 확장자 포함 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 |