이 험난한 세상에서어어~

섹션 4, HTTP 메서드 본문

이론/http

섹션 4, HTTP 메서드

토끼띠NJW 2023. 7. 8. 13:10

들어가기에 앞서

이 글은 김영한 님의 '모든 개발자를 위한 HTTP 웹 기본 지식'을 기반으로 하고 있습니다.

https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/dashboard

 

모든 개발자를 위한 HTTP 웹 기본 지식 - 인프런 | 강의

실무에 꼭 필요한 HTTP 핵심 기능과 올바른 HTTP API 설계 방법을 학습합니다., [사진] 📣 확인해주세요!본 강의는 자바 스프링 완전 정복 시리즈의 세 번째 강의입니다. 우아한형제들 최연소 기술

www.inflearn.com

섹션 4

HTTP 메서드

이전에 URI는 행위가 아닌 리소스 자체(URL일 경우에는 위치)를 표현해야 한다고 했다.

그렇다면 행위는 어떻게 표현할 것인가?

같은 URI라고 해도 양식을 제출하는 행위가 있을 것이고 또 정보를 받아오는 행위가 있을 테니까.

 

이를 구분하기 위해 HTTP 메서드가 존재한다.

 

HTTP 메서드는 크게 GET, POST, PUT, PATH, DELETE가 있다.

 

먼저 GET의 경우에는 말 그대로 정보를 조회하는 것이다. 예를 들어 구글에서 http라는 정보를 조회하고 싶다면 URI의 쿼리 부분에 http를 넣어서 구글 서버에 전달하면 된다. 쿼리말고도 바디에 저장할 수도 있지만 잘 사용되지 않는 방식이다.

 

POST는 정보를 서버에 전달하는 것이다. 예를 들면 특정 사이트에 가입하고 싶어 회원가입 양식을 제출하면 해당 양식이 사이트의 서버로 가 저장되는 방식이다. POST는 새로운 정보를 저장하는 것이기에 서버가 해당 데이터가 어디에 저장되었는지를 클라이언트에게 제공한다.

 

PUT은 간단하게 생각하면 수정이라고 볼 수 있을까? 그러나 우리가 생각하는 수정은 아니고 아예 파일을 덮어씌운다고 생각을 하면 된다. 더 정확하게 말하자면 기존의 파일을 삭제하고 다시 생겅하는 것이다. 그렇기에 잘못 사용하면 기존에 있는 값이 날라가는 문제가 생기기도 한다. 또한 PUT의 경우는 클라이언트가 해당 자료의 위치를 기억해 서버에 보내주며 만일 해당 자료가 없을 경우에는 POST처럼 완전히 새로 생성한다.

 

PATCH는 우리가 생각하는 수정에 가깝다고 말할 수 있다.

 

DELETE는 말 그대로 삭제이다.

HTTP 메서드 속성

일단 GET과 같은 메서드의 경우 http 메서드는 호출을 했을 때 리소스를 변경하지 않으므로 안전하다고 할 수 있다.

 

다음은 멱등성이다.

멱등성이란 계속해서 호출을 해도 그 결과가 같은 것을 의미한다.

GET의 경우에는 계속해서 값을 해출해도 받는 결과는 같으므로 멱등성이 있다고 할 수 있다.

PUT 또한 기존의 결과를 지우고 새로운 결과를 덮어 쓰는 것이기에 몇 번이고 실행해도 같은 결과가 나온다.

DELETE는 같은 값을 계속해서 삭제해봤자 결국은 삭제이기에 멱등성이 존재한다.

하지만, POST는 새로운 값을 추가하는 메서드로 계속해서 POST를 날리면 해당 자원이 중복해서 서버에 저장된다. 그러므로 POST는 멱등이 아니다.

이러한 멱등성은 어디에 쓰일까?

만일 서버에 문제가 생겨서 정상적인 응답을 주지 못했다고 하자. 그러면 멱등성이 있는 메서드의 경우에는 몇 번을 실행하도 결과가 같으니 다시 메서드를 실행해도 된다. 그러나 멱등성이 없으면 다른 결과가 나오니 다시 실행하는 것에 주의를 기울여야 한다.

 

마지막으로 cacheable이 있다. 캐시는 자주 사용될 법한 정보를 로컬에 저장해 놓고 다시 해당 정보를 요청하면 서버에 가지 않고 로컬에 있는 정보를 빼오는 걸 의미한다. GET, HEAD, POST, PATCH가 가능 하지만 실제로는 GET이나 HEAD 정도가 캐시가 가능하다.

 

'이론 > http' 카테고리의 다른 글

섹션 5, HTTP 상태 코드  (0) 2023.07.19
섹션 2, 3  (0) 2023.07.07
1. 네트워크  (0) 2023.07.06