HTTP Method

bearMin·2024년 7월 8일

들어가면서

HTTP Method가 무엇인지 무엇을 뜻하는지 대략적으로 알고 있었다. 그러나 이번에 공부를 하면서 특징이나 사용할 때 헷갈렸던 부분들에 대해 정리를 해보고자 한다!


HTTP Method란?

내 이전 블로그에서도 꾸준히 등장하는 친구이며 다들 잘 아는 친구일거라는 생각이 든다. 클라이언트와 서버 사이에서 이루어지는 요청(Request)과 응답(Response) 데이터를 전송하는 방식을 일컫는다.

간단히 말해서 서버에게 이렇게 수행해라! 라고 동작을 지정하는 요청을 보내는 방식이다!

종류는?

HTTP Method의 종류는 총 9가지가 있다. 5가지가 아니고? 라고 생각한 사람들이 분명 있을 것이다. 나역시 그랬다ㅎㅎ 놀랍게도 HTTP Method는 총 9가지 이며 그중 주로 쓰이는 Method가 5가지 인 것이다.

주로 사용되는 Method로는 GET, POST, PUT, PATCH, DELETE 가 있고,

외의 Method로는 HEAD, OPTIONS, CONNECT, TRACE 가 있다.

우리는 이 중에서 주로 사용이 되는 5가지에 대해서 알아볼 예정이다!


GET?

영어만 읽었을 때는 무엇인가 가져오는 동작을 하는 Method인 것 같은데?

흔히 조회한다고 표현하는데, CRUD 중 R인 Read의 동작을 맡고 있다! 클라이언트에서 서버로 어떠한 리소스를 조회하기 위해 사용한다.

서버에 전달할 데이터는 query(쿼리 파라미터, 쿼리 스트링)을 통해서 전달을 하는데 URL 헤더의 정보를 넣는 방식이라 URL 길이 제한에 영향을 받는다.


리소스의 조회는 POST로도 사용이 가능하지만 GET은 캐싱이 가능하기 때문에 GET을 사용하는 것이 유리하다!


다음은 GET의 간단한 예시이다!

GET /blogs?title=method HTTP/1.1

// title이 method라는 값을 전송
// 이때 ?는 URL의 끝을 나타냄
// 다만 이때 URL에 데이터가 보여지기 때문에 보안의 문제가 있음

POST?

GET이 CRUD 중 R이었다면, POST는 CRUD 중 C인 Create를 맡고있다!

클라이언트가 전달한 데이터를 서버가 추가 또는 수정하기 위해서 사용을 한다.

데이터는 header의 body에 담겨져 전송이 되며 전송할 수 있는 데이터의 길이에 제한이 없다.


POST 역시 수정을 할 때 사용을 할 수 있지만 주로 데이터의 추가/생성에 사용이 되기 때문에 Create라고 표현을 했다!


다음은 간단한 POST의 예시이다!

POST /blog HTTP/1.1

// 만일 글을 작성한다고 할 때 사용

PUT?

CRUD 중 U인 Update의 동작을 맡고있다!

기존에 존재하던 데이터를 클라이언트가 전달한 데이터로 대체(수정)하기 위해서 사용을 한다.

만일 데이터가 있다면 덮어쓰고, 없다면 새로 생성을 한다. 데이터를 대체해야하기 때문에 클라이언트가 구체적인 전체 경로를 지정해서 보내주어야한다!


다음은 간단한 PUT의 예시이다!

PUT /blogs/10 HTTP/1.1

// 10번째 블로그를 수정
// 10번째 블로그라는 데이터를 대체해야하기 때문에 POST와 다르게 조금 더 구체적

PATCH?

PATCH 역시 CRUD 중 U인 Update의 동작을 맡고 있다!

어라? PUT도 맡고 있는 거 아니었나? 라고 생각할 수 있다. 맞다. 하지만 PUT과 차이점이 존재한다.


PUT전체 수정(덮어쓰기)인 반면에 PATCH부분적으로 수정이 가능하다.

예를 들어 { “title”: “Method”, “date”: “07-08” } 이라는 데이터가 있을 때 { “date”: “07-10” } 으로 바꾸기 위해서 PUT과 PATCH를 각각 사용해서 수정이라는 동작을 진행시키면

PUT은 date만 남게 되고, PATCH는 title은 그대로 남고 date만 수정이 된다.


하지만 PATCH를 지원하지 않는 서버도 있으며 지원하지 않을 때는 POST를 대체로 사용할 수 있다. 또한 PUT 역시도 PATCH처럼 사용할 수 있다.


