반응형
1. HTTP 멱등성(Idempotent)이란??
HTTP 멱등성이란 동일한 요청을 한 번 보내는 것과 여러 번 연속으로 보내는 것이 같은 효과를 지니고, 서버의 상태도 동일하게 남을 때 해당 HTTP 메서드가 멱등성을 가졌다고 설명한다.
올바르게 구현한 경우
멱등성을 가진 메서드 : GET, HEAD, DELETE, OPTIONS 등
멱등성을 가지지 않는 메서드 : POST, PATCH
2. 대표적인 Method들의 멱등성
멱등성을 가진 메서드(Method)
- GET : 처음 요청에 대한 서버상태가 여러번 요청해도 바뀌지 않고 동일한 상태를 유지한다. (계속해서 index.html의 본문내용 조회)
요청
GET index.html
응답
<html>
hello world!!
</html>
- PUT : PUT요청은 데이터를 덮어쓰기 하는 것으로 만약 요청 시에 수정할 데이터를 일부분만 보낼 시 일부분에 해당하지 않는 데이터들은 NULL값을 가지게 된다. 하지만, 이 요청 역시 처음 요청에 대한 서버상태와 여러 번 요청에 대한 서버 상태가 같으므로 멱등성을 가진다.
기존 데이터
{
name : 'abc'
age : 20
}
요청
PUT /post
{
name : 'kdk'
}
응답
{
name : 'kdk'
age : NULL
}
- DELETE : DELETE 도 마찬가지로 삭제를 함으로 써 처음과 다른 응답 값을 주지만, 여기서 주목해야할 것은 응답값이 바뀜이 아니라 서버상태가 바뀌지않는다는 것을 주목해야한다 ( 주의! - DELETE 메서드를 사용해 "목록의 마지막 항목 제거" 기능을 구현한다면 계속해서 마지막 목록을 삭제함으로써 멱등성을 가지지 않는다. REST API에서는 이렇게 구현하면 안 된다!)
요청
DELETE /post/1
응답
200 OK
다음번 요청 시 응답
404 ERROR
멱등성을 가지지않은 메서드(Method)
- POST : POST는 요청을 보낼 때마다 새로운 데이터를 생성함을 예상함으로 써 처음 서버의 상태와 여러 번 요청했을 때의 서버 상태가 다르다. 그러므로 멱등성을 가지지 않는다.
요청
POST /post
{
name : 'kdk'
}
응답
{
id : 1 ----- 1, 2, 3 늘어남
name : 'kdk
}
- PATCH : PATCH는 기본적으로 멱등성을 가지지 않지만, PUT과 동일한 방식으로 쓴다면 멱등성을 가질 수 있다, 하지만 추가(append)하는 요청 역시 PATCH를 쓸 수 있어 결과가 매번 달라지는 추가 요청은 멱등성을 가진다고 할 수 없다.
1. PATCH → name: [”MangKyu”]
2. PATCH → name: [”MangKyu”, ”MangKyu”]
3. PATCH → name: [”MangKyu”, ”MangKyu”, ”MangKyu”]
자료 출처 -> 망나니개발자 블로그
멱등성을 갖는 메서드도 서버의 상태는 변경할 수 있으나,
멱등성의 핵심은 ' 요청에 대한 서버의 상태가 똑같은가? "이다.
3. 안전한 메서드
안전한 메서드란 서버의 상태를 변경시키지 않는 HTTP 메서드를 의미한다.
- 모든 안전한 메서드는 멱등성을 갖는다.
- 안전한 메서드 : GET, HEAD, OPTIONS
앞서 설명한 것들 중 PUT과 DELETE는 멱등성을 갖지만 안전한 메서드는 아니다.
PUT은 리소스를 수정하고, DELETE는 메서드를 제거하므로 안전한 메서드라고 이야기할 수 없다.
- 서버의 상태를 변경시키기 때문에
** 참고자료 **
https://developer.mozilla.org/ko/docs/Glossary/Idempotent
https://june0122.github.io/2021/08/05/term-idempotent/
반응형
'3층 개발관 > 웹 지식' 카테고리의 다른 글
[Intellij] 인텔리제이 실행 콘솔창 한글 깨짐 해결방법 (0) | 2023.04.27 |
---|---|
[HTTP] HTTP 0.9/1.0/1.1/2.0/3.0 특징 정리 (0) | 2023.04.06 |
[VS Code] ""쌍따옴표, ()괄호 Tab눌러서 뛰어넘기 (0) | 2023.03.23 |
[VS Code] VS Code HTML양식 불러오기 & 실시간 확인 설정(Live Server 설정) (0) | 2023.03.13 |
[DBeaver] 데이터 csv추출 & 저장 파일 한글깨짐 현상 (1) | 2023.01.09 |