[네트워크] HTTP Method (GET, POST, PUT, PATCH, DELETE)

임승민·2023년 4월 4일
0

네트워크

목록 보기
7/9
post-thumbnail

GET

💡 GET 메소드는 리소스를 조회하는데 사용된다.

GET은 요청 전송 시 필요한 데이터를 쿼리스트링을 통해 전송한다. 따라서 body와 Content-type이 비어있다.
쿼리스트링을 사용하면 URI에 조회 조건을 표시해서 링크, 북마크가 가능하다.

쿼리스트링: URL 끝에 ?와 함께 이름=값 쌍을 이루는 파라미터

www.example-url.com/resources?name1=value1&name2=value2

위 URI의 경우, 파라미터명은 name1, name2이고 각 파라미터 값은 value1, value2로 서버에 요청을 보낸다.

GET 요청의 참고 사항

  • GET은 불필요한 요청을 제한하기 위해 요청이 캐시될 수 있다.
  • GET 요청은 민감한 데이터를 처리할 때 사용해서는 안 된다. (파라미터에 내용 노출)
  • GET 요청은 데이터를 요청하는 데만 사용된다.
  • GET 요청은 브라우저 기록에 남는다.
  • GET 요청에는 길이 제한이 있다.

POST

💡 POST 메소드는 리소스를 생성/업데이트하는 데 사용된다.

POST는 전송해야될 데이터를 HTTP 메세지의 Body에 담아 전송한다. 이 때 요청 헤더의 Content-Type에 요청 데이터의 타입을 표시해야 한다.

HTTP 메세지의 Body는 길이 제한없이 데이터를 전송할 수 있어 대용량 데이터 전송이 가능하다.

POST는 데이터가 Body로 전송되어 내용이 보이지 않아 GET보다 보안적으로 안전하다고 생각할 수 있다.
하지만 크롬 개발자 도구, Fiddler 같은 툴로 요청 내용을 확인할 수 있어 민감한 데이터는 반드시 암호화해 전송해야 한다.

POST 요청의 참고 사항

  • POST 요청은 캐시되지 않는다
  • POST 요청은 브라우저 기록에 남아 있지 않는다.
  • POST 요청은 북마크할 수 없다.
  • POST 요청에는 데이터 길이에 대한 제한이 없다.

GET과 POST의 차이

GET은 Idempotent, POST는 Non-idempotent하게 설계되었다.

💡 Idempotent: 멱등
멱등은 수학이나 전산학에서 연산의 한 성질을 나타내는 것으로, 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질을 의미한다.

멱등은 한마디로 동일한 연산을 여러 번 해도 동일한 결과가 나와야 한다.
따라서 GET은 설계원칙에 따라 서버의 데이터나 상태를 변경시키지 않아야 하기 때문에 주로 조회할 때 사용해야 한다. ex) 브라우저에서 웹페이지 열기, 게시글 읽기/ 조회

POST서버의 상태/데이터 변경시 사용된다.
게시글을 작성하면 서버에 게시글이 저장이 되고, 게시글을 삭제하면 해당 데이터가 없어지는 등 POST로 요청하면 서버의 무언가는 변경되도록 사용된다. 이처럼 POST는 생성, 수정, 삭제에 사용할 수 있지만, 생성=POST, 수정=PUT/PATCH, 삭제=DELETE가 용도에 맞는 메소드이다.


PUT (feat. PATCH)

💡 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 = 리소스 일부 수정
  • 요청한 URI에 리소스가 없다면 PUT = 생성, PATCH = 생성X

POST와 PUT의 차이

  • POST는 멱등하지 않고, PUT은 멱등하다.
  • POST는 N개의 생성 요청에 N개의 리소스가 생성된다.
  • 하지만 PUT은 N개의 요청을 보내도 하나의 리소스만 생성된 채로 정보를 계속 덮어씌운다.

DELETE

💡 DELETE 메소드는 리소스를 삭제하는 데 사용된다.

URI을 통해서 어떤 데이터를 삭제할지를 정한다. 데이터 삭제라서 요청시 Body, Content-Type이 비어있다.


References

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

0개의 댓글