클라이언트가 서버에 요청을 보내는 HTTP 프로토콜 메소드에는 대표적으로 GET, POST 메소드가 있다.
1. GET
GET은 쉽게 생각하면 DB에서 SELECT를 하는 개념이다.
클라이언트가 서버에 GET 요청을 보내게 되면 서버는 해당 값을 반환한다.
먼저 GET 요청 예시를 살펴보면, 다음과 같다.
http://localhost:0000/login?id=kim12&pw=1234
다음과 같이 URL 뒤에 쿼리 파라미터가 직접적으로 드러나있는 것을 볼 수 있으며 이에 따라 여러 특징이 파생된다.
GET 특징
- URL 뒤에 쿼리 스트링을 드러낸 채로 서버에 전송
- 따라서 정보들이 그대로 노출되어 보안에 취약
- 캐싱 가능
- 전송하는 데이터 양에 제한이 있음(브라우저마다 상이)
- 브라우저의 히스토리에 기록이 남음
- POST 방식에 비해 속도가 빠름
- HTTP 메세지에 body가 존재하지 않음
※ 캐싱 : 해당 데이터를 다시 요청할 때 빠르게 반환하기 위해 레지스터에 데이터를 저장시켜 놓는 것
따라서 GET 요청은 조회와 같은 간단한 데이터 요청에 적합한 메소드이다.
2. POST
POST는 DB에서 CREATE 하는 개념이라고 생각할 수 있다.
클라이언트가 서버에 리소스를 생성 또는 수정하고자 할 때 POST 요청을 보내게 된다.
POST 요청 예시는 다음과 같다.
http://localhost:0000/login
GET 과 달리 URL 뒤에 쿼리 파라미터가 직접적으로 드러나있지 않다.
POST 특징
- URL 뒤에 쿼리 스트링이 노출되어 있지 않음
- 따라서 GET 방식에 비해 상대적으로 보안적임
- 캐싱 불가
- 전송하는 데이터 양에 제한 없음
- 브라우저 히스토리에 기록이 남지 않음
- GET 방식에 비해 속도가 느림
- HTTP 메세지에 body가 존재
POST 요청은 생성 또는 수정에 적합한 메소드이다.
추가적으로, GET과 POST 의 중요한 차이점 중 하나는 멱등성 유무이다.
멱등성이란 연산을 몇번 반복하더라도 결과가 달라지지 않는 성질을 말하는데,
GET은 리소스를 조회하므로 멱등성을 띠지만, POST는 요청할 때마다 리소스를 생성 또는 수정하므로 멱등성을 띠지 않는다.