💡 GET 메소드는 리소스를 조회하는데 사용된다.
GET은 요청 전송 시 필요한 데이터를 쿼리스트링을 통해 전송한다. 따라서 body와 Content-type이 비어있다.
쿼리스트링을 사용하면 URI에 조회 조건을 표시해서 링크, 북마크가 가능하다.
쿼리스트링: URL 끝에
?
와 함께이름=값
쌍을 이루는 파라미터
www.example-url.com/resources?name1=value1&name2=value2
위 URI의 경우, 파라미터명은 name1
, name2
이고 각 파라미터 값은 value1
, value2
로 서버에 요청을 보낸다.
💡 POST 메소드는 리소스를 생성/업데이트하는 데 사용된다.
POST는 전송해야될 데이터를 HTTP 메세지의 Body에 담아 전송한다. 이 때 요청 헤더의 Content-Type에 요청 데이터의 타입을 표시해야 한다.
HTTP 메세지의 Body는 길이 제한없이 데이터를 전송할 수 있어 대용량 데이터 전송이 가능하다.
POST는 데이터가 Body로 전송되어 내용이 보이지 않아 GET보다 보안적으로 안전하다고 생각할 수 있다.
하지만 크롬 개발자 도구, Fiddler 같은 툴로 요청 내용을 확인할 수 있어 민감한 데이터는 반드시 암호화해 전송해야 한다.
GET은 Idempotent, POST는 Non-idempotent하게 설계되었다.
💡 Idempotent: 멱등
멱등은 수학이나 전산학에서 연산의 한 성질을 나타내는 것으로, 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질을 의미한다.
멱등은 한마디로 동일한 연산을 여러 번 해도 동일한 결과가 나와야 한다.
따라서 GET은 설계원칙에 따라 서버의 데이터나 상태를 변경시키지 않아야 하기 때문에 주로 조회할 때 사용해야 한다. ex) 브라우저에서 웹페이지 열기, 게시글 읽기/ 조회
POST는 서버의 상태/데이터 변경시 사용된다.
게시글을 작성하면 서버에 게시글이 저장이 되고, 게시글을 삭제하면 해당 데이터가 없어지는 등 POST로 요청하면 서버의 무언가는 변경되도록 사용된다. 이처럼 POST는 생성, 수정, 삭제에 사용할 수 있지만, 생성=POST
, 수정=PUT/PATCH
, 삭제=DELETE
가 용도에 맞는 메소드이다.
💡 PUT 메소드는 리소스를 생성/업데이트하는 데 사용된다.
클라이언트가 구체적인 리소스 위치를 알고 URI를 지정하고, 수정할 데이터 값은 Body에 담아 보낸다.
PUT 요청 시 요청을 일부분만 보내면 나머지는 null값으로 대체된다. 따라서 수정하지 않는 데이터도 모두 보내야 한다.
만약 Tom이라는 회원의 age를 변경하기 위해 수정된 값만 보낼 경우, 보내지 않은 데이터는 null이 된다.
PUT /users/1
{
"age": 20
}
//--------------
HTTP/1.1 200 OK
{
"name": null,
"age": 20
}
따라서 PUT은 변경되지 않는 데이터도 모두 전달해야한다. 이처럼 부분 수정을 원한다면 PATCH를 사용해야 한다. PATCH는 수정된 값만 변경되고 나머지 데이터들은 유지된다.
PUT
= 리소스 전체 수정, PATCH
= 리소스 일부 수정PUT
= 생성, PATCH
= 생성X💡 DELETE 메소드는 리소스를 삭제하는 데 사용된다.
URI을 통해서 어떤 데이터를 삭제할지를 정한다. 데이터 삭제라서 요청시 Body, Content-Type이 비어있다.
https://hongsii.github.io/2017/08/02/what-is-the-difference-get-and-post/
https://www.w3schools.com/tags/ref_httpmethods.asp
https://devuna.tistory.com/77
https://velog.io/@yh20studio/CS-Http-Method-란-GET-POST-PUT-DELETE#3-put