HTTP는 웹상에서 클라이언트와 서버 간에 요청/응답으로 데이터를 주고 받을 수 있는 프로토콜입니다.
클라이언트가 HTTP 프로토콜을 통해 서버에게 요청을 보내면 서버는 요청에 맞는 응답을
클라이언트에게 전송합니다. 이 때, HTTP 요청에 포함되는 HTTP 메소드는 서버가 요청을 수행하기 위해 해야할 행동을 표시하는 용도로 사용합니다. 이 HTTP 메소드 중 GET과 POST의 특징과 차이점을 알아보겠습니다.
GET, 서버에 조회를 하기 위해서 쓰는 method이다. 서버에 정보를 요청할때 퀴리스트링을 통해서 전송을 하고 url 주소에 물음표(?)로 데이터를 전송을 한다. 퀴리스트링은 url뒤에 물음표와 함꼐 이름과 값으로 이루어진 요청 파라미터를 말하는거다. 요청 파라미터가 여러개면 &을 붙여서 이어준다.
https://example.com/info/name1?=value1
https://example.com/info/name1?=value1&name2=value2
이런식으로 Url에 나타난다. info에서 요청 파라미터 name1이고 파라미터는 value1으로 요청을 보낸다.
길이에 제한이 있으며 이것은 보안에 중요한 데이터는 절대로 실어서 보내면 안된다.
POST, 서버에 데이터를 생성 및 수정할때 자주 쓰이는 method임. 게시판에 글을 작성한다거나 글을 수정한다거나 하면 얘를 자주 쓴다. 데이터는 body에 실어서 보내는 형식이다. GET과 달리 대용량으로 보낼수 있으며,데이터가 보낼때 노출이 되거나 그러지 않아서 안전하다는게 장점이다.
GET은 Idempotent POST는 Non-idempotent하게 설계가 됐다는 것이다.
우선 Idempotent는 한국어로 멱등이라는 건데, 수학이나 전산학에 나타나는 개념이고, 연산을 여러번 작용하더라도 결과가 바뀌지 않는 성질을 가지고 있는걸 말합니다.
GET같은 경우에는 서버에 동일한 요청을 여러번 보내도 동일한 결과가 나온다.
POST같은 경우에는 서버에 동일한 요청을 여러번 보낸다면 결과가 다를수 있다는 것을 의미한다.
게시글을 쓰면 서버에 게시글이 저장이 되고, 게시글을 삭제하면 해당 데이터가 없어지는 등 POST로 요청을 하게 되면 서버의 무언가는 변경되도록 사용됩니다. 이처럼 POST는 생성, 수정, 삭제에 사용할 수 있지만, 생성에는 POST, 수정은 PUT 또는 PATCH, 삭제는 DELETE가 더 용도에 맞는 메소드라고 할 수 있습니다.