본문 바로가기
CS

[네트워크] HTTP 메소드의 멱등성

by yjohbjects 2023. 3. 18.

시작하기 앞서. . .
HTTP 메소드란?

클라이언트와 서버 사이에 이루어지는 요청(Request)과 응답(Response) 데이터 전송을 하는 방식


멱등성이란?

def ABS(num):
    return abs(number)

수학에서 주로 사용하는 용어로, 연산을 여러 번 적용하더라도 결과가 달라지지 않고 한 번만 수행한 것과 같은 성질을 의미.
즉, 결과는 같으므로 안전하게 사용할 수 있는 성질이기도 하다.

 

HTTP 메소드의 멱등성

HTTP Method 멱등성(idempotence)
GET O
HEAD O
PUT O
DELETE O
POST X
PATCH X

HTTP 메소드의 멱등성은 동일한 요청한번 보내는 것과 = 여러번 보내는 것

1. 서로 동일한 효과를 가져야 하고

2. 서버의 상태도 동일하게 남아야 한다.

 

멱등성을 따질 때는 실제 서버의 백엔드 상태만 보면 된다.

다만, 서버는 멱등성을 보장하지 않으며, 일부 메소드는 잘못된 구현으로 멱동성 제약을 어길 수 있다.

더보기

예를들면, DELETE 메소드는 멱등성을 보장하지만,

"목록의 마지막 항목을 제거"하는 DELETE메소드는 잘못된 구현으로 멱동성의 제약을 어긴다.

 

멱등성을 가지는 HTTP 메소드의 예시

GET

GET /pageX HTTP/1.1
GET /pageX HTTP/1.1
GET /pageX HTTP/1.1

DELETE

반환되는 상태코드는 달라질 수 있겠지만, 서버의 상태가 달라지는 것은 아님으로 멱등성을 가진다.

DELETE /idX/delete HTTP/1.1 => 200
DELETE /idX/delete HTTP/1.1 => 404
DELETE /idX/delete HTTP/1.1 => 404

 

멱등성을 가지지 않는 HTTP 메소드의 예시

POST

여러번 호출할 경우, 요청된 데이터가 서버에 추가됨으로 멱등성을 갖지 않는다.

POST /add_row HTTP/1.1
POST /add_row HTTP/1.1
POST /add_row HTTP/1.1

 

PUT vs PATCH

PUTPATCH 모두 자원을 수정하는 HTTP  메소드이다.

PUT은 payload에 있는 자원으로 대체하는 메서드이고, PATCH는 부분적인 수정을 적용하기 위한 메서드이다.

PUT이 멱등성을 보장하는 반면에, PATCH 는 항상 멱등성을 보장하지는 않는다.

멱등성을보장하도록 설계는 가능하나, 멱등성을 보장하지 않도록 설계할 수도 있다. 

 

PUT은 요청에 대하여 리소스를 통째로 바꿔버리기 때문에 멱등성이 보장되지만,

{"age": 20}

PATCH는 리소스의 일부에 대하여 변화를 명령하기 때문에 멱등성을 보장하지는 않는다.

{
  "operation": "add",
   "age": "20"
}

 

멱등성 ≠ 안전한 메소드

안전한 메소드란?

서버의 상태를 변경시키지 않는 HTTP 메소드를 의미한다. 

GET, OPTIONS, HEAD와 같이 조회에 사용되는 메소드를 안전한 메소드라고 볼 수 있다.

 

안전한 메소드는 모두 멱등성을 갖지만, 멱등성을 지닌 메서드가 모두 안전한 것은 아니다.

리소스를 수정하는 PUT과 삭제하는 DELETE의 경우 안전한 메소드라고 이야기 할 수 없다.

 

 

https://developer.mozilla.org/ko/docs/Glossary/Idempotent

https://developer.mozilla.org/ko/docs/Glossary/Safe/HTTP

'CS' 카테고리의 다른 글

프로세스와 스레드  (1) 2023.06.01
[GIT] Git 브랜치 전략:Git flow, GitHub flow  (0) 2023.05.03
JavaScript vs TypeScript 대체 차이가 뭔데?  (0) 2023.04.19
[HTML] Semantic HTML란?  (0) 2023.04.10
Git이란?  (0) 2023.04.01