웹 프로젝트를 개발하다보면, HTTP의 메소드를 사용하게 되는데 주로 GET, POST, PUT, DELETE
를 많이 사용해왔었다.
그러나, 멱등성
이라는 개념과 또 다른 메소드인 PATCH
를 새로 알게 되었다. 이를 통해, HTTP의 여러 메소드를 다시 알아보고 멱등성에 대해 살펴보는 시간을 가져보려고 한다.
멱등성
- 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질
- 멱등성을 지키면 부수 효과(side effect)가 없다.
GET
- 특정한 리소스를 가져오도록 요청
데이터를 가져올 때만 사용해야 한다.
멱등성을 가짐
- 요청에 본문이 존재하지 않음
- 응답에 본문이 존재함
POST
멱등성을 가지지 않음
- 요청에 본문이 존재함
- 응답에 본문이 존재함
- 사용되는 방식
- 기존 리소스에 주석달기
- 게시판, 뉴스 그룹, 메일링 리스트나 이와 유사한 시스템에 글 올리기
- 회원가입 모달로 새로운 사용자 추가하기
- 양식 전송 결과 등 데이터 블록을 데이터 처리 프로세스에 보내기
- 이어붙이기 연산을 통한 데이터베이스 확장
multipart/form-data
콘텐츠 유형을 사용하는 예시
POST /test.html HTTP/1.1
Host: example.org
Content-Type: multipart/form-data;boundary="boundary"
--boundary
Content-Disposition: form-data; name="field1"
value1
--boundary
Content-Disposition: form-data; name="field2"; filename="example.txt"
value2
--boundary--
PUT
- 요청 페이로드를 사용해 새로운 리소스를
생성
하거나, 대상 리소스를 나타내는 데이터를 대체
- 문서 전체의 완전한 교체만을 허용
멱등성을 가짐
- 요청에 본문이 존재함
- 응답에 본문이 존재하지 않음
DELETE
- 지정한 리소스를 삭제
멱등성을 가짐
- 요청에 본문이 존재할 수도 있음(선택)\
- 단, RFC 7231에 의하면 본문에 데이터를 넣는 것을 비추천함
- 헤더에 데이터를 넣는 것을 권장
- 응답에 본문이 존재할 수도 있음(선택)
PATCH
- PUT 메소드와는 달리, 리소스의
부분적인 수정
을 할 때에 사용
멱등성을 가지지 않음
- 하지만 PATCH를 PUT과 같은 방식으로 사용함으로써 멱등성을 가지게 할 수도 있다.
- 요청에 본문이 존재함
- 응답에 본문이 존재함
HEAD
- 특정 리소스를 GET 메서드로 요청했을 때 돌아올 헤더를 요청
- 응답은 본문을 가져선 안되며, 본문이 존재하더라도 무시해야 함
- 그러나, Content-Length처럼 본문 콘텐츠를 설명하는 개체 헤더는 포함할 수 있다.
- 이 때, 개체 헤더는 비어있어야 하는 HEAD의 본문과는 관련이 없고, 대신 GET 메서드로 동일한 리소스를 요청했을 때의 본문을 설명해야 한다.
멱등성을 가짐
- 요청에 본문이 존재하지 않음
- 응답에 본문이 존재하지 않음
참조
https://developer.mozilla.org/ko/