인프런 커뮤니티 질문&답변

wcsjinn님의 프로필 이미지
wcsjinn

작성한 질문수

모든 개발자를 위한 HTTP 웹 기본 지식

HTTP 메서드의 속성

patch멱등성 관련 질문 2개입니다.

작성

·

443

1

"PUT의 경우와 PATCH의 경우가 애매하긴 합니다만, PUT은 예를들면 AGE=30으로 계속 반복 호출하는 것이라고 생각하시면 됩니다. AGE에 30을 할당하는 행위는 몇번을 반복해도 항상 AGE가 30일 것입니다. PATCH는 반면에 AGE = AGE+1 이라고 생각하시면 됩니다. 이것은 호출될때마다 AGE의 값이 바뀌게 되겠죠. 그래서 PUT은 멱등, PATCH는 멱등하지 않다라고 합니다."

1. 위 글은 다른 분 질문에 달린 답변의 일부입니다. 여기서 이해가 되지 않는 점이 PUT은 AGE = 30처럼 덮어쓰는 행위라고 생각하면 된다고 하셨는데 PUT도 AGE = AGE+1로 반복적으로 덮어쓸 수 있는것 아닌가요? 이렇게 된다면 put도 계속 리소스가 변경되는 것 같은데 왜 멱등한 것인지 이해가 명확히 되지 않습니다.

 

2. 그리고 safe와 멱등의 차이점은 단순히 한 번 호출과 여러번 호출했을때의 차이점인 것인지 아니면 요청의 결과가 같다는것에 초점을 맞춰야할지 헷갈립니다... 여러번 호출해도 데이터가 변하지않는다는게 멱등인 것인지 아니면 요청의 의도가 계속 같다는 것이 멱등인것인지 궁금합니다.

답변 1

4

안녕하세요. wcsjinn님, 공식 서포터즈 David입니다.

1. 위 글은 다른 분 질문에 달린 답변의 일부입니다. 여기서 이해가 되지 않는 점이 PUT은 AGE = 30처럼 덮어쓰는 행위라고 생각하면 된다고 하셨는데 PUT도 AGE = AGE+1로 반복적으로 덮어쓸 수 있는것 아닌가요? 이렇게 된다면 put도 계속 리소스가 변경되는 것 같은데 왜 멱등한 것인지 이해가 명확히 되지 않습니다.

=> 동일한 요청에 대해 동일한 결과일 때 멱등하다고 말합니다.

PUT은 "덮어 쓰기"를 합니다.

age = 0 + 1을 요청하면 age = 1로 덮어써집니다.

age = 1 + 1을 요청하면 age = 2로 덮어써집니다.

주의할 점은 age = 0 + 1과 age = 1 + 2은 서로 다른 요청이라는 점입니다.

 

100번 age = 0 + 1을 요청하면 PUT은 100번 모두 age = 1을 응답합니다.

100번 age = 1 + 1을 요청하면 PUT은 100번 모두 age = 2을 응답합니다.

이런 경우 멱등하다고 표현합니다.

 

만약 동일한 요청을 매번했을 때 내부적으로 리소스가 변경된다면 서버쪽에서 해당 HTTP API를 잘못 구현했다고 볼 수 있습니다.

age = 0 + 1을 2번 요청했는데, 첫번째 응답에서는 age = 1이 되고, 두번째 응답에서는 age = 2가 되면 해당 HTTP API PUT요청을 잘못 구현한 것입니다.

 

PATCH의 경우는 아래 글 답변을 참고해주세요.

https://www.inflearn.com/questions/110644

 

 

2. 그리고 safe와 멱등의 차이점은 단순히 한 번 호출과 여러번 호출했을때의 차이점인 것인지 아니면 요청의 결과가 같다는것에 초점을 맞춰야할지 헷갈립니다... 여러번 호출해도 데이터가 변하지않는다는게 멱등인 것인지 아니면 요청의 의도가 계속 같다는 것이 멱등인것인지 궁금합니다.

=> 이 부분은 강의 내에서 자세히 설명하십니다.

safe는 호출했을 때 '리소스의 변경'이 발생하지 않는 것을 말합니다.

멱등은 동일한 요청에 대해 동일한 응답을 제공하는 것을 말합니다.

 

감사합니다.

wcsjinn님의 프로필 이미지
wcsjinn

작성한 질문수

질문하기