HTTP 메서드의 속성

개발로 쓰는 개발 노트·2023년 5월 25일
0

HTTP 메서드의 속성

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

HTTP는 위의 속성들이 있다. 멱등은 처음 들어본 단어였는데
김영한 강사님께서 강의해주신 내용을 바탕으로 이해한 바를 설명해보겠다.
아래 표는 강의에서 위키피디아를 보고 참고하신 내용을 유사하게 정리하였다.

안전(Safe)

  • 호출해도 리소스를 변경하지 않는다.

즉, 호출했을 때 리소스의 변경이 일어나지 않는 것(GET, HEAD)가 있다.
안전은 단순히 리소스가 변하는지 변하지 않는지만을 고려한다.
그러므로 계속해서 GET을 했을 때 서버에 장애가 생길 수 있으니 불안전하지 않을까요?
라는 질문은 메서드 속성 안전(Safe)에서 어긋나는 질문이다.

멱등(Idempotent)

  • f(x)=f(f(x))

위의 공식으로 모든 설명이 끝난다. 1번 호출해도 2번 연달아 호출해도 결과가 똑같다.

  • 멱등 메서드
    - GET, PUT, DELETE

    • GET : 계속해서 조회해도 같은 결과가 조회된다.
    • PUT : 계속해서 덮어쓰더라도 같은 리소스가 생성되고 끝이다.
    • DELETE : 계속해서 지우더라도 삭제된 결과는 똑같다.
  • POST를 예로 들면 멱등하지 않는 메서드라고 하는데 POST는 리소스를 계속해서 생성해버리므로 100번 호출하면 100개의 리소스가 생성되어버린다. 이는 멱등하지 않는다고 표현한다.

  • 멱등은 자동 복구 메커니즘에 사용할 수 있으므로 인지해야한다.
    클라이언트가 DELETE를 호출하였음. 그런데 서버의 문제로 제대로 실행되지 않았다면?
    클라이언트가 재실행하여도 되는가? 멱등한 메서드는 모두 가능하다.
    이것이 자동 복구 메커니즘의 판단 근거이다.

  • 멱등은 재요청 도중에 외부 요인으로 리소스가 변경된 것은 무시한다.
    GET으로 데이터를 호출한 뒤 PUT을 실행하여 리소스를 변경하였다.
    다시 GET을 호출하면 당연히 결과값은 다르다. 단순히 위의 공식에서도 어긋난다.
    멱등은 f(g(f(x)))=f(x)가 아니고 f(f(x))=f(x)이다.
    그러므로 외부 요인이 추가되어 결과값이 다르다면 그건 멱등에서 고려하지 않는 사항이다.

캐시가능(Cacheable)

  • 응답결과 리소스를 캐시해서 사용해도 되는가?
  • GET, HEAD, POST, PATCH가 가능하다.
  • 실제로는 GET, HEAD정도만 캐시로 사용하고 있으며 POST와 PATCH는 본문 내용까지 캐시 키로 고려해야하는데 구현이 쉽지 않다.

다음은 HTTP 메서드의 활용에 대해 알아보고 직접 설계해보려 한다.

출처 : 모든 개발자를 위한 HTTP 웹 기본 지식(김영한 강사님 인프런 강의)

profile
비전공자 개발초보입니다!

0개의 댓글