Spring HTTP 2

김태균·2025년 3월 18일

HTTP Method 속성

📚 HTTP Method는 안전성(Safe), 멱등성(Idempotent), 캐시가능성(Cacheable) 속성을 가지고 있다. 각각의 속성이 무엇인지와 어떤 HTTP Method가 해당 특성을 가지고 있는지 알아보자.

HTTP Method별 속성표

  • Optional은 Java의 Optional과 같이 있을 수 있다라는 말과 같다.
  1. 안전성(Safe)

    • GET 메소드(조회)는 안전하다.
      • 저장된 데이터를 변환하지 않는다.
    • POST, DELETE, PUT, PATCH는 안전하지 않다.
      • 데이터를 생성, 수정, 삭제한다.
  2. 멱등성(Idempotent)

    • 한번을 호출하거나 수천번을 호출하거나 항상 결과는 같다.
      1. GET → 같은 결과가 계속 조회된다.

      2. PUT → 수정해서 대체된 후의 결과는 계속 같다.

      3. DELETE → 같은 요청을 여러번해도 삭제된 결과는 같다.

      4. POST → 멱등성을 보장하지 않는다.

        ex) 계좌 송금을 두번한다면?, 게시판 글쓰기, 회원가입

멱등성(Idempotency)은 연산을 여러 번 수행해도 결과가 달라지지 않는 성질을 말함.

예를 들어, 너가 전등 스위치를 누르면 불이 켜진다고 하자.
근데 이미 불이 켜져 있을 때 또 눌러도 불이 더 켜지진 않지?
이게 바로 멱등성임. 여러 번 해도 같은 결과가 나오는 거.

개발에서 멱등성이 중요한 이유
API나 데이터베이스 작업할 때, 같은 요청을 여러 번 보내도 결과가 변하면 안 되는 경우가 있음.

예제 1: DELETE /user/123
사용자 123번을 삭제하는 요청.
한 번 보내든, 열 번 보내든 결과는 "사용자가 삭제됨" → 멱등성 O

예제 2: POST /order
주문을 생성하는 요청.
같은 요청을 두 번 보내면 주문이 두 개 생김 → 멱등성 X
즉, 멱등성 있는 연산은 같은 요청을 여러 번 해도 결과가 변하지 않음.
주로 GET, PUT, DELETE는 멱등성이 있고, POST는 멱등성이 없는 경우가 많음.

  • 요청이 실패한 경우 재시도 하기위해 필요하다.
    1. 항상 결과가 같다면 마음껏 재시도 해도된다.

    2. 만약 멱등하지 않다면, 중복 요청을 보내서는 안된다.

    3. 복구 매커니즘에 사용한다.

      ex) 요청 실패시 서버에서 자동으로 재시도

      리소스 조회(GET Method) 재요청 중간에 변경된다면?

    • 재요청 중간에 리소스가 변경되는것은 멱등성으로 고려하지 않는다.

ex) 도서관 책 재고 조회(실시간으로 대여 혹은 판매됨)

  1. 캐시가능성(Cacheable)
    • 재사용을 위해 요청에 대한 응답을 저장할 수 있는가?
      1. GET, HEAD, POST 메소드는 캐시가 가능하다.

      2. 일반적으로 GET, HEAD 정도만 캐시로 사용한다.

        ex) 변경 가능성이 적은 정적자원(HTML, CSS, IMAGE, JS 등)을 주로 캐싱한다.

💡 **캐시(Cache)란?** 클라이언트가 서버에 한번 요청했던 데이터에 대해서 매번 요청할 때 마다 다시 전송할 필요가 없도록 웹 브라우저가 임시적으로 데이터를 보관하고 있는 장소이다.
profile
코딩 공부하는 닝겐

0개의 댓글