멱등성(Idempotent)

저뉼(스님?)·2022년 9월 11일
0

나만의 설명

목록 보기
3/11

"HTTP 메서드는 반드시 이렇게 되어 있다"가 아님.
약속 같은 것이므로 개발자가 이를 어기고 다르게 만들 수도 있음.
즉, "HTTP 메서드가 이렇게 사용되도록 구현해야 한다"는 당위의 뜻.

  • GET 메서드는 무조건 멱등성을 가진다 ❌
  • GET 메서드는 멱등성을 가지도록 구현하자 ⭕️

멱등성은 클라이언트가 의도한 효과에 적용되는 개념.
다시 말해, 여러 번 호출 시 최초 호출과 나머지 호출을 비교했을 때, 서버의 응답이나 클라이언트의 의도와 상관없는 서버 상태가 달라지더라도 멱등성과는 관련이 없음.
예를 들어,

  • 클라이언트가 게시물(ID: 3045)을 삭제하려고 DELETE /posts/3045을 한 번 호출하든 여러 번 호출하든, 서버의 응답은 다를 수 있겠지만, 게시물(ID: 3045)만 삭제되었다는 결과는 같음
  • 클라이언트가 게시물(ID: 3045)을 조회하려고 GET /posts/3045을 호출할 때마다 서버에서 로그를 생성하여 서버 상태가 변하더라도 조회 결과는 같음

정리

  • 일반적으로 GET, PUT, DELETE는 멱등성을 가지는 반면, POST는 가지지 않음
  • PATCH는 애매함
    만약 어떤 필드가 변경 값 자체(PUT에서처럼)가 아니라 증감시킬 값을 받는다면 호출할 때마다 서버 자원이 변하여 멱등성을 가지지 않기 때문

참고
안전함(Safe)과의 관계

  • 안전하다 -> 멱등성을 가진다 ⭕️
  • 멱등성을 가진다 -> 안전하다 ❌

안전한 HTTP 메서드란?

  • 서버의 상태를 바꾸지 않는다(read-only)
  • GET, HEAD, OPTIONS

.
.
.

그래서 멱등성이 실용적 관점에서 왜 중요한데?

순수함수 같은 Idempotent APIs 때문인가?!

0개의 댓글