HTTP (HyperText Transfer Protocol)
HTTP의 주요 특징
☞ HTTP는 가볍고 단순하지만, 상태 유지가 필요하면 추가적인 기술이 필요함
https://www.example.com)☞ HTTP 요청과 응답이 쌍을 이루며 동작함
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
HTTP/1.1 200 OK
Content-Type: text/html
<html>
<body>Hello, world!</body>
</html>
☞ 요청과 응답 모두 Start Line, Headers, Body로 구성됨
| 버전 | 특징 |
|---|---|
| HTTP/1.0 | 단일 요청-응답 후 연결 종료 |
| HTTP/1.1 | 기본적으로 지속 연결(Persistent Connection) 지원 |
| HTTP/2 | 멀티플렉싱(동시 요청 처리), 헤더 압축 지원 |
| HTTP/3 | UDP 기반의 빠른 데이터 전송 (QUIC 프로토콜 사용) |
☞ 현대 웹에서는 HTTP/2와 HTTP/3가 점점 더 많이 사용됨
| Method | 설명 | 사용 예 |
|---|---|---|
| GET | 리소스 조회 | 웹페이지 로딩, 데이터 요청 |
| POST | 새로운 리소스 생성 | 회원가입, 글 작성 |
| PUT | 리소스 전체 수정 | 프로필 전체 변경 |
| PATCH | 리소스 일부 수정 | 비밀번호 변경 |
| DELETE | 리소스 삭제 | 게시글 삭제 |
☞ GET 요청은 데이터를 조회하는 것이므로 요청 본문을 포함하지 않음
GET, HEADGET, PUT, DELETEGET, HEAD☞ POST는 멱등성이 없으며, GET은 캐시가 가능하여 성능 최적화에 활용됨
| 코드 | 의미 |
|---|---|
| 100 Continue | 요청을 계속 진행하세요 |
| 101 Switching Protocols | 프로토콜 변경 요청 수락 |
| 코드 | 의미 |
|---|---|
| 200 OK | 요청 성공 |
| 201 Created | 새 리소스 생성 완료 |
| 204 No Content | 응답 본문 없음 |
| 코드 | 의미 |
|---|---|
| 301 Moved Permanently | URL이 영구적으로 변경됨 |
| 302 Found | 일시적인 리다이렉션 |
| 304 Not Modified | 캐시된 응답을 사용 |
| 코드 | 의미 |
|---|---|
| 400 Bad Request | 잘못된 요청 |
| 401 Unauthorized | 인증 필요 |
| 403 Forbidden | 접근 권한 없음 |
| 404 Not Found | 리소스를 찾을 수 없음 |
| 코드 | 의미 |
|---|---|
| 500 Internal Server Error | 서버 내부 오류 |
| 502 Bad Gateway | 게이트웨이 오류 |
| 503 Service Unavailable | 서비스 이용 불가 |
☞ 정확한 상태 코드를 설정하면 API의 가독성과 유지보수성이 향상됨
201 Created401 Unauthorized404 Not Found500 Internal Server Error☞ 올바른 상태 코드 반환은 API 설계에서 매우 중요!
Header-Name: Header-Value
☞ 헤더는 대소문자를 구분하지 않으며, key-value 형식으로 구성됨
| 헤더 | 설명 | 예시 |
|---|---|---|
Host | 요청 대상 서버 도메인 | Host: www.example.com |
User-Agent | 클라이언트 정보 | User-Agent: Mozilla/5.0 |
Accept | 클라이언트가 원하는 데이터 형식 | Accept: application/json |
Authorization | 인증 정보 포함 | Authorization: Bearer token |
| 헤더 | 설명 | 예시 |
|---|---|---|
Server | 서버 정보 | Server: Apache/2.4.41 |
Content-Type | 응답 데이터 형식 | Content-Type: text/html |
Set-Cookie | 클라이언트에 쿠키 저장 | Set-Cookie: sessionId=abc123; Path=/; HttpOnly |
Location | 리다이렉트 주소 | Location: https://new.example.com |
☞ 요청과 응답 헤더를 활용하면 웹 통신을 효율적으로 제어할 수 있음
| 기능 | HTTP Method | 예제 URL |
|---|---|---|
| 리소스 조회 | GET | /users |
| 특정 리소스 조회 | GET | /users/{id} |
| 리소스 생성 | POST | /users |
| 리소스 수정 | PUT | /users/{id} |
| 리소스 일부 수정 | PATCH | /users/{id} |
| 리소스 삭제 | DELETE | /users/{id} |
☞ URI에는 동사를 포함하지 않고, 명확한 리소스를 나타내야 함
☞ RESTful API는 웹 서비스 설계에서 필수적인 개념!
| 헤더 | 설명 |
|---|---|
Cache-Control: no-cache | 캐시된 데이터를 사용하지 않고, 항상 서버에서 새 데이터 요청 |
Cache-Control: max-age=3600 | 1시간(3600초) 동안 캐시 유지 후 새로운 요청 수행 |
If-Modified-Since | 마지막으로 수정된 날짜 이후 변경이 없으면 캐시된 데이터 사용 |
If-None-Match | ETag 값을 기반으로 변경 여부 확인 후 캐시 활용 |
| 헤더 | 설명 |
|---|---|
Cache-Control: public | 모든 사용자가 캐시 가능 |
Cache-Control: private | 특정 사용자만 캐시 가능 |
Cache-Control: no-store | 캐시 저장 금지 (보안이 중요한 데이터) |
ETag | 리소스의 고유 식별자 (변경이 없으면 캐시된 데이터 사용) |
☞ 캐시를 적절히 활용하면 웹사이트 성능이 크게 향상됨
☞ HTTPS는 보안이 중요한 로그인, 결제 시스템 등에 필수!
| 항목 | HTTP | HTTPS |
|---|---|---|
| 보안성 | 데이터 평문 전송 (위험) | 데이터 암호화 (안전) |
| 인증서 필요 여부 | 불필요 | SSL/TLS 인증서 필요 |
| 속도 | 빠름 | 암호화 오버헤드로 약간 느림 |
| 사용 예시 | 일반적인 웹페이지 | 로그인, 결제, 개인 정보 입력 |
☞ HTTPS는 기본적으로 모든 웹사이트에서 적용하는 것이 권장됨
Cache-Control, ETag 등을 사용하여 효과적인 캐싱☞ 다음 강의에서는 Web Application 개념과 서버 구조에 대해 학습할 예정!