HTTP Method에는 클라이언트가 서버로 요청을 보내는 방법인 GET
과 POST
두 가지 방식이 있다.
나의 경우에는 보통 GET
만 주로 사용하였었는데 문득 POST
는 언제 쓰는거지??라는 생각이 들었다.
그래서 GET
과 POST
마치 패트와 매트같은 두 녀석을 알아보도록 하자!
패트와 매트.. 아는 사람이 있다면.. ㅎㅎ
먼저 나에게 익숙한 GET
에 대하여 알아보도록 하겠다!
GET
요청은 자원에 대한 조회를 요청한다.GET
은 요청을 전송 할 때 데이터를 Body
가 아닌 HTTP 헤더인 URL
주소 끝쪽으로 파라미터가 포함되어 전송 된다.Query String
이라고 부른다.GET 예시
- 주소 끝에
?
부분부터 요청 메세지(Query String)가 입력 된다.- 키 값 쌍으로 이루어져서 전송된다.
- 데이터가 여러 개인 경우
&
기호를 사용한다.
ex) GET http://whichbeachsearch/pages/map/map.html?sendLat=37.82120833&sendLon=124.6792861
URL
에 데이터가 노출된다.그리고 조금은 생소한 POST
에 대해 알아보도록 하자!!
POST
는 서버의 리소스를 새로 생성하거나 업데이트 할때 사용한다.POST
요청은 데이터를 Body
에 담아서 전송한다.Query String
에 데이터가 드러나지 않는다.Content-Type
에 요청 데이터의 타입을 표시해줘야 한다.POST 예시
- JSON 데이터를 API에 게시
Host: foobar.example
Content-Type: application/json
Object- [{name1:value1},{name2:value2}]
GET | POST | |
---|---|---|
리소스 전달 방식 | URL 주소 끝으로 Query String | HTTP Body |
브라우저 기록 | 매개 변수가 웹 브라우저 기록에 남아있다. | 매개변수가 웹 브라우저 기록에 저장되지 않는다. |
데이터 유형 | 문자열 데이터 유형만 지원 | 문자열, 숫자, 이진 데이터와 같은 다양한 데이터 유형 지원 |
보안 | 데이터가 URL의 일부이기 때문에 중요 정보에 대해 안전하지 못하다 | 데이터가 브라우저 기록이나 웹 서버 로그에 저장되지 않아 GET보다는 안전하다 |
매개변수 | URL에 담겨서 보내지기에 2K 미만의 매개변수를 사용하는 것이 안전하며 일부 서버는 최대 64K까지 처리가 가능하다. | 파일 업로드를 포함한 매개변수를 서버로 보낼 수 있다. |
북마크 | GET 요청을 북마크 할 수 있다. | 요청을 북마크 할 수 없다. |
데이터 길이 제한 | 양식 데이터가 URL에 있어 길이가 제한되어 있다. 안전한 길이 제한은 대부분 2048자이지만 브라우저와 웹 서버에따라 다르다 | 제한 없음 |
성능 | URL에 값을 추가하는 단순한 특성으로 인해 POST에 비해 더 좋다. | HTTP 본문에 POST값을 포함시키는데 소요되는 시간으로 인해 GET보다 성능이 낮다. |
캐싱 | 대부분 캐싱이 가능하다. | 대부분 캐싱이 불가능하다. |
HTTP 응답 코드 | 200 (OK) | 201 (Created) |
GET
은 서버의 리소스에 데이터의 조회를 요청할 때 POST
서버의 리소스를 새로 생성하거나 업데이트 할 때 사용한다.
URL
에 매개변수를 담아 보내기 때문에 HTTP 메세지에 body
가 없다. body
에 데이터를 담아 보내기 때문에 HTTP 메세지에 body
가 존재한다.두 요청 메서드의 주요한 차이점 중 하나는 이 멱등성이라고 하는 특성이다.
메서드를 통해 요청을 보낼 때 한 번 보내는 것과 여러번 연속으로 보내는 것이 같은 효과를 지니고, 서버의 상태도 동일하게 남을 때, 해당 HTTP 메서드가 멱등성을 가졌다고 말한다.
"동일한 요청을 여러번 보내도 같은 효과, 결과를 지닌다."
GET
, HEAD
, PUT
, DELETE
메서드는 멱등성을 가지며 POST
는 멱등성을 가지지 않는다.
다시 말하면 GET
의 경우 서버에게 동일한 요청을 여러번 전송해도 동일한 응답이 돌아와야 한다는 것을 의미한다. 서버의 데이터나 상태를 변경시키지 않아야 멱등성을 가지므로 주로 조회를 할 때 이 메서드 요청을 사용해야 한다.
반면 POST
의 경우에는 멱등성을 띄지 않으므로 서버에게 동일한 요청을 보내는 경우 응답은 매번 다를 수 있기에 서버의 상태나 데이터를 변경시킬 때 사용한다.
POST
는 서버의 무언가를 변경되도록 사용되기에 생성
, 수정
, 삭제
모든 경우에 사용할 수 있지만 각 역할에 대해 알맞은 Method
를 사용하는 것이 바람직하다.
GET
과 POST
에 대해 알아보았는데.. GET
의 경우에는 내가 진행한 프로젝트에서 URL로 매개 변수를 넘겨주어서 어떠한 동작을 하도록 구현한 적이 있어서 그런지 Query String
의 사용법이 친숙하게 느껴졌다. 용어도 이제야 알았지만..
어쨌든 GET
과 POST
의 차이 그리고 어떤 경우에 쓰여야하는지.. 어떤 중요 차이점이 있는지 알게되었으니 추후에 서버로 무언가를 요청해야 할 때 적절하게 사용해야겠다!
.
.
.
.
.
.
.
참고한 자료 🙇🏻
[GURU99] GET Vs Post
[Velog] songyouhyun Get과 Post의 차이를 아시나요?
[CODEBRIDGE] Get vs Post
[tistory] kmyjn HTTP 메소드 중 GET 방식과 POST 방식 차이
[MDN] 멱등성