CS/네트워크

[CS] 멱등성이란 무엇인가?

Chae-ri🍒 2024. 10. 16. 19:47

멱등하다

첫 번째 수행을 한 뒤 여러 차례 수행 및 적용해도 결과를 변경시키지 않는 작업 또는 기능의 속성

즉, 한 번 수행한 결과와 여러 번 수행한 결과가 같은 것을 말한다.

 

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 (서버 상태 변경함)

 

안전성을 보장하는 메서드는 멱등성을 보장하지만, 멱등성을 보장하는 메서드는 안전성을 보장하지 않는다!

 

참고

https://www.tosspayments.com/blog/articles/21448

728x90

'CS > 네트워크' 카테고리의 다른 글

[CS/컴퓨터 네트워크] 네트워크 계층  (5) 2024.10.07