멱등하다
첫 번째 수행을 한 뒤 여러 차례 수행 및 적용해도 결과를 변경시키지 않는 작업 또는 기능의 속성
즉, 한 번 수행한 결과와 여러 번 수행한 결과가 같은 것을 말한다.
HTTP 메서드의 멱등성
해당 HTTP 메서도의 요청을 여러 번 시도했을 때 요청 결과가 계속해서 같은 경우, 멱등성 메서드라고 한다.
예를 들어, GET은 여러 번 호출해도 같은 결과를 가져오고, 데이터에 변화를 일으키지 않기 때문에 멱등성이 보장된 메서드이다.
메서드 | 특징 | 멱등성 보장 |
GET | 데이터를 조회할 때 사용 같은 요청을 여러 번 보내도 결과가 같음 데이터 변경 없음 |
O |
POST | 데이터를 생성 및 제출할 때 사용 같은 요청을 여러 번 보내면 중복 생성 가능 데이터 변경 발생 |
X |
PUT | 데이터를 갱신하거나 대체할 때 사용 주어진 데이터가 존재하면 덮어씀 같은 데이터를 여러 번 대체해도 결과가 같음 |
O |
PATCH | 데이터의 일부를 수정할 때 사용 부분적인 데이터 변경 부분 변경이므로 여러 번 보내면 결과가 달라질 수 있음 |
X |
DELETE | 데이터를 삭제할 때 사용 같은 데이터를 여러 번 삭제 요청해도 결과는 같음 |
O |
HEAD | GET과 유사하지만 응답 body 없이 헤더만 반환 데이터의 존재 여부나 상태만 확인 여러 번 요청해도 응답 내용 동일 |
O |
OPTIONS | 서버가 지원하는 메서드 목록을 확인할 때 사용 주로 CORS 관련 요청에서 사용 여러 번 요청해도 같은 결과 |
O |
TRACE | 클라이언트에서 서버까지의 요청 경로를 추적할 때 사용 주로 디버깅 용도 여러 번 요청해도 같은 결과 |
O |
CONNECT | 프록시 서버를 통해 터널링을 설정할 때 사용 주로 SSL이나 HTTPS 연결을 위한 터널링 연결 상태에 따라 달라질 수 있음 |
X |
+++ 여기서 PATCH는 PUT과 똑같이 갱신을 하는 작업인데 왜 멱등성을 보장하지 않는가?🤔
PATCH는 리소스의 일부를 수정하기 때문에 멱등성이 보장되지 않을 수 있다.(보장할 수도, 안할 수도 있다)
PATCH 요청이 리소스의 값을 증가시키거나 누적 변경이 발생하면, 여러 번 보내는 경우 상태가 달라질 수 있다.
멱등성이 보장된 경우
리소스를 덮어쓰기(예: 특정 값을 지정)하는 경우에는 여러 번 요청을 보내도 결과가 동일하므로 멱등성이 보장된다.
PATCH /user/123/account
{
"balance": 1000
}
멱등성이 보장되지 않은 경우
리소스의 값을 일부 증가/감소시키거나 누적적인 변경을 적용하는 경우, 요청을 반복하면 리소스 상태가 계속 변하기 때문에 멱등성이 보장되지 않는다.
PATCH /user/123/account
{
"balance": "+100"
}
멱등성 vs 안전성
멱등성: 같은 요청을 여러 번 보내더라도, 결과가 동일해야 한다는 성질
안전성: 요청을 보내도 서버의 상태가 변경되지 않아야 한다는 성질
안전성이 보장된 메서드 => GET, HEAD, OPTIONS, TRACE (서버 상태 변경 안함)
안전성이 보장되지 않은 메서드 => POST, DELETE, PUT, PATCH, CONNECT (서버 상태 변경함)
안전성을 보장하는 메서드는 멱등성을 보장하지만, 멱등성을 보장하는 메서드는 안전성을 보장하지 않는다!
참고
'CS > 네트워크' 카테고리의 다른 글
[CS/컴퓨터 네트워크] 네트워크 계층 (5) | 2024.10.07 |
---|