[HTTP의 GET과 POST]

Junyeong Fred Kim·2021년 12월 21일
0

HTTP의 GET과 POST 비교

둘 다 HTTP 프로토콜을 이용하여 서버에 무엇인가를 요청할 떄 사용하는 방식이다. 하지만 둘의 특징을 제대로 이해하여 기술의 목적에 맞게 알맞은 용도에 사용해야 한다.

먼저 GETIdempotent, POSTNon-idempotent하게 설계되었습니다.
Idempotent(멱등)은 수학적 개념으로 다음과 같이 나타낼 수 있습니다.

👉 수학이나 전산학에서 연산의 한 성질을 나타내는 것으로, 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질

GET

즉, 멱등이라는 것은 동일한 연산을 여러 번 수행하더라도 동일한 결과가 나타나야 합니다.
여기서 GETIdempotent하도록 설계되었다는 것은 GET으로 서버에게 동일한 요청을 여러 번 전송하더라도 동일한 응답이 돌아와야 한다는 것을 의미합니다. 이에 따라 GET은 설계원칙에 따라 서버의 데이터나 상태를 변경시키지 않아야 Idempotent하기 때문에 주로 조회를 할 때에 사용해야합니다. 예를 들어, 브라우저에서 웹페이지를 열어보거나 게시글을 읽는 등 조회를 하는 행위GET으로 요청하게 됩니다.

GET방식은 요청하는 데이터가 HTTP Request Message의 Header 부분에 url이 담겨서 전송됩니다. 때문에 url 상 ?뒤에 데이터가 붙어 request를 보내게 되는 것. 이러한 방식은 url이라는 공간에 담겨서 가기 때문에 전송할 수 있는 데이터의 크기가 제한적입니다.

하지만 기술의 발전으로 현재는 상상하기 힘든 데이터의 크기에 대해 제한적인 듯(?)하다.

👉 GET 데이터 크기 설명에 대한 링크

또 보안이 필요한 데이터에 대해서는 데이터가 그대로 url에 노출되므로 GET 방식은 적절하지 않습니다.
(ex. password)


POST

반대로 POSTNon-idempotent하기 때문에 서버에게 동일한 요청을 여러 번 전송해도 응답은 항상 다를 수 있습니다. 이에 따라 POST서버의 상태나 데이터를 변경시킬 때 사용됩니다. 게시글을 쓰면 서버에 게시글이 저장이 되고, 게시글을 삭제하면 해당 데이터가 없어지는 등 POST로 요청을 하게 되면 서버의 무언가는 변경되도록 사용됩니다.

POST 방식의 request는 HTTP Request Message의 Body 부분에 데이터가 담겨서 전송됩니다. 때문에 바이너리 데이터를 요청하는 경우 POST 방식으로 보내야 하는 것처럼 데이터 크기가 GET 방식보다 크고 보안면에서 낫습니다. (하지만 전체적인 보안 측면에서는 암호화를 하지 않는 이상 고만고만하다.)

그렇다면 이러한 특성을 이해한 뒤에는 어디에 적용되는지를 알아봐야 그 차이를 극명하게 이해할 수 있습니다.

우선 단순하게 생각해보면, GET은 가져오는 것이고, 서버에서 어떤 데이터를 가져와서 보여준다거나 하는 용도이지 서버의 값이나 상태 등을 변경하지 않습니다. 반면에 POST는 서버의 값이나 상태를 변경하기 위해서 또는 추가하기 위해서 사용됩니다.

이처럼 POST생성, 수정, 삭제에 사용할 수 있지만, 생성에는 POST, 수정은 PUT 또는 PATCH, 삭제는 DELETE가 더 용도에 맞는 메소드라고 할 수 있습니다.


참고: https://hongsii.github.io/2017/08/02/what-is-the-difference-get-and-post/

profile
기억보다 기록

0개의 댓글