HTTP 메소드와 멱등성(Idempotency)
멱등성은 연산을 여러 번 수행해도 결과가 변하지 않는 속성을 의미합니다.
HTTP 메소드의 멱등성은 클라이언트와 서버 간의 통신에서 안정성과 예측 가능성을 제공하기 위해 중요합니다. 멱등성은 네트워크 장애, 재시도 요청 상황에서 특히 유용합니다.
HTTP 메소드와 멱등성의 관계
HTTP 메소드 중 멱등성을 가지는 메소드와 가지지 않는 메소드는 다음과 같습니다:
멱등성을 가지는 메소드
-
GET
- 자원의 상태를 조회하는 데 사용됩니다.
- 요청을 여러 번 보내도 자원의 상태는 변경되지 않습니다.
- 예:
/users/123 → 사용자 ID 123에 대한 정보 반환.
-
HEAD
- GET과 동일한 방식으로 동작하지만, 응답 본문 없이 헤더 정보만 반환합니다.
- 요청을 여러 번 보내도 상태는 변경되지 않습니다.
-
PUT
- 자원을 생성하거나 완전히 업데이트합니다.
- 동일한 요청을 여러 번 보내도 결과는 동일합니다.
- 예:
/users/123 → 사용자 ID 123의 정보를 "name=John, age=30"으로 설정.
-
DELETE
- 자원을 삭제합니다.
- 동일한 요청을 여러 번 보내도 결과는 동일합니다(이미 삭제된 경우에도 에러 없이 처리 가능).
-
OPTIONS
- 서버가 지원하는 메소드나 옵션을 조회합니다.
- 상태를 변경하지 않으므로 멱등성을 가집니다.
멱등성을 가지지 않는 메소드
- POST
- 주로 새 자원을 생성하거나 서버에서 별도 처리를 수행합니다.
- 동일한 요청을 반복하면 새로운 자원이 계속 생성될 수 있으므로 멱등성이 없습니다.
- 예:
/users → 요청을 두 번 보내면 동일한 데이터로 여러 사용자 생성 가능.
멱등성이 필요한 이유
-
안정성
- 네트워크 오류, 클라이언트 오류 등으로 인해 동일한 요청을 재시도하더라도 서버 상태가 안정적으로 유지됩니다.
-
재시도 처리
- 클라이언트나 프록시가 요청을 재전송할 경우(예: 시간 초과, 연결 끊김), 멱등성은 결과의 일관성을 보장합니다.
-
캐싱
- 멱등성 메소드는 캐싱하기에 적합하며, 서버 부담을 줄이고 응답 속도를 높일 수 있습니다.
-
로깅 및 추적
- 멱등성을 보장하면 동일한 요청을 로그 및 모니터링할 때 데이터 무결성을 유지할 수 있습니다.
HTTP 메소드의 멱등성 활용 방법
1. GET 요청
- 자원 조회에만 사용하고, 서버 상태를 변경하는 로직은 포함하지 않도록 설계합니다.
2. PUT 요청
-
자원을 "대체"하는 작업에 사용하며, 요청 본문에서 자원의 전체 상태를 제공해야 합니다.
-
예:
PUT /users/123
Content-Type: application/json
{
"name": "Alice",
"age": 30
}
여러 번 호출해도 결과는 동일합니다.
3. DELETE 요청
- 삭제된 자원에 대해 재요청이 와도 에러 대신 성공 상태(예:
204 No Content)를 반환하도록 설계합니다.
4. POST 요청
- 멱등성을 보장할 수 없는 작업(새 자원 생성, 트랜잭션 처리 등)에 사용합니다.
- 클라이언트가 재시도할 경우, 고유 ID를 사용하거나 중복 요청을 방지하는 로직을 추가할 수 있습니다.
- 예: 클라이언트가 동일한
request_id를 포함해 요청하면 중복 요청을 방지.
예제: PUT과 POST의 차이
PUT 예제
PUT /users/123
Content-Type: application/json
{
"name": "Alice",
"age": 30
}
- 요청을 여러 번 보내도 사용자 ID 123의 상태는 동일하게 유지됩니다.
POST 예제
POST /users
Content-Type: application/json
{
"name": "Alice",
"age": 30
}
- 요청을 여러 번 보내면 ID가 다른 여러 사용자가 생성될 수 있습니다.
정리
- 멱등성은 네트워크 장애와 요청 재전송 상황에서 안정성과 일관성을 제공합니다.
- 멱등성을 보장하는 메소드는 GET, PUT, DELETE 등이 있으며, 설계 시 이 속성을 준수해야 합니다.
- POST는 멱등성이 없으므로 고유 ID 생성, 중복 요청 방지 등으로 보완할 수 있습니다.
추가 학습 자료