개발 cs지식 스터디를 하며 내가 학습한 부분을 정리하는 공간입니다.
웹상에서 클라이언트와 서버 간에 요청/응답으로
데이터를 주고 받을 수 있는 프로토콜이다.
클라이언트가 HTTP 프로토콜을 통해 서버에게 요청을 보내면
서버는 요청에 맞는 응답을 클라이언트에게 전송한다.
이때 HTTP 메소드는 서버가 요청을 수행하기 위해
해야할 행동을 표시하는 용도로 사용한다.
이 HTTP 메소드 중에서 GET과 POST의 특징과 차이점을 알아보겠다.
GET은 서버로부터 정보를 조회하기 위해 설계된 메소드이다.
GET 요청을 전송할 때 필요한 데이터를 Body에 담지 않고, 쿼리스트링을 통해 전송한다.
요청하는 데이터가 HTTP Request Message
의 Header 부분에 url이 담겨서 전송된다.
URL의 끝에 ?
와 함께 이름과 값으로 쌍을 이루어 request를 보내게 되며
이러한 방식의 파라미터를 쿼리스트링
이라고 부른다.
(만약, 요청 파라미터가 여러 개이면 &
로 연결한다.)
쿼리스트링 : URL의 뒤에 입력 데이터를 함께 제공하는 가장 단순한 데이터 전달 방법
하지만 이런 방식은 url이라는 공간에 담겨가기 때문에
전송할 수 있는 데이터의 크기가 제한적이다.
또 보안이 필요한 데이터에 대해서는
그대로 url에 노출되므로 GET
방식은 적절하지 않다.
POST는 리소스를 생성/변경하기 위해 설계되었다.
POST방식의 request는 HTTP Request Message
의 Body 부분에
데이터가 담겨서 전송된다.
길이의 제한 없이 데이터를 전송할 수 있으므로
데이터의 크기가 GET 방식보다 크고 내용이 눈에 보이지 않아 보안면에서 POST가 낫다.
(하지만 보안적인 측면에서는 암호화를 하지 않는이상 고만고만하다.)
GET은 Idempotent / POST는 Non-idempotent하게 설계되어잇다.
Idempotent(멱등)은 수학이나 전산학에서 연산의 한 성질을 나타내는 것으로 => 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질
즉, 멱등이라는 것은 동일한 연산을 여러 번 수행하더라도 동일한 결과가 나타나야한다.
Get이 Idempotent하도록 설계되었다는 것은 서버에게 동일한 요청을
여러번 전송하더라도 동일한 응답이 돌아와야 한다는 것을 의미한다.
이에따라 GET은 주로 조회를 할 때에 사용해야한다.
예를들어, 브라우저에서 웹페이지를 보거나, 게시글을 읽는 등
조회하는 행위를 GET으로 요청한다.
POST는 Non-Idempotent이기 때문에 서버에게 동일한 요청을
여러번 전송해도 응답은 항상 다를수가 있다.
이처럼 POST는 서버의 상태나 데이터를 변경시킬때 사용된다.
게시글을 쓰고, 저장이 되고, 삭제하면 해당 데이터가 없어지는 등
POST로 요청하면 서버의 무언가는 변경되도록 사용된다.
서버에서 데이터를 가져와서 보여주는 용도일뿐 서버의 값이나 상태를 변경하지 않는다.
서버의 값이나 상태를 변경하기 위해 또는 추가하기 위해서 사용된다.