봉봉의 개인 블로그

get 과 post 의 차이점 본문

관련 지식

get 과 post 의 차이점

봉봉이네 2017. 4. 6. 00:11

Get방식과 Post 방식은 HTTP 프로토콜을 이용해서 서버에 요청을 할 때 사용하는 방식입니다.

이 두가지 방식에는 어떤 차이가 있느냐? 



1. URL 노출



Get은 전송 요청 URL에 파라미터에 정보를 담아서 서버로 보냅니다. 로그인으로 예를 든다면, 내가 입력 폼에서 ID와 Password를 입력했고, 로그인 버튼을 누름으로써 서버에 이 정보를 보내는데, 이때 만약 Get방식을 사용한다면 요청을 보내는 URL 주소 뒤에 파라미터 값이 노출되어 전송됩니다. 위 사진에서처럼 16진수로 값이 전송되는 것을 볼 수 있습니다.


하지만 Post 방식은 다릅니다. URL에 노출되지 않고 Http body 안에 포함되어 전달됩니다. 
-> 이 가시적인 부분때문에 Get이 Post보다 보안 측면에서는 더 낫다고 하지만, 전달되는 패킷을 잡아보면 Post 방식도 Plain Text로 값을 갖고있기 때문에 보안 측면에서 그렇게 큰 영향을 미치진 않습니다. 




2. 전달할 수 있는 데이터의 양


Get방식은 쿼리스트링(Query String)의 글자 수에 제약이 있습니다. 아무래도 URL에 파라미터가 붙어서 전달되기 때문에 글자 수에 제약이 있겠지요. 하지만 Post는 많은 양의 데이터를 보낼 수 있습니다. (하지만 Post도 무한대의 용량은 아닐 것 입니다.)



http://url/mmlist.html?id=21&pagenum=3 이렇게 보내는 형식이 Get 방식


- form을 이용해서 submit하는 형태가 Post 방식



하지만 애매한 양의 데이터를 보낼 때, Get 방식과 Post 방식 중 아무거나 써도 되는 것은 아닙니다. 전달할 수 있는 데이터의 양도 분명 중요하겠지만, 근본적인 차이는 다음과 같기 때문입니다.




3. 멱등(idempotent)


Get 방식은 idempotent, Post 방식은 non-idempotent 하다는 것이 근본적인 차이점입니다.

사실 이부분에 대해서 내부적으로 정확히 어떻게 다르게 요청이 동작하는지 알고싶었으나 아무리 찾아봐도 이런 차이점이 있다~정도로만 알 수 있었기 때문에 이런 차이점이 있다 정도, 그리고 Get과 Post는 명확하게 구분해서 사용해야한다 정도로만 알고있으면 되지 않을까 싶네용.


멱등이란, 수학 용어로 해당 연산을 해도 결과에 변화가 없다는 특성을 표현하는 말입니다. 예를 들어, 100 x 1 = 100 이므로, 곱셈에 대해 1을 멱등원이라고 부르며 이러한 1을 곱하는 연산이 멱등 연산입니다. 


따라서 Get 방식은 해당 요청을 몇 번을 수행해도 해당 요청에 대한 결과가 계속 동일하게 돌아오는 것을 의미합니다.

하지만 Post 방식은 해당 요청이 수행되면 서버에서 무언가 바뀌고, 동일한 결과가 돌아오는 것을 보장할 수 없다는 것을 의미합니다.


왜냐하면 Post 방식은 body 안에 요청정보가 숨겨져서 보내지기 때문에 전송 중에 데이터가 유실되면 유실된 데이터를 중간에 다시 찾을 수가 없기 때문입니다. 하지만 Get 방식은 보내는 요청 URL에 정보가 다 포함되어있기 때문에 유실되더라도 다시 URL에서 정보를 찾아서 재요청 할 수 있습니다. 



출처: http://mititch.tistory.com/39 [미티치]

Comments