HTTP (HyperText Transfer Protocol)
웹에서 클라이언트와 서버가 데이터를 주고받기 위한 통신 규약
🌐 HTTP의 특징
1. 무상태성 (Stateless)
서버는 클라이언트의 이전 요청을 기억하지 않습니다.
요청 1: "로그인 해주세요" → 서버: "로그인 성공"
요청 2: "내 정보 보여주세요" → 서버: "누구세요? 다시 로그인하세요"
- 서버 부담 감소: 각 요청마다 상태를 저장할 필요가 없어서 메모리 절약
- 확장성: 여러 서버에 요청을 분산시키기 쉬움
- 단순성: 각 요청이 독립적이라서 이해하기 쉬움
문제점과 해결책:
문제: 로그인 상태를 유지하려면?
해결: 쿠키(Cookie), 세션(Session), 토큰(Token) 사용
2. 비연결성 (Connectionless)
요청과 응답이 끝나면 연결을 끊습니다.
1. 클라이언트 → 서버: 연결 요청
2. 서버 → 클라이언트: 연결 승인
3. 클라이언트 → 서버: HTTP 요청
4. 서버 → 클라이언트: HTTP 응답
5. 연결 종료 🔌
장점:
- 서버 리소스 절약 (연결 유지 비용 없음)
- 많은 사용자 동시 처리 가능
단점:
- 매번 연결 설정/해제 오버헤드
- 연속된 요청 시 비효율적
개선책: HTTP Keep-Alive
연결 유지 시간 설정으로 여러 요청을 같은 연결에서 처리
3. 텍스트 기반 프로토콜
사람이 읽을 수 있는 텍스트 형태로 통신합니다.
GET /api/users HTTP/1.1
Host: example.com
User-Agent: iOS-App/1.0
📝 HTTP 요청(Request) 구조
GET /api/users/123 HTTP/1.1
Host: api.example.com
Content-Type: application/json
Authorization: Bearer abc123
User-Agent: MyApp/1.0
{"filter": "active"}
구성 요소:
- Request Line: 메서드 + 경로 + HTTP 버전
- Headers: 요청에 대한 메타데이터
- Body: 실제 전송할 데이터 (선택적)
iOS에서 구현:
let url = URL(string: "https://api.example.com/api/users/123")!
var request = URLRequest(url: url)
request.httpMethod = "GET" // Request Line
request.setValue("application/json", forHTTPHeaderField: "Content-Type") // Headers
request.setValue("Bearer abc123", forHTTPHeaderField: "Authorization")
request.httpBody = jsonData // Body
📨 HTTP 응답(Response) 구조
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 156
Server: nginx/1.18.0
{
"user": {
"id": 123,
"name": "김철수",
"email": "kim@example.com"
}
}
구성 요소:
- Status Line: HTTP 버전 + 상태코드 + 상태메시지
- Headers: 응답에 대한 메타데이터
- Body: 실제 응답 데이터
iOS에서 처리:
URLSession.shared.dataTask(with: request) { data, response, error in
if let httpResponse = response as? HTTPURLResponse {
print("상태코드: \(httpResponse.statusCode)") // Status Line
print("헤더: \(httpResponse.allHeaderFields)") // Headers
}
if let data = data {
// Body 데이터 처리
let user = try? JSONDecoder().decode(User.self, from: data)
}
}
상태코드랑 메서드는 다음에 이어서..!
'TIL' 카테고리의 다른 글
[AI와 함께하는 네트워크 공부] 2. TCP vs UDP (1) | 2025.07.07 |
---|---|
[AI와 함께하는 네트워크 공부] 1. OSI 7계층 모델 (1) | 2025.07.03 |