간단한 PATCH의 예시이다!

PATCH /blogs/10 HTTP/1.1

// 10번째 블로그를 수정
// 10번째 블로그라는 데이터를 대체해야하기 때문에 마찬가지로 구체적

DELETE?

마지막으로 CRUD 중 D인 Delete의 역할을 맡고 있는 Method이다!

Method의 이름처럼 요청한 데이터를 삭제하기 위해서 사용이 되고 있다.


다만 삭제라는 동작은 매우 조심스럽게 진행이 되어야하는 동작이기 때문에 현실적으로는 거의 사용이 되지 않으며 대부분의 서버는 이 Method를 비활성화 시킨다.


간단한 DELETE의 예시이다!

DELETE /blogs/10 HTTP/1.1

// 10번째 블로그를 삭제

HTTP Method의 속성은?

HTTP Method의 속성에는 3가지가 있으며 속성별로 Method를 구분할 수 있다!

안전(Safe Methods)

: Method를 계속해서 호출해도 리소스를 변경하지 않는다는 뜻으로 주요 5가지 Method 중에서는 GET Method가 안전하다!

멱등(Idempotent Methods)

: 멱등성이란 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질을 뜻한다. 즉, Method를 계속해서 호출해도 결과가 동일하다는 뜻으로 GET, PUT, DELETE는 멱등하다고 볼 수 있지만 POST나 PATCH는 멱등하다고 볼 수 없다.

캐시가능(Cacheable Methods)

: 캐싱을 해서 데이터를 효율적으로 가져올 수 있다는 뜻으로 주요 5개의 Method 중에서는 GET과 POST, PATCH가 가능하지만 일반적으로 GET만 주로 캐싱이 쓰인다.


헷갈렸던 부분은?

아래는 내가 공부를 하면서 헷갈렸던 부분들에 대해서 적어놨다. 다들 비슷한 부분에서 궁금했던 것 같다..

Q) GET보다 POST가 보안적인 부분에서 더 좋다?

A) GET에는 URL에 데이터의 정보가 들어가있지만 POST에는 데이터의 정보가 들어가있지 않다. 따라서 조금 더 안전하다고 볼 수 있다. 다만 GET보다 안전하다고해서 보안성을 보장한다는 뜻은 아니다.

Q) POST보다 GET이 속도가 빠르다?

A) GET은 캐싱을 하기 때문에 여러번 요청을 한다면 저장된 데이터를 활용하게 된다. 따라서 POST보다 GET이 조금 더 빠를 수 있다.

Q) PUT과 PATCH의 차이는?

A) PUT은 지정한 데이터를 전부 수정하는 Method이지만 PATCH는 일부분만 변경이 된다. 따라서 PUT은 멱등하지만 PATCH는 멱등하다고 할 수 없다.

Q) POST와 PUT의 차이는?

A) POST와 PUT은 기능은 비슷하지만 구분해서 사용을 해야한다. POST는 새로운 데이터를 생성하기 때문에 요청이 들어올 때마다 데이터를 생성한다. 하지만 PUT은 사용자가 데이터를 지정하고 수정을 하는 것이기 때문에 같은 요청을 반복한다고 해서 데이터가 계속 생성이 되진 않는다.


왜 필요할까?

지금까지 얘기한 것을 보면 알겠지만 결국 클라이언트가 서버에게 이러한 동작을 해주세요! 라고 요청하는 것이지 직접적으로 기능이 있는 것은 아니다. 개발자가 직접 구현을 해서 동작을 해야하는 것인데 그렇다면 굳이 왜 필요한 것일까?

좋은 API 설계란?

좋은 API 설계는 행위와 자원이 분리가 되어있어야 한다. API URL에 행위가 포함이 되어있다면 좋은 설계가 아니라는 뜻이다. 그렇다면 이 행위를 어떻게 표현할 수 있을까?

바로 HTTP Method를 사용해서 표현을 하는 것이다!

예를 들어, 블로그를 조회하는 API의 URL을 설계한다고 하면

/read/blog 처럼 행위와 자원을 같이 적기보다는 /blog와 GET Method를 사용하여 자원은 blog이고 행위는 GET 으로 구분하는 것이 훨씬 더 좋은 API 설계라는 뜻이다.


정리하자면

HTTP Method는 주로 GET, POST, PUT, PATCH, DELETE 이렇게 5개가 쓰인다!

HTTP Method의 속성에는 안전, 멱등, 캐싱이 있다!

HTTP Method를 사용하는 이유는 좋은 API 설계를 위해서 이다!

profile
소소한 공부기록

0개의 댓글