[TIL] GET과 POST의 차이를 알고있는가?

woonie·2022년 4월 1일
0

이전 글에서 HTTP method 관련해서 공부를 했었다.
항해에서 총4번의 팀프로젝트를 하였고 모두 API명세서를 작성했었다.
당시에 REST API가 무엇인지도 모르고 단순히 팀원들의 편의를 위해서만 작성했었다...

항해가 얼추 마무리되어 가는 지금 최대한 RESTful하게 작성해야 한다는 것을 인지했고..
우리 팀원들은 RESTful한게 무엇인지 각자 공부하여 토론? 회의를 하기로 했다.

그 과정에서 HTTP method관련해서 공부를 했고 그 과정에서 문득 GET이랑 POST는 언제 사용하지? 라는 생각이 들었고 정확하게 어디가 어떻게 다른지 궁금했다.

예로 실제 우리가 진행했던 프로젝트중에 로그인 유지 기능을 구현할때 어떤 프로젝트에서는 GET방식으로 하였고 또 다른 프로젝트에서는 POST방식으로 구현을 했었다.

해당 글을 작성하면서 어떻게 다른지 생각을 다시하고 정리할 수 있었다.

GET

GET method는 클라이언트에서 서버로 어떠한 리소스로 부터 정보를 요청하기 위해 사용되는 method.

조금 더 풀어서 얘기하자면 데이터를 읽거나, 검색할 때에 사용되는 method라고 한다.
GET은 요청을 전송할 때 URL 주소 끝에 파라미터로 포함되어 전송되며 GET 요청은 오로지 데이터를 읽을때만 사용되고 수정할 때는 사용하지 않는다.
(데이터 변형의 위험 없이 사용할 수 있다)

  • GET은 불필요한 요청을 제한하기 위해 요청이 캐시될 수 있다.
  • 파라미터에 내용이 노출되기 때문에 민감한 데이터를 다룰 때 GET 요청을 사용해서는 안된다.
  • GET 요청은 브라우저 기록에 남는다.
  • GET 요청을 북마크에 추가할 수 있다.
  • GET 요청에는 데이터 길이에 대한 제한이 있다.
  • Get 요청은 성공시, 200(Ok) HTTP 응답 코드를 XML, JSON뿐만 아니라 여러 데이터(html, txt등..), 여러 형식의 데이터와 함께 반환한다.
  • GET 요청은 *idempotent한다.

POST

POSTmethod는 리소스를 생성/업데이트하기 위해 서버에 데이터를 보내는 데 사용된다.

GET과 달리 전송해야될 데이터를 HTTP 메세지의 Body에 담아서 전송한다.

HTTP 메세지의 Body는 길이의 제한없이 데이터를 전송할 수 있다. 그래서 POST 요청은 GET과 달리 대용량 데이터를 전송할 수 있는 이유도 이 때문이다.

POST는 데이터가 Body로 전송되고, 내용이 눈에 보이지 않아 GET보다 보안적인 면에서 안전하다고 생각할 수 있지만, POST 요청도 개발자 도구, Fiddler와 같은 툴로 요청 내용을 확인할 수 있기 때문에 민감한 데이터의 경우에는 반드시 암호화해 전송해야 한다.

  • POST 요청은 캐시되지 않는다.
  • POST 요청은 브라우저 기록에 남지 않는다.
  • POST 요청을 북마크에 추가할 수 없다.
  • POST 요청에는 데이터 길이에 대한 제한이 없다.
  • Post 요청 중 자원 생성은 201(Created) HTTP 응답 코드를 반환한다.
  • Post 요청은 *idempotent하지 않는다.

idempotent

idempotent는 멱등법칙(冪等法則) 또는 멱등성(冪等性)이란 뜻으로, 수학이나 전산학에서 연산의 한 성질을 나타내는 것으로, 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질을 의미한다. (출처 : 위키백과)

중요한건 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질이다.
즉, 멱등이란 단어는 동일한 연산을 여러 번 수행하더라도 동일한 결과가 나와야 한다는 뜻 이다.

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

여기서 GET이 Idempotent하도록 설계되었다는 것은 GET으로 서버에게 동일한 요청을 여러 번 전송하더라도 동일한 응답이 돌아와야 한다는 것을 의미한다. 이에 따라 GET은 설계원칙에 따라 서버의 데이터나 상태를 변경시키지 않아야 Idempotent하기 때문에 주로 조회를 할 때에 사용해야한다.

예를 들어, 브라우저에서 웹페이지를 열어보거나 게시글을 읽는 등 조회를 하는 행위는 GET으로 요청하게 된다.

반대로 POST는 Non-idempotent하기 때문에 서버에게 동일한 요청을 여러 번 전송해도 응답은 항상 다를 수 있다.
이에 따라 POST는 서버의 상태나 데이터를 변경시킬 때 사용된다.

profile
동료들과 함께하는 개발의 중요성에 관심이 많습니다. 언제나 호기심을 갖고 꾸준히 노력하는 개발자로서 성장하고 있습니다.

0개의 댓글