Delete와 멱등성

존재하지 않는 리소스에 delete 요청을 하는 경우 204를 보내줄까, 404를 보내줄까?

멱등성이란, "여러번 동일한 요청을 보냈을 때, 서버에 미치는 의도된 영향이 동일한 경우"를 의미한다.
HTTP 메서드들 중, POST, CONNECT, PATCH를 제외한 모든 메서드는 멱등하다.

HTTP 메소드는 멱등성이 왜 필요할까? 바로 요청의 재시도 때문이다. HTTP 요청이 멱등하다면 요청이 실패한 경우 요청을 다시 보내면 된다. 반대로 멱등하지 않다면, 리소스가 이미 처리되었는데도 불구하고 중복 요청을 보낼 수 있기 때문에 문제가 발생한다. 요청이 실패한 경우, 무지성으로 재시도 요청을 보내면 안되고 멱등성을 고려해서 재시도 요청을 보내야한다.

멱등성의 고려 요인은 오로지 사용자 요청에 의한 리소스만을 고려하고, 구현에 따른 부작용은 구려하지 않는다. 또한 재요청 중간에 리소스가 변경된 것 또한 고려하지 않는다. 외부 요인에 의해 변경된 사항은 고려 대상이 아니다.

DELETE가 처음에는 성공 응답 200을 받고, 동일한 요청을 보냈더니 에러 응답 404를 받은 상황을 가정하자. DELETE를 사용하면 클라이언트가 받는 응답 상태 코드가 달라질 수 있음에도 불구하고 멱등하다. 멱등성의 기준이 상태코드가 아니기 때문인데, 공식문서의 설명에 따르면 멱등성의 핵심 기준은 "서버에 미치는 의도된 영향이 동일한가?"이다. 즉 리소스(표현(Representation)) 관점에서는 응답 상태와 무관하게 리소스가 없는 상태를 유지하기 때문에 멱등하다고 말할 수 있다.