HTTP 메소드

한윤재·2024년 4월 14일

HTTP 메소드


브라우저(클라이언트)가 서버에게 자원을 요청할 때 사용하는 행위에 대한 키워드이다.

주요 메소드

  • GET - 조회
  • POST - 요청 데이터의 처리 및 등록. 예) 게시글 포스팅
  • PUT - 리소스 덮어쓰기. 완전 대체 혹은 생성
  • PATCH - 리소스 업데이트. 부분 수정
  • DELETE - 리소스 삭제

URI 와 HTTP 메소드

URI - 서버 자원을 식별하기 위한 키워드이다.
https://www.study.com/members/102
위의 전체 URL에서 /members/102 에 해당하는 부분이 URI 이다.

자원과 행위의 분리

위의 경우 자원은 /members/102 에 해당한다. 102번 회원이라는 의미.

http 메소드는 행위를 담당하도록 한다.

GET - 자원을 조회하는 요청을 보낸다.

클라이언트로부터 HTTP 메소드 중 GET으로 /members/102 에 해당하는 URI 에 요청이 온다. 이는 102번 회원 조회 요청으로 해석될 수 있다.

POST

POST /members 는 멤버의 등록을 요청한다. 이에 서버는 응답 메시지로 Location: /members/102 헤더를 보내 생성된 자원의 위치를 응답하게 된다.

post 메소드는 새로운 리소스 생성에 대한 요청을 담당한다. 따라서 POST /members/102 처럼 구체적인 자원의 위치를 알고 요청하지 않는다.

PUT

덮어쓰기. PUT 메소드에 대한 가장 쉬운 설명이다.

PUT /members/102
서버의 /members/102 자원에 대해 덮어쓰기를 요청한다. 이때 덮어 씌울 데이터는 요청 메시지 본문에 포함된다.

또한 특정한 자원에 대한 덮어쓰기이므로 클라이언트가 구체적인 자원을 알고 요청한다는 특징이 있다.

덮어 씌운다는 것에 주의해야 한다. 요청 본문의 데이터로 대치되기 때문에 기존 데이터가 유실될 수 있다.
예) 서버에 member { name : 윤재 , gender : male } 이 있다. put 요청으로 member { name : 민수 } 데이터가 오게 되면. 결과물은 member { name : 민수 } 가 되며, age는 유실된다.

만일 URI 에 해당하는 자원이 존재하지 않으면 새롭게 생성한다.

PATCH

업데이트.
PATCH /members/102
이는 /members/102 자원에 대한 업데이트 요청이다. 요청 메시지 본문 데이터에 대한 반영을 요청하며, 서버의 자원에 대해 일부 수정하는 것이 가능하다.

DELETE

URI 에 해당하는 자원을 삭제하는 요청이다.

DELETE /members/102
서버의 /members/102 자원에 대한 삭제를 요청한다.

HTTP 메소드의 속성

  • 멱등성 (Idempotent Methods)
  • 안전성 (Safe Methods)
  • 캐시 가능 (Cacheable Methods)

각 HTTP 메소드의 특징은 위의 표를 참고하기로 하고, 각 메소드가 의미하는 바를 알아보자.

잠깐. HTTP 메소드의 속성이 위와같이 정의되어있다고 해서 해당 속성을 지닌다고 보장 하지는 않는다.
서버 어플리케이션을 작성한 개발자가 해당 메서드의 속성이 지켜지도록 만들었을 때 지닐 수 있다는 것이지. 꼭 속성을 가진다고 단정할 수는 없다.

안정성

아무리 어떻게 호출해도 서버에 안전하다.

여기서 안전은 서버 자원의 안전을 의미한다. GET 메서드는 단순히 조회(읽기) 만을 수행한다. 따라서 서버 자원을 수정하지 않는다.

결국 몇번을 호출해도 서버 자원에 안전한 메소드가 된다.

멱등성

덮을 멱, 무리 등
같은 작업을 여러번 해도 결과가 변하지 않는 성질

등급, 동등하다의 등이며 특정한 그룹을 의미한다. 이 난감한 한자어를 조합하면 통째로 덮어씌운다 라는 의미가 된다.

우리가 앞서 살펴본 HTTP 주요 메소드 중에서 GET, PUT, DELETE 메서드가 이 멱등함을 만족한다.

  • GET은 읽기 전용이며 아무리 호출해도 결과가 일정하다.

  • PUT은 덮어씌우기 혹은 새로운 자원 생성으로 작동하지만. 몇번을 호출해도 새로운 자원에 대한 덮어씌우기가 수행되므로. 결과가 일정하다.

  • DELETE의 경우 여러번 호출하면 이미 지워진 자원에 대해 지우기 요청이 반복된다. 이는 결과적으로 해당 자원이 지워진 것일 뿐 늘 결과는 동일하다.

이렇게만 설명하면 와닿지 않을 수 있다. 다음은 멱등하지 않은 메소드의 결과를 살펴보자.

POST는 멱등하지 않다.

POST는 여러번 반복 호출되면 계속해서 새로운 자원이 생성된다. 이는 서버에 없던 새로운 자원이 계속 만들어지는 변화를 가져오기 때문에 결과가 항상 동일하지 않다.

캐시 가능성

응답으로 받은 자원을 저장해도 된다.

GET, HEAD, POST, PATCH 메서드가 캐시 가능성을 지닐 수 있다.

GET 메소드로 응답받은 자원은 저장할 수 있다. 추후 해당 자원에 대한 GET 요청이 발생하면 서버가 아닌 로컬 저장소로부터 해당 자원을 가져온다.

0개의 댓글