GET 방식은 서버로부터 정보를 조회하기 위해 설계된 메서드이다.
www.example-url.com/resources?name1=value1&name2=value2
GET은 요청을 전송할 때 필요한 데이터를 Body에 담지 않고, 쿼리스트링을 통해 전송한다.
URL의 끝에 ?와 함께 이름과 값으로 쌍을 이루는 요청 파라미터를 쿼리스트링이라 부른다.
GET방식은 간편하다는 장점이 있지만 어떤 데이터를 전송하는지 노출되므로 보안상으로 좋지 않다.
POST는 리소스를 생성/변경하기 위해 설계된 메서드이다.
www.example-url.com/resource
POST는 리소스를 생성/변경하기 위해 설계되었기 때문에 GET과 달리 전송해야될 데이터를 HTTP메세지 Body에 담아 전송한다. 이처럼 POST가 GET보다 보안적인 면에서 안전하다고 생각할 수 있지만, POST 요청도 크롬 개발자 도구와 같은 툴로 요청 내용을 확인할 수 있기 때문에 민감한 데이터의 경우 반드시 암호화해서 전송해야 한다.
- 목적: GET은 조회 용도, POST는 생성 용도로 주로 쓰인다.
- body유뮤: GET은 HTTP메세지에 body가 없고, POST는 있다.
- 멱등(idempotent): GET은 멱등이며, POST는 멱등이 아니다.
멱등이란 것은 동일한 연산을 여러 번 수행하더라도 동일한 결과가 나타나는 것이다.
즉, GET이 Idempotent하다는 것은 서버에게 동일한 요청을 여러 번 전송하더라도 동일한 응답이 돌아와야 한다는 것을 뜻하며, 이에 따라 GET을 주로 조회할 때 사용하는 것이다.
반대로 POST는 Non-Idempoten하기 때문에 서버에게 동일한 요청을 여러 번 전송해도 응답은 다를 수 있다. 이에 따라 POST는 서버의 상태나 데이터를 변경시킬 때 주로 사용한다.
GET과 POST는 이러한 차이들이 있기 때문에 목적에 따라 알맞게 사용해야 한다.
Ref.
https://www.w3schools.com/tags/ref_httpmethods.asp
자바 웹을 다루는 기술(저자: 이병승) p198~205