GET / POST 방식의 차이

Kyung yup Lee·2021년 6월 7일
4

네트워크

목록 보기
2/3

HTTP메서드를 사용해서 데이터를 주고 받는 방식을 흔히 REST api 를 이용한 데이터 교환 방식이라고 말한다. 현대 네트워크 시장에서 가장 많은 포션을 차지하고 있는 방식이기 때문에 해당 방식을 잘 알고 있어야 한다.

REST 란?

REST 는 Representational State Transfer 의 줄임말이다. 해석하면 "표현을 통한 상태 전달" 정도로 볼 수 있다. REST를 잘 설명할 수 있는 해석은 "표현(자원, 결과의 표현방식)에 따른 상태의 전달" 이 더 정확할 것 같다.

HTTP URI(Uniform Resource Identifier)를 통해 자원을 명시(자원) 하고, HTTP Method(POST, GET, PUT, DELETE)를 통해 해당 자원에 대한 CRUD Operation(상태의 전달) 을 적용하는 것을 의미한다. request 가 완료되면 서버는 특정 representation(표현방식) 예를 들어, json, xml 등을 통해 response를 보내준다.
https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html

api란?

api 는 application programming interface 의 줄임말이다. 즉 응용프로그램에서 사용할 수 있게 운영체제에서 제공하는 인터페이스를 뜻한다. 운영체제라고 하면 뭔가 거창한 개념이 되는 것 같아, 조금 더 가볍게 여길 수 있게 설명하자면, 그냥 내가 만든 코드를 다른 프로그램에서 사용할 수 있게 만들어놓은 손잡이 같은 개념이다.

https://apis.map.kakao.com/web/guide/
위 웹사이트를 보면 카카오맵 api라는 웹사이트이다. 카카오가 만들어놓은 맵 프로그램을 다른 응용프로그램에서 사용할 수 있도록 끈을 던져준 것이다. 프로그래머는 이 api를 이용해서 내 응용프로그램에 카카오맵을 구현할 수 있다.

REST api란 이 api가 REST 한 형식을 따르고 있는 것을 말한다. 즉 HTTP URI 를 통해 자원을 명시하고, HTTP 메서드를 이용해서 자원 데이터를 교환하는 형식을 따르는 api를 REST api라고 부른다.

HTTP 메서드

위에서 REST api 방식은 HTTP 메서드를 통해 자원을 교환한다고 기술했다. HTTP 메서드에는 GET, POST, PUT, DELETE 네 가지 방식이 있는데, 각 메서드의 특성을 잘 알고 구분해서 사용하는 것이 좋다. 그렇지 않으면 내가 원했던 프로그램 방식과 다른 결과를 낳을 수 있다. HTTP는 유연한 프로토콜이기 때문에, 한 가지 메서드가 한 가지 방식으로만 동작하지는 않는다. 예를 들어서 POST 방식은 데이터를 넣을 때 사용하는 메서드이지만 해당 방식으로 데이터를 조회하는 데에 사용할 수도 있다.

GET / POST

GET 메서드는 기본적으로 서버에서 데이터를 받아오기 위해서 사용되는 메서드이다. 데이터베이스의 SELECT 쿼리문과 같은 역할을 한다고 생각하면 된다. POST 메서드는 서버에서 데이터를 수정하거나 새로 추가할 때 사용하는 메서드이다.

둘의 가장 큰 차이점 중 하나가 데이터를 전송하는 방식이다. GET 과 POST 메서드 모두 데이터를 서버로 보내야 한다. POST의 경우는 서버의 데이터를 변경하게 되기 때문에 당연히 바꿀 데이터를 보내주어야 하지만, GET의 경우에는?
GET 메서드 또한 내가 받아올 자원을 명확히 지정해주어야 하기 때문에, 자원의 경로를 지정해주는 데이터를 보내주어야 한다. 이 방식에서 둘의 차이가 있는데, GET 방식은 query 문에 데이터를 넣어서 URL에 직접적으로 데이터가 포함되게 된다.

www.example.com?id=mommoo&pass=1234

위 처럼 URL이 작성되게 되고, 이 쿼리문이 헤더에 포함되어 서버로 전송된다.
반면 POST는 body 내부에 이 데이터를 넣어서 보낸다. body 내부에 해당 데이터를 넣어서 보내기 때문에 겉으로는 어떤 데이터가 전송되었는지 보이지는 않는다.

장단점

POST는 보안적으로 우수하다?

POST가 겉으로 데이터가 노출되지 않는 특성 때문에, POST가 GET보다는 보안적으로 우수하다고 말하는데, 사실 상 의미는 없다. url에 노출되지 않기 때문에 직접적으로 와닿지 않는 것 뿐이지, 컴퓨터를 조금만 다룰 수 있다면 보안적으로 큰 의미가 없다. 때문에, POST를 보안적으로 우수하다는 이유로 원리에 맞지 않게 사용하는 일은 지양해야 한다고 생각한다.

하지만 회사 입장에서(개발자 외의 사람이) 중요한 데이터가 url에 고스란히 노출되는 게 눈에 보이면 당연히 기분이 안 좋을 것이다. 개발자가 이건 실질적으로 보안 상 의미가 없습니다! 라고 주장해도 의미가 없다. 때문에 데이터를 조회하는 request라 해도 파라미터로 중요한 데이터(개인정보)가 넘어가야 한다면 POST 방식을 사용하는 것이 최소한의 개념도 잃은 개발자로 비춰지지 않는 방식이다. REST 원칙을 지키는 것이 우리의 밥줄을 지키는 것보다 중요하지는 않을 것이다.

GET은 POST보다 빠르다.

브라우저는 GET으로 받아온 데이터를 캐싱한다. GET은 URL에 내가 받아올 데이터를 명확하게 적어주기 때문에, 정확한 캐싱이 가능해, GET 방식만 캐싱을 한다. 때문에 다른 HTTP 메서드에 비해 더 빠르게 작동할 수 있다.

GET은 URL 공유가 편리하다.

GET 방식은 URL에 모든 자원 경로를 담아서 전송하기 때문에, 다른 사람에게 url 공유 만으로도 해당 자원을 공유할 수 있다. 반면 POST 방식은 바디 부분에 데이터를 넣어서 서버에 전송해야 하기 때문에 url 공유 만으로는 원하는 자원을 공유할 수 없다.

POST는 GET보다 많은 양의 데이터를 담을 수 있다?

GET 방식은 url 길이의 제한이 있기 때문에 데이터 제한이 있다고 알려져 있다. 하지만 이건 옛날 브라우저에서 제한하고 있던 사항이고 지금은 대다수 버전의 브라우저에 해당 사항이 없다.
익스플로러만 url 길이 제한이 4000자가 있다고 한다.
https://uiandwe.tistory.com/1133

profile
성장하는 개발자

0개의 댓글