HTTP(Hypertext Transfer Protocol)은 client와 server사이에 통신을 할 수 있도록 디자인된 프로토콜로, client와 server사이에서 request(요청)와 response(응답) 프로토콜로 작동한다.
Ex) 클라이언트(browser)가 서버로 HTTP request를 보내면, 서버는 클라이언트 한테 response를 반환한다.
그럼 이 response에는 요청에 대한 상태정보와(status code) 필요한 콘텐츠들이 포함될 수 있다.
여기서 GET
과POST
가 가장 많이 사용되는 두가지 HTTP메소드이고, 이중에서 GET
, POST
, PUT
, PATCH
, DELETE
다섯가지에 대해서 한번 알아보 려고 한다.
특정한 리소스를 가져올때 사용하는데, GET
request는 데이터를 가져올때만 사용해야 한다.
쿼리 문자열은 (이름/값 쌍을 이룸) GET request의 URL로 전송된다.
/test/demo_form.php?name1=value1&name2=value2
GET method로 request를 날릴때 왜 query를 사용해야 할까?
GET 메소드도 POST 메소드처럼 데이터를 담을 수 있는 body가 좋재하지만, GET request의 body를 확인하지 않는 서버가 대부분이라 거의 사용되지 않는다.또 GET은 리소스를 요청하기 위해 만들어졌기 때문에 body에 어떤 정보를 넣을 상황도 거의 없다.
POST
는 데이터를 서버로 전송해 리소스를 생성 혹은 업데이트 하는데 사용하는데, message body를 통해 서버로 data를 전달하면, 서버는 정해진 로직에 따라 데이터를 처리한다.
POST request의 body 유형은 Content-Type
헤더로 나타난다.
PUT
메소드와의 차이점은 멱등성으로, PUT
은 멱등성을 가지는데 PUT
메소드를 1번 또는 여러번 연속으로 보내도 동일한 효과를 보인다.
(POST는 멱등성을 가지지 않음, 그니까 여러번 여러번 요청하는거와 1번 요청하는거와 결과가 다르다는 소리임)
POST Request는 아래와 같은 기능을 수행하기 위해 설계되었다.
위 표에서 볼 수 있듯이, GET request는 URL에 데이터를 포함하기 때문에 보안에 취약하고 누구나 볼 수 있어서, 비밀번호와 같이 중요한 정보는 GET을 사용해서 데이터를 보내면 안된다!
PUT
메소드는 데이터를 서버로 전송해 리소스를 생성 혹은 업데이트할때 사용한다.
PUT
메소드와 POST
메소드의 차이점은 멱등성인데, 위에서 설명한것 처럼 PUT
메소드는 멱등성을 갖고있어 1번 요청하나 여러번 요청하나 결과가 동일하다. 이를 SideEffect가 없다고 표현한다.
보통은 데이터를 수정할때 사용하는데 리소스 전체를 대체한다.
즉 덮어쓰기를 수행한다고 볼 수 있고 부분적인 수정이 불가능 하다.
(데이터가 없으면 새로 생성함)
예를들어 아래와 같은 user data 구조가 있다고 하자
user {
id: string;
firstName: string;
lastName: string;
age: number;
}
PUT 메소드는 age만 업데이트 한다고 하더라도 항상 모든 필드값을 갖고와 새로운 값으로 교체한다.
PATCH
메소드는 리소스의 부분적인 수정을 할 때 사용한다.
또 PUT
메소드와 다르게 멱등성을 가지지 않는데(side effect가 있다는 소리), 동일한 patch request가 다른 결과를 야기할 수 있음을 의미한다.
server에게 리소스의 삭제를 요청할때 사용한다.