HTTP( Hyper Text Transfer Protocol)로 RFC 2616에서 규정된 Web에서 데이터를 주고 받는 프로토콜을 말한다.
이름에는 하이퍼 텍스트 전송용으로 정의되어 있지만, 실제로는 HTML, JSON, XML, Image, Voice, Video, Javascript, PDF등 다양한 컴퓨터에서 다룰 수 있는 모든 것을 전송할 수 있다.
TCP를 기반으로 한 REST의 특징을 모두 구현하고 있는 Web기반의 프로토콜이다.
HTTP는 반드시 Request가 있고, Response가 있다.
Http Method의 안전성이란 보안취약성을 말하는 것이 아니라 호출해도 리소스가 변경되지 않는 성질을 말한다.
예를 들어, GET Method
는 단순히 Retrieve
만을 수행하기 때문에 리소스를 변경하지 않기 때문에 안전성을 가진 Http Method
라고 할 수 있다.
반면에, POST, PUT, DELETE, PATCH Method
는 호출한 데이터의 변경/갱신이 발생하므로 안전하지 않은 Http Method
라고 할 수 있다.
사전적으로 멱등이란, 연산을 여러 번 적용하더라도 결괏값이 달라지지 않는 일을 의미한다.
위의 정의에 따라 Http Method의 멱등성이란 성질
은 요청(Request)를 1번 이상 호출하더라도, 그 결과가 항상 동일함을 의미한다.
동일한 요청을 여러번 보내더라도, 서버의 상태도 동일하게 남을 때, 멱등성을 가진다고 말한다.
RFC 7231스펙 문서 에 보면 멱등성이란 “여러 번 동일한 요청을 보냈을 때, 서버에 미치는 의도된 영향이 동일한 경우” 라고 정의되어 있다
📖 GET Method
GET은 데이터를 한 번을 조회하든, 여러 번을 조회하든 같은 결과가 조회되므로 안전과 멱등을 동시에 만족하는 메서드이다.
설계상의 예외
1. GET /post/1 요청
2. 서버에서 id값이 1인 게시글을 조회
3. 해당 게시글의 조회수 데이터를 1 증가
4. 해당 게시글 데이터를 응답⚠️ 멱등하다고 해서 결과가 항상 같지 않음
1. A 가 GET /members/100 통해 리소스를 조회
2. B 가 PUT /members/100 통해 리소스를 변경
3. A 가 GET /members/100 통해 리소스를 다시 조회
📖 DELETE Method
DELETE Method
는 단순 삭제이다. 삭제 요청을 여러번 하더라도 서버에서는 이미 해당 리소스가 삭제되었으므로 서버의 상태는 변하지 않는다. (멱등성이 성립)
설계상의 예외
Send Request DELETE /posts/last
DELETE
를 여러번 요청하면 매번 마지막 게시글을 삭제하므로 매번 서버의 상태가 변하게 되므로 멱등성이 성립하지 않게 된다.
📖 POST Method
POST
는 서버로 자원을 전송하여 새로운 자원을 생성한다. POST Method
요청을 여러번 보내는 경우 매번 새로운 자원이 생성되며, 이는 서버의 상태가 변경되는 것을 의미하는 것이므로 멱등을 만족하지 않는다.
📖 PUT Method
PUT
은 대상 리소스를 갱신하거나, 리소스가 없으면 신규로 추가한다.
즉, 대상 리소스가 없으면 POST
와 같은 동작을 하고, 대상 리소스가 있으면 자원의 갱신만 한다.
⚠️ 멱등하다고 해서 결과가 항상 같지 않음
상태코드 | 설명 |
---|---|
200 OK | GET, PUT |
201 Created | POST, PUT |
205 No Content | DELETE, PUT |
📖 PATCH
PUT
이 리소스 전체 교체 라면, PATCH
는 리소스의 부분적인 수정을 할 때 사용된다.
PATCH
는 멱등성을 보장한다고 명시되어 있지는 않다. 다만, 설계에 따라 멱등성이 성립되기도 하고 성립되지 않기도 한다.
📌
PUT
과PATCH
메소드의 중요한 차이점은 전체 교체, 일부 교체 행위의 차이가 아니라,PUT
메소드는 반드시 멱등성을 보장하지만PATCH
메소드는 멱등성을 보장하지 않을 수도 있다는 것이다.
캐시 가능성
은 응답 결과 리소스를 캐싱해서 사용할 수 있는가의 여부를 말한다.
공식 Spec
상 지원하는 Method는 GET, HEAD
이다. POST, PATCH
도 캐싱하여 사용할 수 있으나 브라우저 문제를 비롯하여 유지의 어려움 때문에 보장하진 않는다.