게으른 개발자의 끄적거림

HTTP Method란? (GET, POST, PUT, DELETE)

끄적잉 2024. 10. 8. 20:02

 

 

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