평소에 개발을 하면서 HTTP 메서드를 이용하는데, GET, POST, PUT, DELETE와 같은 메서드들을 내가 명확하게 사용하고 있는 걸까? 라는 궁금증이 생겼다. 이 궁금증과 동시에 HTTP 메서드라는 게 정확히 무엇이고, 왜 사용하는 것인지 근본적인 의문이 생겨 블로그로 작성해보고자 한다.
HTTP 메서드에 대해서 알기 위해서, 먼저 정의되는 것이 REST이다.
REST(Representational State Transfer)의 약자로, 자원을 이름으로 구분하여 해당 자원의 상태를 주고받는 모든 것을 의미한다. REST는 다음과 같은 3가지로 구성이 되어있다.
여기서 글의 주제인 HTTP 메서드가 등장한다. 즉, HTTP 메서드는 REST를 지키면서 행위를 전달하는 방법이다.
더 자세하게 HTTP 메서드에 대해 살펴보자.
앞에서 말한 것처럼 HTTP 메서드는 행위를 전달하는 방법인데, 이 방법에는 여러가지 종류가 있다. 총 9가지의 HTTP 메서드가 있고 이 중 주로 쓰이는 메서드는 5가지이다.
GET 메서드는 데이터를 읽거나 검색할 때 사용되는 메서드이다. 요청이 성공적으로 이루어진다면 200(Ok) HTTP 응답 코드를 리턴한다. 에러가 발생하면 주로 404(Not found) 에러나 400(Bad request) 에러가 발생한다.
예시
GET /user/1
데이터를 조회하는 것이기 때문에 요청시에 Body 값과 Content-Type이 비워져있다. 조회할 데이터에 대한 정보는 URL을 통해서 파라미터를 받고 있는 모습을 볼 수 있다.
데이터 조회에 성공한다면 Body 값에 데이터 값을 저장하여 성공 응답을 보낸다.
GET은 캐싱이 가능하여 같은 데이터를 한번 더 조회할 경우에 저장한 값을 사용하여 조회 속도가 빨라진다.
POST 메서드는 새로운 리소스를 생성할 때 사용된다. 성공적으로 요청을 완료하면 201(Created) HTTP 응답을 반환한다.
예시
POST /user
body : {date : "example"}
Content-Type : "application/json"
데이터를 생성하는 것이기 때문에 요청시에 Body 값과 Content-Type 값을 작성해야한다. 해당 예시는 JSON을 통해서 작성된 예시이다.
URL을 통해서 데이터를 받지 않고, Body 값을 통해서 받는다.
데이터 조회에 성공한다면 Body 값에 저장한 데이터 값을 저장하여 성공 응답을 보낸다.
PUT 메서드는 리소스가 있으면 업데이트하고 없으면 생성하기 위해 서버로 데이터를 보내는 데 사용된다.
예시
PUT /user/1
body : {date : "update example"}
Content-Type : "application/json"
데이터를 수정하는 것이기 때문에 요청시에 Body 값과 Content-Type 값을 작성해야한다. 해당 예시는 JSON을 통해서 작성된 예시이다.
URL을 통해서 어떠한 데이터를 수정할지 파라미터를 받는다. 그리고 수정할 데이터 값을 Body 값을 통해서 받는다.
데이터 조회에 성공한다면 Body 값에 저장한 데이터 값을 저장하여 성공 응답을 보낸다.
DELETE 메서드는 지정된 리소스를 삭제한다.
DELETE /user/1
데이터를 삭제하는 것이기 때문에 요청시에 Body 값과 Content-Type 값이 비워져있다.
URL을 통해서 어떠한 데이터를 삭제할지 파라미터를 받는다.
데이터 삭제에 성공한다면 Body 값 없이 성공 응답만 보내게 된다.
위에서 idempotent 라는 단어가 반복적으로 나왔는데 이것은 HTTP 메서드의 속성이다. 대체 idempotent 하다는 것이 무엇인지 HTTP 메서드의 다른 속성들과 함께 알아보자.
HTTP 메서드는 속성에는 다음과 같이 3가지 속성이 있고 해당 속성별로 메서드를 구분할 수 있다.