HTTP 멱등성

이건선·2023년 7월 7일
0

해결

목록 보기
46/48
post-custom-banner

HTTP 메서드의 멱등성

HTTP 메서드의 멱등성(idempotence)이란 해당 메서드를 한 번 실행하든 여러 번 실행하든 결과가 동일하게 유지되는 특성을 말합니다. 다시 말해, 서버의 상태는 요청을 한 번만 수행한 경우와 여러 번 수행한 경우가 동일하게 보장됩니다.

HTTP 메서드 중에서 다음 메서드들은 멱등성을 가지고 있습니다:

  1. GET: 서버의 자원을 요청합니다. 이 요청은 서버의 상태를 변경시키지 않아야 하므로 멱등성을 가집니다.

  2. PUT: 서버의 특정 자원을 새로운 데이터로 업데이트합니다. 같은 데이터로 동일한 자원에 대해 이 작업을 여러 번 수행하더라도 최종 결과는 같으므로 멱등성을 가집니다.

  3. DELETE: 서버의 특정 자원을 제거합니다. 같은 자원을 여러 번 삭제하려 해도, 첫 번째 삭제 이후에는 아무런 효과가 없으므로 멱등성을 가집니다.

  4. HEAD: GET과 유사하지만, 실제 데이터 대신 헤더 정보만 반환합니다. 따라서 멱등성을 가집니다.

  5. OPTIONS: 서버에서 사용 가능한 메서드 목록을 조회합니다. 이는 서버의 상태를 변경하지 않으므로 멱등성을 가집니다.

그러나, POST 메서드는 멱등성을 가지고 있지 않습니다. POST는 보통 새로운 리소스를 생성하거나, 서버의 상태를 변화시키는 데 사용되며, 이러한 작업은 여러 번 수행되면 서버의 상태도 그만큼 변하게 됩니다. 따라서 POST는 요청을 여러 번 보내면 서버의 상태가 다르게 변할 수 있으므로, 멱등성이 없습니다.

'PUT'과 'PATCH'

HTTP 메서드의 'PUT'과 'PATCH'는 모두 리소스를 업데이트하는 데 사용되지만, 사용 방식과 성질에서 몇 가지 중요한 차이점이 있습니다.

  1. 멱등성(Idempotence): PUT 메서드는 멱등(idempotent)입니다. 이는 PUT 요청을 한 번 보내는 것과 여러 번 보내는 것이 동일한 결과를 초래한다는 것을 의미합니다. 즉, 같은 요청을 반복적으로 보내도 서버의 최종 상태는 동일합니다. 반면에, PATCH 메서드는 일반적으로 멱등성을 가지지 않습니다. 즉, 동일한 PATCH 요청을 여러 번 보내면 다른 결과가 나올 수 있습니다.

  2. 전체 업데이트 vs 부분 업데이트: PUT 메서드는 대상 리소스의 전체를 업데이트합니다. 요청 본문에 전체 리소스 상태를 제공해야 하며, 제공되지 않은 필드는 없는 것으로 간주하고 삭제되거나 초기화될 수 있습니다. 반면에, PATCH 메서드는 리소스의 일부만 업데이트하는 데 사용됩니다. 요청 본문은 변경하려는 필드만 포함하며, 제공되지 않은 필드는 변경되지 않습니다.

1. PUT 메서드: 멱등성을 가짐.

예를 들어, 우리가 특정 유저의 정보를 갱신하는 PUT 요청을 다음과 같이 만들어보겠습니다.

PUT /users/123 HTTP/1.1
Host: example.com
Content-Type: application/json

{
  "username": "new_username",
  "email": "new_email@example.com"
}

이 요청은 id123인 유저의 usernameemail 정보를 갱신하라는 의미입니다. 이 PUT 요청을 한 번 보내든, 두 번 보내든 결과는 동일합니다. 즉, usernameemail이 갱신되어 new_usernamenew_email@example.com으로 설정됩니다. 이 같은 상황에서는 PUT 메서드가 멱등성을 가지고 있음을 알 수 있습니다.

2. PATCH 메서드: 상황에 따라 멱등성을 가지지 않을 수 있음.

예를 들어, 유저의 방문 횟수를 증가시키는 PATCH 요청을 다음과 같이 만들어보겠습니다.

PATCH /users/123 HTTP/1.1
Host: example.com
Content-Type: application/json

{
  "visitCount": "+1"
}

이 요청은 id123인 유저의 visitCount를 1 증가시키라는 의미입니다. 이 요청을 한 번 보내면 visitCount가 1 증가하지만, 같은 요청을 다시 보내면 visitCount가 다시 1 증가합니다. 따라서 결과는 요청을 보낸 횟수에 따라 다르며, 이런 상황에서 PATCH 메서드는 멱등성을 가지지 않습니다.

profile
멋지게 기록하자
post-custom-banner

0개의 댓글