Network

[네트워크]GET 방식과 POST 방식 이란? 차이점

히진 2018. 10. 20. 22:24
반응형

HTTP


GET방식과 POST방식에 대해 알아보기 위해서는 HTTP 프로토콜에 대해 알고 있어야 합니다.

HTTP(Hypertext Transfer Protocol)란 하이퍼텍스트 전송 규약으로 Web-Client와 Web-Server간 데이터를 전송하는 프로토콜입니다. GET/POST를 알려고 하는데 왜 HTTP 프로토콜을 알아야 할까요? 

GET 메소드와 POST 메소드는 HTTP 프로토콜에서 데이터 전송을 위해 지원하는 7가지 메소드 중 일부이기 때문입니다.


HTTP통신할때 보내는 데이터는 HTTP 패킷이라 하는데 해당 패킷의 구조는 크게 Header 영역과 Body영역으로 나누어 집니다.Header에는 크게 여러가지 정보와 어떠한 방식의 메소드를 사용 하였는지에 대해 적게 됩니다.

또한 어떠한 메소드 방식을 사용하였는지에 따라 Body 영역의 사용 유무 및 사용 방법이 달라지게 됩니다. 


GET방식


GET방식의 특징으로는 대표적으로 URL에 Parameter를 붙여서 전송한다는 것입니다.


ex) http://khj93.tistory.com/test_api?param1=value1&param2=value2


URL뒤에  ?  를 사용하여 Parameter를 작성하게 되고  &  을 붙여 여러개의 Parameter를 구분하게 됩니다.
이런식으로 GET방식은 데이터를 전송하게 되며 URL에 Parameter를 전송하기 때문에 body영역을 사용하지 않는다.
또한 URL에 데이터를 실어 보내기 때문에 대용량 데이터 전송을 하기에 제한 사항이 있다.
한번 요청시 URL포함 255자 까지 전송이 가능하며 HTTP/1.1 에서는 2048자 까지 가능합니다.


POST방식


POST 방식의 특징으로는 대표적으로 GET 방식과는 달리 body영역에 데이터를 실어 보낸다는 점입니다. Body에 데이터를 실어 보내기 때문에 데이터 전송양에 길이 제한이 없으며 대용량 데이터를 보내는데 적합합니다.


또한 POST로 데이터를 전송할때에는 Body영역 데이터 타입을 Header Content-Type에 명시를 해줘야 합니다. POST방식은 GET방식과는 달리 보내는 데이터를 URL를 통해 볼 수 없어 보안적으로 안전하다곤 하지만 다른 툴을 사용하여 POST영역의 데이터를 확인이 가능하기 때문에 안심해서는 안됩니다.


ex)

HEADER 영역  

Content-Type:application/json; charset=UTF-8

.....


BODY 영역

{ "param1":"value1", "param2":"value2" }



GET 방식과 POST방식의 차이


위에서는 GET방식과 POST방식의 특징을 알아보았습니다. 그럼 이 두가지 메소드는 무엇이 다르며 어떨때 어떤 방식을 써야 할까요?


GET방식과 POST방식은 각각 idempotent / non-idempotent 하도록 설계 되었다고 합니다.

idemptent란 멱등성으로서 수학적으로 연산을 여러번 적용하더라도 결과 값이 바뀌지 않는다는 성질입니다.


그렇다면 GET 방식은 idempotent, POST 방식은 non-idempotent 감이 오셨나요? 


네 맞습니다. GET메소드를 사용해서는 여러번 적용하더라도 결과 값이 바뀌지 않는것을 개발하고 POST 메소드를 사용해서는 결과값이 바뀌는 유형의 개발이 적합하단 것입니다. 


여러 블로그에서는 GET방식은 가져오다란 뜻이다, Select 용도의 개발을 해야한다는 정의가 많습니다. Databases에서의 Select는 데이터를 변경하지 않고 가져오기때문에 idempotent 성질을 가지고 있기 때문입니다.


또한 GET방식은 URL 기반의 parameter을 기반으로 하기 때문에 데이터 변경등의 기능을 개발하게 되었을때 크롤링 봇등 예기치 못한 접근으로 인해 문제가 발생 할 여지가 있습니다.


마지막으로 GET방식은 POST방식보다 빠르다고 합니다. 왜일까요? 

바로 GET방식은 캐싱이 가능하고 POST방식은 캐싱이 불가능하기 때문입니다.

캐싱으로 인해 한 번 접근했던 정보에대해 다시 접근할때 빠르게 가져올 수 있기 때문에 POST방식 보다는 빠르다고 합니다.


GET방식 / POST방식의 특징 및 차이점에 알아 보았으며 기능 개발을 할때 해당 메소드를 잘 선택하여 개발을 할 필요가 있다고 생각합니다.






반응형