본문 바로가기
네트워크

[WEB] HTTP 멱등성

by 상똥 2024. 1. 3.

1. 멱등성(冪等性, idempotent)

- 덮을 멱, 같을 등 (무슨 뜻인지 더 모르겠음)

- 동일한 요청을 한 번 보냈을 때의 효과와 서버 = 동일한 요청을 여러번 보냈을 때 효과와 서버

- 서버의 상태가 변경된다는 것 : 주로 해당 서버의 데이터나 상태가 요청에 따라 수정되거나 갱신되는 것 (추가, 수정, 삭제)

- 즉, 여러번의 호출에도 결과가 같음을 의미하며 변경이 발생하지 않는 것과는 다른 개념

- 멱등성을 가지는 메서드 : GET, PUT, DELETE, HEAD, OPTIONS

- 멱등성을 가지지 않는 메서드 : POST, PATCH

 

2. 대표적인 메서드들의 안정성

- 호출시에 리소스가 변경되지 않는 성질

  안전성
GET O
POST X
PUT X
PATCH X
DELETE X

 

3. 대표적인 메서드들의 멱등성

  멱등성
GET O
POST X
PUT O
PATCH X
DELETE O

(1) GET (O)

- 단순히 값을 조회하는 메서드

- 여러번 요청해도 서버상태가 바뀌지 않고 동일한 상태를 유지한다

 

(2) PUT (O)

- 서버에 리소스를 업데이트하거나 생성하는 메서드

- 이미 해당 리소스가 있다면 데이터를 *덮어쓰기* 하므로, 서버 상태가 달라진다고 할 수 없다

- 해당 리소스가 없더라도 한 번 PUT요청을 하면 데이터가 생기기 때문에 이후 여러번 같은 요청을 보내더라도 서버 상태가 달라지지 않는다

 

(3) POST (X)

- 새로운 자원을 생성하는 메서드

- 같은 요청을 여러번 보내면 (데이터는 같더라도) 매번 새로운 데이터가 생겨남

- 즉 서버 상태가 달라진다고 할 수 있음

- 서버 등에 문제가 생겼을 때 POST 메서드 요청을 여러번 보내기 보다는 다른 조취를 취하도록 하는 것이 적절하다 

 

(4) PATCH (X)

- 리소스를 부분적으로 수정하는 메소드

- 구현 방법에 제한이 없어 멱등성을 가지기도 하고, 가지지 않기도 한다

- PUT과 동일한 방식(덮어쓰기)으로 요청된 경우 멱등성을 가짐

기존의 리소스
{
  id: 1,
  name: "김철수",
  age: 15  
}

PATCH /users/1
{
  age: 20
}

변경된 리소스
{
  id: 1,
  name: "김철수",
  age: 20
}

- 덮어쓰기가 아닌 동작을 지정하는 경우, 동일한 요청을 여러번 보내면 멱등성을 가지지 않는다

기존의 리소스
{
  id: 1,
  name: "김철수",
  age: 15  
}

PATCH /users/1
{
  age: {
    type: $inc,
    value: 1
  }
}

변경된 리소스
{
  id: 1,
  name: "김철수",
  age: 16
}

 

(5) DELETE (O)

- 리소스를 제거하는 메서드

- 경우에 따라 멱등성을 가지기도 하고, 가지지 않기도 한다

- n번째 리소스를 지정해서 삭제하도록 요청하는 경우, 이러한 요청이 여러번 와도 이미 삭제된 상태이므로 멱등성을 가진다

- 마지막(last) 리소스를 삭제하도록 요청하는 경우 계속해서 마지막 리소스가 제거되므로 멱등성을 가지지 않는다. (그러므로, POST를 사용하는 것이 더 적절하다)

 

 

'네트워크' 카테고리의 다른 글

네트워크 기본 지식  (0) 2024.05.08
web application 이해  (0) 2023.08.01
[네트워크] 4. IP주소  (0) 2023.03.26
[네트워크] 3. 네트워크 기기  (0) 2023.03.07
[네트워크] 2. 네트워크 성능 분석 명령어  (0) 2023.02.28