2020. 4. 18. 12:44ㆍ인프라/네트워크
GET과 POST는 HTTP 메소드 중 웹 개발에 주로 사용하는 메소드로
각각의 특징과 차이를 기술한다.
서버? 클라이언트?
GET과 POST 메소드를 알기전에 서버와 클라이언트의 개념을 잡아둬야 할 것이다.

우리가 보통 URL을 통해 웹 페이지를 띄우는 행위는 서버에 웹 페이지를 요청하는 것이고
웹페이지가 잘 나타난다면 서버가 그에 맞는 응답을 해준 것이다.
네트워크를 통해서 클라이언트는 서버에게 요청을 하고
서버는 클라이언트에게 요청에 대한 응답을 한다.
즉, 서버와 클라이언트는 일정한 매체로 정해진게 아닌 요청과 응답의 관계성의 개념이라고 볼 수 있다.
GET과 POST
GET과 POST는 모두 서버에 요청 , 즉 서버로 자신이 가지고 있는 데이터를 전달 하기 위해 사용하는 메소드이다.
기능적으로 데이터를 전달 한다는 측면은 똑같기 때문에 매우 유사하다고 할 수 있지만 서로 다르다는 것을 차이점에 기반하여 설명할 것이다.
- 데이터 전송 방식
GET과 POST을 가장 쉽게 구분하는 방법은 아마 URL을 보는것일 것이다. 아래의 URL 예제를 보도록 하자
www.abc.com?id=hello&password=1111 |
GET방식은 전달할 데이터를 쿼리스트링을 통해 전송하게 된다. URL의 뒤를 보면 ?와 함께 id는 hello다라는 쌍을 이루는 파라미터가 바로 쿼리스트링이다. 즉 GET 방식은 URL에 데이터를 실어 나르는 형식이된다.
URL에 합쳐서 보내는 GET방식에는 전달할 수 있는 데이터 양에 단점이있다. (주소값 + 파라미터가 255자로 제한된다)
또한 위의 예제와 같이 id, password가 URL에 직접 노출 되기도 한다.
POST방식은 헤더를 통해 요청하는 방식으로, BODY에 데이터를 넣어 요청하는 방식이다.
그렇기 때문에 GET 방식에 비해 조금 더 보안적으로 유리하며, 전송하는 데이터의 양도 제한이 없는 측면에서 유리하다.
자 그러면 GET 방식을 쓰지 않고 POST 방식만 사용하면 되지 않을까? 그렇지 않다.
둘은 엄연히 다른 개념의 메소드이다.
- 언제 사용해야 할까?
GET은 서버로부터 정보를 조회하기 위해 설계된 메소드로 데이터를 가져와서 보기 위해 사용한다고 볼 수 있다.
말그대로 보기 위함이기 때문에 서버의 데이터의 내용이나 상태를 변화 시키지 않는다. (서버에게 동일한 요청을 여러 번 전송하더라도 동일한 응답이 돌아와야 한다)
반대로 POST는 데이터를 생성/변경하기 위해 설계된 메소드로 서버의 데이터에 수정이나 삭제등의 변경을 요청하고 싶을때 사용한다. (서버에게 동일한 요청을 여러 번 전송해도 응답은 항상 다를 수 있다)
Google 'Accelerator' 사건은 위의 두 메소드의 개념을 인지하지 못하여 일어난 대표적인 사건이다.
간단히 설명하자면 'Accelerator'는 해당 페이지에 있는 URL의 내용을 미리 가져오는 것으로 웹페이지의 전환을 빠르게 해주기 위해 개발되었는데 사이트 개발자들이 GET/POST의 개념적 인식없이 사용한 탓에 데이터가 삭제되는 등의 문제가 발생한 것이다. 그렇기에 우리는 GET과 POST는 설계원칙에 따라 적절한 용도로 사용해야 할 것이다.
추가
GET과 POST에 대한 조금의 설명을 추가한다.
- GET은 POST보다 보안적으로 취약하다..?
맞다. 하지만 둘다 취약하다고 하는것이 맞는 표현이다. URL을 통해 가시적으로 볼 수 있어 좀 더 취약한 것일뿐 클라이언트 측에서 두방식 모두 데이터를 확인할 수 있다. 결국 보안을 위해서 암호화 과정을 거쳐야 하기 때문에 굳이 비교할 필요는 없다고 볼 수도 있다.