본문 바로가기
Development/Android

[HTTP] GET / POST 방식 차이

by 메정 2020. 3. 9.

**이해가 잘 되는 블로그의 글을 포스팅해왔습니다. 나중에도 보기 위해 간략하게 정리해둔 글이니 원본이 궁금할 경우, 맨 밑 출처로 가서 보면 됩니다.

HTTP :

웹상에서 클라이언트 - 서버 간의 요청/응답으로 데이터를 주고 받을 수 있는 통신 프로토콜.

클라이언트 -(http프로토콜이용)-> 서버에게 요청. 서버 -(http프로토콜이용)-> 클라이언트에게 응답.

프로토콜로 사용되는 메소드 : get/post

1. GET :

GET은 서버로부터 정보를 조회하기 위해 설계된 메소드.

요청을 전송할 때 필요한 데이터를 Body에 담지않고, 쿼리스트링을 통해 전송! 
**쿼리스트링 : 
URL의 끝에 ?와 함께 이름과 값으로 쌍을 이루는 요청 파라미터

ex) www.example-url.com/resources?name1=value1&name2=value2 일 때,
파라미터명은 name1, name2. 각각의 파라미터는 value1, value2라는 값으로 서버에 요청을 보냄.

2. POST:

POST는 리소스를 생성/변경하기 위해 설계된 메소드.

전송해야될 데이터를 Http메세지의 Body에 담아서 전송! 

       

GET과 POST의 차이

- 전송 가능한 데이터 양이 차이남. (GET < POST)

- 사용하는 용도가 틀림. GET은 조회, POST는 생성으로 사용

- 웹페이지 조회 시 URL을 통해 해당 홈페이지에 관련된 정보가 필요한데, POST는 요청 데이터가 Body에 담겨있기 때문에 링크 정보를 가져올 수 없음. 반면, GET은 URL에 요청 파라미터를 가지고 있기 때문에 더 디테일하게 페이지를 링크 정보를 가져올 수 있음.

GET은 Idempotent, POST는 Non-idempotent하게 설계되었습니다.

Idempotent(멱등)은 수학적 개념으로 다음과 같이 나타낼 수 있습니다. 수학이나 전산학에서 연산의 한 성질을 나타내는 것으로, 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질

즉, 멱등이라는 것은 동일한 연산을 여러 번 수행하더라도 동일한 결과가 나타나야 합니다.

여기서 GET이 Idempotent하도록 설계되었다는 것은 GET으로 서버에게 동일한 요청을 여러 번 전송하더라도 동일한 응답이 돌아와야 한다는 것을 의미합니다. 이에 따라 GET은 설계원칙에 따라 서버의 데이터나 상태를 변경시키지 않아야 Idempotent하기 때문에 주로 조회를 할 때에 사용해야합니다. 예를 들어, 브라우저에서 웹페이지를 열어보거나 게시글을 읽는 등 조회를 하는 행위는 GET으로 요청하게 됩니다.

반대로 POST는 Non-idempotent하기 때문에 서버에게 동일한 요청을 여러 번 전송해도 응답은 항상 다를 수 있습니다. 이에 따라 POST는 서버의 상태나 데이터를 변경시킬 때 사용됩니다. 게시글을 쓰면 서버에 게시글이 저장이 되고, 게시글을 삭제하면 해당 데이터가 없어지는 등 POST로 요청을 하게 되면 서버의 무언가는 변경되도록 사용됩니다. 이처럼 POST는 생성, 수정, 삭제에 사용할 수 있지만, 생성에는 POST, 수정은 PUT 또는 PATCH, 삭제는 DELETE가 더 용도에 맞는 메소드라고 할 수 있습니다.


댓글