HTTP(하이퍼텍스트 전송 프로토콜, HyperText Transfer Protocol)는 웹 브라우저와 서버 간에 데이터를 주고받기 위한 표준 프로토콜입니다. HTTP는 클라이언트-서버 모델을 따르며, 클라이언트는 요청(request)을 보내고 서버는 이에 대한 응답(response)을 반환하는 방식으로 동작합니다. HTTP는 다양한 메서드를 통해 클라이언트가 서버에 특정 작업을 요청할 수 있으며, 이러한 메서드는 각기 다른 목적과 사용 사례에 맞게 설계되어 있습니다. 여기에서는 HTTP 메서드의 주요 종류와 각각의 사용에 대해 자세히 설명하겠습니다.
### 1. HTTP Method의 역할
HTTP 메서드는 클라이언트가 서버에 요청할 작업의 유형을 지정하는 데 사용됩니다. 일반적으로 HTTP 메서드는 리소스의 상태를 가져오거나 변경하는 작업을 수행하며, 각 메서드는 특정한 목적에 맞게 동작합니다. 이를 통해 클라이언트와 서버 간의 통신이 일관되게 이루어질 수 있으며, API 설계에서 중요한 역할을 합니다.
### 2. HTTP 메서드 종류
HTTP 메서드는 주로 다섯 가지가 많이 사용됩니다: **GET**, **POST**, **PUT**, **DELETE**, 그리고 **PATCH**. 이 외에도 **HEAD**, **OPTIONS**, **CONNECT**, **TRACE** 등의 메서드가 있지만, 이들 메서드는 특정 상황에서만 사용되며 상대적으로 덜 일반적입니다. 각 메서드의 용도와 특징을 자세히 살펴보겠습니다.
---
#### 2.1 GET
**GET** 메서드는 서버로부터 데이터를 조회하기 위해 사용됩니다. 주로 리소스를 가져올 때 사용되며, 서버의 상태나 리소스의 데이터를 변경하지 않습니다. 즉, **GET** 요청은 ‘읽기’ 작업에 해당합니다.
- **특징:**
- 서버로부터 데이터를 가져오기 위한 요청.
- 요청의 본문(body)이 없음.
- URL에 요청 파라미터(Query String)를 포함할 수 있음.
- **Idempotent(멱등성)**: 동일한 GET 요청을 여러 번 보내도 결과가 동일함.
- 브라우저의 캐싱 및 북마크 기능을 통해 자주 사용하는 리소스를 효율적으로 요청 가능.
- **예시:**
- 클라이언트가 특정 상품의 정보를 가져오기 위해 `/products/123`에 대해 GET 요청을 보낼 수 있습니다.
```http
GET /products/123 HTTP/1.1
Host: http://www.example.com
```
---
#### 2.2 POST
**POST** 메서드는 서버로 데이터를 전송하여 새로운 리소스를 생성하거나, 서버에서 처리할 데이터를 보내는 데 사용됩니다. 보통 폼 데이터를 제출하거나 파일을 업로드할 때 많이 사용됩니다.
- **특징:**
- 서버에 데이터를 제출하여 처리함.
- 요청 본문에 데이터를 담아 서버로 전송.
- 서버에서 새로운 리소스를 생성할 때 자주 사용.
- **Non-idempotent(비멱등성)**: 동일한 POST 요청을 여러 번 보내면 서버에서 동일한 작업이 반복적으로 수행될 수 있음.
- 대용량 데이터 전송이 가능.
- **예시:**
- 클라이언트가 새로운 상품을 생성하기 위해 서버로 상품 정보를 전송하는 경우.
```http
POST /products HTTP/1.1
Host: http://www.example.com
Content-Type: application/json
{
"name": "New Product",
"price": 29.99
}
```
---
#### 2.3 PUT
**PUT** 메서드는 서버에 리소스를 생성하거나, 기존 리소스를 대체(업데이트)할 때 사용됩니다. 이 메서드는 특정 리소스의 전체 상태를 새로 덮어쓰는 데 적합합니다.
- **특징:**
- 지정된 URI에 리소스를 생성하거나, 기존 리소스를 대체함.
- 요청 본문에 리소스의 전체 데이터를 담아 전송.
- **Idempotent(멱등성)**: 동일한 PUT 요청을 여러 번 보내도 결과는 동일함.
- 리소스가 없으면 새로 생성하고, 있으면 덮어씀.
- **예시:**
- 클라이언트가 기존 상품의 정보를 업데이트하는 경우.
```http
PUT /products/123 HTTP/1.1
Host: http://www.example.com
Content-Type: application/json
{
"name": "Updated Product",
"price": 19.99
}
```
---
#### 2.4 DELETE
**DELETE** 메서드는 서버에서 특정 리소스를 삭제할 때 사용됩니다. 서버는 해당 리소스를 삭제하거나 삭제 상태로 표시하게 됩니다.
- **특징:**
- 서버에서 지정된 리소스를 삭제함.
- **Idempotent(멱등성)**: 동일한 DELETE 요청을 여러 번 보내도 리소스가 한 번만 삭제되거나, 이미 삭제된 상태임.
- 요청 본문이 거의 필요하지 않음.
- **예시:**
- 클라이언트가 특정 상품을 삭제하기 위해 요청하는 경우.
```http
DELETE /products/123 HTTP/1.1
Host: http://www.example.com
```
---
#### 2.5 PATCH
**PATCH** 메서드는 서버의 리소스를 부분적으로 수정할 때 사용됩니다. **PUT** 메서드가 전체 리소스를 덮어쓰는 방식이라면, **PATCH**는 리소스의 특정 부분만 수정할 때 적합합니다.
- **특징:**
- 지정된 URI의 리소스를 부분적으로 수정함.
- 요청 본문에 수정할 데이터만 포함.
- **Non-idempotent(비멱등성)**: 특정 상황에서는 동일한 PATCH 요청을 여러 번 보내면 중복된 수정이 일어날 수 있음.
- **예시:**
- 클라이언트가 특정 상품의 가격만 수정하는 경우.
```http
PATCH /products/123 HTTP/1.1
Host: http://www.example.com
Content-Type: application/json
{
"price": 25.99
}
```
---
### 3. 기타 메서드
#### 3.1 HEAD
**HEAD** 메서드는 **GET** 메서드와 유사하지만, 응답 본문을 포함하지 않습니다. 주로 리소스의 메타데이터(예: 콘텐츠 타입, 길이)를 확인할 때 사용됩니다.
- **특징:**
- GET 요청과 동일한 방식으로 동작하지만, 응답 본문이 없음.
- 서버 리소스의 상태나 메타데이터만 확인 가능.
- 캐싱 및 최적화를 위해 사용됨.
---
#### 3.2 OPTIONS
**OPTIONS** 메서드는 특정 리소스에서 허용된 HTTP 메서드를 확인하거나, 서버의 기능을 조회하는 데 사용됩니다. 클라이언트는 이 요청을 통해 서버가 어떤 HTTP 메서드를 지원하는지 확인할 수 있습니다.
- **특징:**
- 서버에서 지원하는 메서드 및 통신 옵션을 확인할 수 있음.
- 서버와 클라이언트 간의 사전 협상에 사용됨.
- 보통 브라우저에서 CORS(교차 출처 리소스 공유) 요청 전에 사용됨.
---
#### 3.3 CONNECT
**CONNECT** 메서드는 주로 프록시 서버와 함께 사용되어 클라이언트와 서버 간에 TCP 터널을 생성합니다. 주로 HTTPS와 같은 암호화된 SSL/TLS 요청을 처리할 때 사용됩니다.
- **특징:**
- 클라이언트와 서버 간의 터널링을 설정함.
- 암호화된 트래픽을 전송할 때 유용함.
---
#### 3.4 TRACE
**TRACE** 메서드는 서버에서 클라이언트가 보낸 요청을 그대로 반환하는 데 사용됩니다. 이를 통해 클라이언트는 서버에서 요청이 어떻게 수신되었는지 확인할 수 있습니다.
- **특징:**
- 요청 메시지가 서버에 도달할 때까지의 경로를 추적할 수 있음.
- 디버깅 목적으로 사용됨.
- 보안상 위험할 수 있어 잘 사용되지 않음.
---
### 4. HTTP 메서드의 Idempotency와 Safe
HTTP 메서드의 중요한 속성 중 하나는 **Idempotency(멱등성)**와 **Safe**입니다. 이는 HTTP 메서드가 얼마나 신뢰성 있게 동작하는지를 결정합니다.
- **Idempotency(멱등성):**
멱등성은 여러 번의 동일한 요청을 보내더라도 서버 상태나 응답이 변경되지 않음을 의미합니다. 즉, GET, PUT, DELETE는 멱등성을 가지며, POST는 비멱등성입니다.
- **Safe:**
Safe 메서드는 서버의 상태를 변경하지 않는 메서드를 의미합니다. GET, HEAD, OPTIONS, TRACE는 Safe 메서드에 해당하며, 이들은 서버에 어떤 변화를 주지 않고 데이터만 조회합니다.
이상으로 http 메서드에 대해서 간략하게 알아보았습니다.HTTP Method
'게으른 개발자의 끄적거림' 카테고리의 다른 글
.jar파일이란? (1) | 2024.10.11 |
---|---|
GET POST 차이점 완벽 정리 (0) | 2024.10.10 |
크롬 개발자도구 콘솔 Don’t paste code 오류 해결 방법 (0) | 2024.10.07 |
Scope란? (feat. Page, Request, Session, Application) (2) | 2024.09.24 |
.tld파일이란? (1) | 2024.09.04 |