Get은 가져온다는 개념이고, Post는 수행한다는 개념
즉, Get은 서버에서 어떤 데이터를 가져와서 보여줄 때 사용, 어떤 값이나 내용, 상태 등을 바꾸지 않는 경우에 사용을 하는 것
Post는 서버상의 데이터 값이나 상태를 바꾸기 위해서 사용
게시판으로 예를 들자면, 글의 내용에 대한 목록을 보여주는 경우나, 글의 내용을 보는 경우는 Get에 해당합니다.
그리고 글의 내용을 저장하고, 수정할 때에 Post를 사용하는 것이죠.
🤔 그래서 차이가 뭐라고?
너무 신나서 떠들었더니 서론이 너무 길었네요. 본론으로 넘어가서 먼저, 이 둘의 차이점보다는 이 둘에 더 정확히 아는 게 더 좋을 듯합니다. Post와 Get, 각각의 특징과 역할들을 봐보도록 하죠.
👉 Get
GET method는 클라이언트에서 서버로 어떠한 리소스로부터 정보를 요청하기 위해 사용되는 메서드입니다.
좀 더 쉽게 말하자면, 데이터를 읽거나(Read), 검색(Retrieve)할 때에 사용되는 method라고 할 수 있겠네요.
GET은 요청을 전송할 때 URL 주소 끝에 파라미터로 포함되어 전송되며, 이 부분을 쿼리 스트링(QueryString)이라고 부릅니다.
e.g.) www.example-url.com/resources?name1=송유현&name2=곽철용
위 예는 앞서 말한 쿼리스트링을 포함한 URL입니다. 파라미터인 name1과 name2를 통해 값을 전달받을 수 있습니다.
만약, 요청 파라미터가 여러 개이면 &로 연결합니다.
위 예는 앞서 말한 쿼리스트링을 포함한 URL입니다. 파라미터인 name1과 name2를 통해 값을 전달받을 수 있습니다.
만약, 요청 파라미터가 여러 개이면 &로 연결합니다.
👉 Post
POSTmethod는 리소스를 생성/업데이트하기 위해 서버에 데이터를 보내는 데 사용됩니다.
Get과 Post의 리소스 전달 방식의 차이를 표현한 사진
👌 여기서 잠깐!! idempotent란?
아까부터 idempotent란 단어가 자꾸 보이는데, 대체 이 단어가 뭐길래 이렇게 쓰는지 한 번 알아나 봅시다.
idempotent는 멱등법칙(冪等法則) 또는 멱등성(冪等性)이란 뜻으로, 수학이나 전산학에서 연산의 한 성질을 나타내는 것으로, 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질을 의미한다.
출처 : 위키백과
너무 어렵게 보지 않으셔도 됩니다. 우리가 집중해야 할 부분은 딱 한 줄이기 때문입니다.
👉 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질 👈
즉, 멱등이라는 것은 동일한 연산을 여러 번 수행하더라도 동일한 결과가 나타나야 합니다.
GET은 Idempotent, POST는 Non-idempotent 하게 설계되었습니다.
여기서 GET이 Idempotent 하도록 설계되었다는 것은 GET으로 서버에게 동일한 요청을 여러 번 전송하더라도 동일한 응답이 돌아와야 한다는 것을 의미합니다. 이에 따라 GET은 설계 원칙에 따라 서버의 데이터나 상태를 변경시키지 않아야 Idempotent 하기 때문에 주로 조회를 할 때에 사용해야 합니다. 예를 들어, 브라우저에서 웹페이지를 열어보거나 게시글을 읽는 등 조회를 하는 행위는 GET으로 요청하게 됩니다.
반대로 POST는 Non-idempotent 하기 때문에 서버에게 동일한 요청을 여러 번 전송해도 응답은 항상 다를 수 있습니다.
이에 따라 POST는 서버의 상태나 데이터를 변경시킬 때 사용됩니다. 게시글을 쓰면 서버에 게시글이 저장이 되고, 게시글을 삭제하면 해당 데이터가 없어지는 등 POST로 요청을 하게 되면 서버의 무언가는 변경되도록 사용됩니다.
이처럼 POST는 생성, 수정, 삭제에 사용할 수 있지만, 생성에는 POST, 수정은 PUT 또는 PATCH, 삭제는 DELETE 가 더 용도에 맞는 메서드라고 할 수 있습니다.