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를 사용하는 것이 더 적절하다)
'네트워크' 카테고리의 다른 글
쿠키, 세션, JWT (0) | 2024.11.05 |
---|---|
네트워크 기본 지식 (0) | 2024.05.08 |
web application 이해 (0) | 2023.08.01 |
[네트워크] 4. IP주소 (0) | 2023.03.26 |
[네트워크] 3. 네트워크 기기 (0) | 2023.03.07 |