GET과 POST

태인
Written by 태인 on

HTTP 메소드

http 메소드의 종류에 대해 다시 한 번 알아봅시다.

  • POST - POST를 통해 해당 URI를 요청하면 리소스를 생성한다.
  • GET - GET를 통해 해당 리소스를 조회합니다. 리소스를 조회하고 해당 도큐먼트에 대한 자세한 정보를 가져온다.
  • PUT - PUT를 통해 해당 리소스를 수정합니다.
  • DELETE - DELETE를 통해 리소스를 삭제합니다. 이처럼 HTTP 메소드는 서버가 요청을 수행하기 위해 해야할 행동을 표시하는 용도로 사용합니다. 이 중 GET과 POST의 특징과 차이점을 알아보겠습니다. —

GET

GET은 서버로부터 데이터를 조회하기 위한 메소드입니다. GET은 요청을 전송할 때 필요한 데이터를 쿼리스트링(URL의 끝에 ?와 함께 이름과 값으로 구성된 파라미터)을 통해 전송합니다. 만약, 요청 파라미터가 여러 개이면 &로 연결합니다.

예를 들어 아래와 같은 url에서는 name과 age 파라미터가 있고, 각각 smith와 20이 값으로 담겨 서버에 요청을 보내게 된다.

example.com/users?name=smith&age=20

GET은 요청을 캐시할 수 있습니다. js, css, 이미지 같은 정적 컨텐츠는 데이터 크지만, 변경될 일이 많지 않기 때문에 불필요한 요청이 반복되게 됩니다. 정적 컨텐츠를 요청하고 나면 브라우저에서는 요청을 캐시해두고, 동일한 요청이 발생할 때 서버로 요청을 보내지 않고 캐시된 데이터를 사용합니다.


POST

POST는 리소스를 생성/변경하기 위한 메소드입니다. 그래서 GET과 달리 전송할 데이터를 Body에 담아서 전송합니다. Body의 길이 제한은 없습니다. 그래서 POST 요청은 GET과 달리 대용량 데이터를 전송할 수 있습니다. 이처럼 POST는 데이터가 Body로 전송되고 내용이 눈에 보이지 않지만, 완전히 볼 수 없는 것은 아니므로 민감한 데이터의 경우에는 반드시 암호화해 전송해야 합니다.

그리고 POST로 요청을 보낼 때는 요청 헤더의 Content-Type에 요청 데이터의 타입을 표시해야 합니다. 데이터 타입을 표시하지 않으면 서버는 내용이나 확장자 등으로 데이터 타입을 유추합니다. 만약, 알 수 없는 경우에는 application/octet-stream로 요청을 처리합니다.


차이점

그렇다면 GET과 POST의 차이점은 무엇일까요?

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

반대로 POST는 서버에게 동일한 요청을 여러 번 전송해도 응답은 항상 다를 수 있습니다. 이에 따라 POST는 서버의 상태나 데이터를 변경시킬 때 사용됩니다. 예를 들어 게시글을 작성하거나 삭제하는 기능을 구현할 때에는 POST로 요청하게 됩니다. 이처럼 POST는 생성, 수정, 삭제에 사용할 수 있지만, 생성에는 POST, 수정은 PUT 또는 PATCH, 삭제는 DELETE가 더 용도에 맞는 메소드라고 할 수 있습니다.

태인

태인

댓글

comments powered by Disqus