본문 바로가기

Web

GET / POST 개념

http://www.letmecompile.com/get-post-%EB%B0%A9%EC%8B%9D-%EC%B0%A8%EC%9D%B4%EC%A0%90/ 참조



1. GET / POST 


GET, POST의 근본적인 특성 차이는 GET은 idempotent, POST는 non-idempotent 하다는 점이다.

멱등(idempotent)이라는 말이 좀 어려운데, 아래와 같이 풀어서 설명하면 좀 이해가 쉬울것이다.
멱등 연산(idempotent operation)은 수학 용어로 해당 연산을 해도 결과에 변화가 없다는 특성을 표현하는 말이다.
(예: 100 x 1 = 100 이므로, 곱셈에대해 1을 멱등원 이라고 부르며 이러한 1을곱하는 연산이 멱등 연산이다.)

이러한 뜻을 HTTP요청 메서드를 해석하는데 적용해보면,
GET은 해당 요청을 몇번을 수행해도 해당 요청에 대한 결과가 계속 동일하게 돌아오는 것을 의미하며,
POST는 해당 요청이 수행되면 서버에서 무언가 바뀌고, 동일한 결과가 돌아오는 것을 보장할 수 없다는 것을 의미한다.

이 말을 들어봤을 때 GET 방식은 똑같은 결과를 계속 보기를 원하는 페이지가 이에 해당한다. 북마크로 설정해두고 (조회성 게시판)

또 입력폼들을 채우기는 귀찮고 이를 북마크해놔서 다시 조회를 해서 동일한 결과를 받고 싶을 때 GET을 쓰는거지.

주문을 하는 기능의 웹페이지라면 GET방식을 써서는 안되겠지. 같은 주문이 여러번 들어갔다간 큰일남.

즉 GET을 이용하여 게시판에 글을 쓴다면(글을 쓴다는 동작은 서버에 데이터가 바뀌고 다른 결과가 돌아 올 수 있다는 것을 의미) 이것은 GET의 idempotent 특성을 무시하는 것이며 문제 발생의 여지가 있다.

GET 데이터 전송방식은 URL 뒤에 파라미터들이 붙기 때문에 즐겨찾기에 등록할 수 있지만, POST는 대부분 그렇지 못함.




그렇다면 진짜로 다른점은 무엇?

GET 요청은 브라우저에서 캐시를 할 수 있다.

글을 작성하는 요청인데 GET 방식으로 글내용과 제목을 받아서 서버로 전송한다면, 해당 GET 요청과 그에 대한 응답이 브라우저에 의해 캐쉬가 되었다가 다시 사용될 우려가 있다. 이 경우 캐쉬에의해 자동으로 동일한 글을 또 작성하는 동작이 서버에서 발생될 수 있는데 이것은 심각한 오류이다.

검색봇(크롤러)으로 인한 문제 발생

구글이나 네이버의 검색봇(bot 혹은 crawler)들이 웹페이지 수집을 위해 해당 웹서버에 GET 요청을 할 수 있다. 이때 이러한 봇의 요청에 의해 게시판에 엉뚱한 데이터로 글이 작성되어 올라간다던지, 서버쪽의 데이터가 바뀐다면 당황스러운 일들이 발생할 가능성이 크다.

이러한 문제들을 막으려면 결국 근본적인 특성차이를 잘 인지하고 꼭 상황에 맞게 사용해야 한다.