GET과 POST는 각각 언제쓰일까?

HYOIN AN·2022년 4월 21일
1

WEB

목록 보기
2/2

GET방식과 POST방식의 차이는 뭘까? 사실 개발을 할 때는 GET은 데이터를 받아올때 사용하고 POST는 작성이나 수정을 요청할때 사용하자. 라는 약속(?)이 되어있어 자세하게는 모르는 것 같아 확실히 개념을 잡고 사용해보려 글을 작성한다.

GET VS POST (게시판 예시)

GET은 서버에서 어떤 데이터를 가져와서 보여줄때 사용한다. 어떤 값이나 내용, 상태등을 바꾸지 않는 경우에 사용하는 것이다.
POST는 서버로 데이터 값이나 상태를 추가하거나 수정, 값을 저장할 때 사용한다.

게시판에서 글의 내용에 대한 목록을 보여주는 경우나, 글의 내용을 보는 경우에는 GET에 해당하고, 글의 내용을 저장하고, 수정할 때는 POST를 사용한다는 것이다.

그럼 둘다 서버에 요청이 가능한데 왜 각각의 상황에 맞게 사용해야 하는걸까?

실제로 오래된 쇼핑몰이나 홈페이지에 들어가보면 GET과 POST를 용도구분없이 혼용해서 사용한 흔적을 볼 수 있다고 한다. 그러면 혼용했다는 사실을 어떻게 알 수 있었을까?

GET method의 동작

GET은 요청을 전송할 때 URL 주소 끝에 파라미터로 포함되어 전송되며, 이 부분을 쿼리 스트링(QueryString) 이라고 부른다.
example => www.example.com/login?id=hyoin&password=123456
위 예시는 쿼리스트링을 포함한 URL이다. 파라미터인 idpassword를 통해 값을 전달받을 수 있다. 만약, 요청 파라미터가 여러개이면 &로 연결한다.

이 예시는 로그인 할 때 id와 password를 입력했을 경우에 GET method로 전송되었을 경우를 예시로 든 것이다. 내 소중한 idpassword가 주소창에 담겨 전송된다니,,! 개발을 모르는 일반인이 봐도 불안할 수 있는 요소이다. 로그인 같은 경우에는 내가 입력한 id와 password를 가지고 내 정보를 받아오는 것이기 때문에 데이터를 받아와서 나한테 보여지는 것이니 GET 이겠구나! 하는 생각을 했었는데, GETPOST에 대해 알고나니 일반적인 틀이었구나 라는것을 알게 되었다.

POST method의 동작

POST는 리소스를 생성/업데이트 하기 위해 서버에 데이터를 보내는 데 사용된다.
example => www.example.com/login

GET과 달리 전송해야될 데이터를 HTTP 메시지의 BODY에 담아서 전송한다. 그리고 그 BODY의 타입은 요청 헤더의 Content-Type에 요청 데이터의 타입 표시에 따라 결정된다.
HTTP 메시지의 BODY는 길이의 제한없이 데이터를 전송할 수 있다. 그래서 POST요청은 GET과 달리 대용량 데이터를 전송할 수 있다.

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

GET 요청에 대한 참고 사항

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

POST 요청에 대한 참고 사항

  • POST 요청은 캐시되지 않는다.
  • POST 요청은 브라우저 기록에 남아 있지 않다.
  • POST 요청에는 데이터 길이에 대한 제한이 없다.
  • POST 요청 중 자원 생성은 201(Created) HTTP 응답 코드를 반환한다.
특징GETPOST
캐시OX
브라우저 기록OX
데이터 길이 제한OX
HTTP 응답 코드200(OK)201(Created)
언제 주로 사용하는가 ?리소스 요청리소스 생성
리소스 전달 방식Query StringHTTP BODY

이 글을 작성하며 도움 받은 글입니다. 도움주셔서 감사합니다.

profile
학습 저장소

0개의 댓글