HTTP 메소드란?
HTTP 메소드는 클라이언트가 웹서버에게 사용자 요청의 목적이나 종류를 알리는 수단이다.
최초의 HTTP 에서는 GET 메소드 하나밖에 없었지만 이후 다양한 메소드들이 생겨났다.
HTTP 메소드 종류
HTTP 메소드의 종류는 총 9가지가 있고, 주로 쓰이는 메소드로는 5가지가 있다.
주요 메소드
GET : 서버로부터 데이터 취득 (리소스 조회)
POST : 서버의 데이터를 추가, 작성
PUT : 서버의 데이터를 갱신(대체)하거나 작성
DELETE : 리소스 삭제
PATCH : 리소스의 일부분 수정
기타 메소드
OPTIONS : 대상 리소스에 대한 통신 가능 옵션을 설명 (주로 CORS에서 사용)
HEAD : GET 과 동일하지만 메시지 부분을 제외하고 상태 줄과 헤더만 반환
CONNECT : 대상 자원으로 식별되는 서버에 대한 터널을 설정
TRACE : 대상 리소스에 대한 경로를 따라 메시지 루프백 테스트를 수행
멱등성 : 동일한 요청을 한 번 보내는 것과 여러 번 연속으로 보내는 것이 같은 효과를 지니고, 서버의 상태도 동일하게 남을 때 해당 HTTP 메서드가 멱등성을 가졌다고 한다. 멱등성 메서드에는 통계 기록을 제외하면 어떠한 부수 효과도 존재해서는 안되며, 올바르게 구현한 경우 GET, HEAD, PUT, DELETE 메서드는 멱등성을 가진다. POST 메서드는 그렇지 않다. 모든 안전한 메서드는 멱등성도 가진다.
제일 자주 사용하는 4가지 메소드만 추가 설명을 더 정리하겠다.
1. GET
주로 데이터를 읽거나(Read) 검색(Retrieve)할 때 사용된다. Get 요청이 성공적으로 이루어진다면 json 혹은 xml과 함께 200 (Ok) 응답코드를 리턴한다. 오로지 데이터를 읽을 때만 사용하고 수정할 때는 사용하지 않는다. 데이터를 변경하는 연산에 사용하지 않으므로 당연히 멱등성을 가진다.
요청 시 Body 값과 Content-Type이 비워져있고 주로 쿼리스트링으로 파라미터를 주고받는다. Body를 사용해서 데이터를 전달할 수는 있지만, 지원하지 않는 곳이 많아서 권장하지 않는다.
조회 성공 시 Body 값에 데이터 값을 저장하여 성공 응답을 보낸다.
GET은 캐싱이 가능하여 같은 데이터를 한 번 더 조회할 경우에 저장한 값을 사용하여 조회 속도가 빨라진다.
2. POST
주로 새로운 리소스를 생성하거나 프로세스 처리에 사용된다. 성공적으로 creation을 완료하면 201 (Created) 응답 코드를 반환한다. 요청이 들어올 때마다 리소스가 새로 생성되기에 같은 POST 요청을 여러 번 보냈을 때 항상 같은 결과물이 나오는 것을 보장하지 않으므로 멱등성을 갖지 않는다.
3. PUT
PUT는 리소스를 업데이트 / 생성할 때 사용된다. 즉, 리소스가 있으면 대체하고 없으면 생성한다. 동일한 PUT 요청을 여러 번 호출하면 항상 동일한 결과가 생성되기에 멱등성을 가진다.
4. DELETE
지정된 리소스를 삭제할 때 사용한다. 동일한 요청을 여러 번 보내면 처음 보낸 요청에서 지정 리소스가 삭제되고 이후에는 이미 리소스가 삭제 되고 없어서 에러 코드를 반환할 것이므로 요청을 여러 번 보내도 서버의 상태는 동일하다. 따라서 DELETE 메소드는 멱등성을 가진다.
삭제를 위한 요청이므로 요청시에 Body 값과 Content-Type 값이 비워져있다.
HTTP 메소드의 특징을 표로 정리하면 아래와 같다.
안전 메소드는 계속해서 메소드를 호출해도 리소스를 아예 변경하지 않는다는 뜻이다.
멱등 메소드는 위에서 설명한 바와 같다.
추가 정리
GET vs POST
https://fidget278.tistory.com/36
POST vs PUT
POST는 요청을 할 때마다 새로운 데이터가 생성되지만, PUT은 사용자가 데이터를 지정하고 수정하는 것이기에 같은 요청을 계속 하더라도 데이터가 계속 생성되지 않고 해당 리소스가 같은 값으로 계속 수정되는 것이므로 멱등성을 가진다.
PUT vs PATCH
위에서 PATCH는 리소스의 일부분만 수정하는 것이라고 했다. 반대로 PUT은 지정한 리소스를 완전히 교체해버린다(덮어쓴다). 따라서 PUT은 멱등하고, PATCH는 멱등하지 않다.
정확하게는, PATCH는 멱등하게 설계할 수도, 멱등이 아니게 설계할 수도 있다.
예를 들어 사용자 정보{이름, 나이} 가 있을 때 이름값만 바꾸게 설정한다면 요청할 때마다 이름이 같은 값으로 바뀌게 되므로 해당 PATCH 요청은 멱등하다.
하지만 한 번 호출할 때마다 나이를 1살씩 더 하는 식으로 설계했다면 요청을 할 때마다 나이가 1살씩 늘어나게 되니 해당 PATCH 요청은 멱등하지 않다.
물론 PUT도 설계하기에 따라 멱등하지 않을 수도 있다. 하지만 위에서 멱등성을 설명할 때도 달아놨듯이 올바르게 구현할 경우 PUT은 멱등해야한다. 즉, PUT은 데이터를 가공하는 것이 아니라 해당 데이터를 덮어써서 바꾸는 것이 태초의 목적인 것이고 PATCH는 그렇지 않기에 올바르게 구현했을 때를 기준으로 PUT은 항상 멱등하고 PATCH는 항상 멱등하다고 말할 수 없다.
Reference
https://developer.mozilla.org/ko/docs/Glossary/Idempotent
멱등성 - 용어 사전 | MDN
동일한 요청을 한 번 보내는 것과 여러 번 연속으로 보내는 것이 같은 효과를 지니고, 서버의 상태도 동일하게 남을 때, 해당 HTTP 메서드가 멱등성을 가졌다고 말합니다. 다른 말로는, 멱등성 메
developer.mozilla.org
https://velog.io/@gidskql6671/HTTP-Method%EC%9D%98-%EB%A9%B1%EB%93%B1%EC%84%B1
HTTP Method의 멱등성
HTTP 메서드의 멱등성(Idempotent)에 대해 알아보자
velog.io
https://velog.io/@yh20studio/CS-Http-Method-%EB%9E%80-GET-POST-PUT-DELETE
Http Method 란? (GET, POST, PUT, DELETE)
평소에 코딩을 하면서 서버와 클라이언트가 소통을 하기 위해서 보통 Http를 이용을 하게 되었습니다. 그런데 GET, POST, PUT, DELETE 등 여러가지의 Http Method 가 존재하는데 명확하게 사용하고 있을까?
velog.io
http 메소드와 상태코드
HTTP 메소드란 HTTP 메소드는 이다. 최초의 HTTP에서는 GET 메소드 하나밖에 없었지만 이후 다양한 메소드들이 생겨났다. HTTP 메소드 종류와 특징 HTTP 메소드의 종류는 총 9가지가 있다. 이 중 주로 쓰
kyun2da.dev
https://www.inflearn.com/questions/110644
Patch 메서드가 멱등이 아닌 이유 - 인프런 | 질문 & 답변
패치의 경우 멱등성을 갖지 않는 이유가 무엇인가요? 외부 요인에 의해 값이 변경되지 않는 이상 항상 같은 결과를 가져오는 것 아닌가요..? - 질문 & 답변 | 인프런...
www.inflearn.com
'백엔드 > 네트워크' 카테고리의 다른 글
GET 과 POST의 차이 (0) | 2022.06.12 |
---|---|
CORS (교차 출처 리소스 공유) (1) | 2022.06.07 |