GET
방식과POST
방식의 차이는 뭘까? 사실 개발을 할 때는GET
은 데이터를 받아올때 사용하고POST
는 작성이나 수정을 요청할때 사용하자. 라는 약속(?)이 되어있어 자세하게는 모르는 것 같아 확실히 개념을 잡고 사용해보려 글을 작성한다.
GET
은 서버에서 어떤 데이터를 가져와서 보여줄때 사용한다. 어떤 값이나 내용, 상태등을 바꾸지 않는 경우에 사용하는 것이다.
POST
는 서버로 데이터 값이나 상태를 추가하거나 수정, 값을 저장할 때 사용한다.
게시판에서 글의 내용에 대한 목록을 보여주는 경우나, 글의 내용을 보는 경우에는 GET
에 해당하고, 글의 내용을 저장하고, 수정할 때는 POST
를 사용한다는 것이다.
실제로 오래된 쇼핑몰이나 홈페이지에 들어가보면 GET과 POST를 용도구분없이 혼용해서 사용한 흔적을 볼 수 있다고 한다. 그러면 혼용했다는 사실을 어떻게 알 수 있었을까?
GET
은 요청을 전송할 때 URL 주소 끝에 파라미터로 포함되어 전송되며, 이 부분을 쿼리 스트링(QueryString) 이라고 부른다.
example =>www.example.com/login?id=hyoin&password=123456
위 예시는 쿼리스트링을 포함한 URL이다. 파라미터인id
와password
를 통해 값을 전달받을 수 있다. 만약, 요청 파라미터가 여러개이면&
로 연결한다.
이 예시는 로그인 할 때 id와 password를 입력했을 경우에 GET method로 전송되었을 경우를 예시로 든 것이다. 내 소중한 id
와 password
가 주소창에 담겨 전송된다니,,! 개발을 모르는 일반인이 봐도 불안할 수 있는 요소이다. 로그인 같은 경우에는 내가 입력한 id와 password를 가지고 내 정보를 받아오는 것이기 때문에 데이터를 받아와서 나한테 보여지는 것이니 GET
이겠구나! 하는 생각을 했었는데, GET
과 POST
에 대해 알고나니 일반적인 틀이었구나 라는것을 알게 되었다.
POST
는 리소스를 생성/업데이트 하기 위해 서버에 데이터를 보내는 데 사용된다.
example => www.example.com/login
GET
과 달리 전송해야될 데이터를 HTTP 메시지의 BODY에 담아서 전송한다. 그리고 그 BODY의 타입은 요청 헤더의 Content-Type
에 요청 데이터의 타입 표시에 따라 결정된다.
HTTP 메시지의 BODY는 길이의 제한없이 데이터를 전송할 수 있다. 그래서 POST
요청은 GET
과 달리 대용량 데이터를 전송할 수 있다.
이처럼 POST
는 데이터가 BODY로 전송되고, 내용이 눈에 보이지 않아 GET
보다 보안적인 면에서 안전하다고 생각할 수 있지만, POST
요청도 크롬의 개발자 도구, Fiddler와 같은 툴로 요청 내용을 확인할 수 있기 때문에 민감한 데이터의 경우에는 반드시 암호화해 전송해야 한다.
특징 | GET | POST |
---|---|---|
캐시 | O | X |
브라우저 기록 | O | X |
데이터 길이 제한 | O | X |
HTTP 응답 코드 | 200(OK) | 201(Created) |
언제 주로 사용하는가 ? | 리소스 요청 | 리소스 생성 |
리소스 전달 방식 | Query String | HTTP BODY |
이 글을 작성하며 도움 받은 글입니다. 도움주셔서 감사합니다.