웹에 대한 공부를 하다보면 항상 눈에 보이는 친구들이 있다.
GET과 POST라는 녀석들이다.
오늘도 역시 강의를 듣다가 GET과 POST에 대한 이야기가 나와서
이해한 만큼만 작성해보려고 한다.
GET은 가져온다. POST는 수행한다.
가볍게 얘기하면 이런 느낌이라고 본다.
Get은 서버에서 어떠한 데이터를 가져와서 보여줄 때 사용하며,
Post는 서버상의 데이터 값이나 상태를 바꿀 때 사용한다.
예시를 들자면 Get은 게시글을 가져와 보여줄 때, Post는 게시글을 삭제하거나 수정할 때 사용한다.
다시 말해 Get은 클라이언트에서 서버로 어떠한 리소스로부터 정보를 요청하기 위해 사용되는 Method이다.
주로 검색하거나 읽을 때 사용되는 메서드라고 생각하면 되겠다.
Get은 요청을 전송할 떄 URL 주소 끝에 파라미터로 포함되어 전송이 된다.
이 부분을 QueryString(쿼리 스트링) 이라고 한다.
Post는 리소스를 생성 또는 업데이트 하기 위해 서버에 데이터를 보낼 때 사용된다.
Get과는 다르게 전송할 데이터를 HTTP메세지의 body에 담아 전송한다.
HTTP메세지의 body는 길이 제한 없이 데이터를 전송할 수 있다.
그래서 POST 요청은 GET과 달리 대용량 데이터를 전송할 수 있다.
위에서 언급하였듯이 여러 차이점이 있다.
데이터 길이 제한이라던지, 전달 방식이라던지 등등 차이점이 존재하는데
찾아보면서 눈에 띄는 단어가 계속 보였다.
Get과 Post는 많이 들어봤는데 이 단어는 처음 접한다..
의미는 아래와 같다.
idempotent는 멱등법칙(冪等法則) 또는 멱등성(冪等性)이란 뜻으로, 수학이나 전산학에서 연산의 한 성질을 나타내는 것으로, 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질을 의미한다.
출처 : 위키백과
간단하게 '연산을 여러 번 적용하더라도 경과가 달라지지 않는 성질' 이라고 생각하면 될듯하다.
이 얘기가 나온 이유는 Get과 Post가 이 '멱등성' 성질에서 차이가 나기 때문이다.
GET은 Idempotent하도록 설계되었고, POST는 Non-Idempotent하게 설계되었다.
이 말은 즉, GET으로 서버에게 동일한 요청을 여러 번 전송하더라도 동일한 응답이 돌아와야 한다는 것을 의미하며, 설계 원치에 따라 서버의 데이터나 상태를 변경시키지 않아야 하기 때문에 주로 조회할 때 사용한다.
반대로 POST는 서버에게 동일한 요청을 여러 번 전송해도 응답은 항상 다를 수 있다.
그래서 POST는 서버의 상태나 데이터를 변경시킬 때 사용된다.
끝.