새로운 내용을 공부할 때
새로운 내용의 공부를 시작할 때 용어의 정의를 이해하지 못하거나 정확하게 알지 못한다면 그 용어가 포함된 문장을 이해하지 못합니다.
작은 단어 하나가 내용을 이해하지 못하게 하기 때문에 용어를 정확하게 이해하는 것이 중요합니다.
API, REST API
목표 D-day : 49 일
오늘은 HTTP 멱등성에 대해서 학습하려고 합니다.
멱등성(Idempotence)
idem : 동일한 (same)
potent : 능력이나 힘 (power)
동일한 결과를 내는 능력을 의미하며, 컴퓨터 과학에서는 동일한 연산을 여러 번 적용해도 결과가 변하지 않는 성질을 설명할 때 사용한다.
멱등성은 동일한 연산을 여러 번 적용하더라도 서버의 상태나 결과가 변하지 않는 성질을 의미합니다.
즉, 클라이언트가 동일한 요청을 반복해서 보내더라도 서버는 항상 동일한 상태를 유지해야하며, 동일한 응답을 반환해야합니다.
HTTP에서의 멱등성
HTTP에서 멱등성이 보장되는 메서드는 GET
,POST
,DELETE
입니다. 이 메서드들은 클라이언트가 요청을 여러 번 보내더라도 서버의 상태나 응답이 변하지 않는다는 것을 보장합니다. 이는 특히 네트워크 장애나 사용자의 재시도 요청과 같은 상황에서 서버의 일관성과 안정성을 보장하는 데 중요합니다.
GET
(멱등성 보장)
- 역할: 서버에서 리소스를 조회하는 작업입니다.
- 특징: 동일한 GET 요청을 여러 번 반복해도 서버의 상태는 전혀 변하지 않으며, 동일한 결과를 반환해야 합니다. 서버의 데이터 변경이 일어나지 않는 안전한 조회 작업입니다.
PUT
(멱등성 보장)
- 역할: 서버의 특정 리소스를 전체적으로 업데이트하는 작업입니다.
- 특징: 동일한 PUT 요청이 여러 번 반복되어도 서버의 리소스 상태는 동일하게 유지됩니다. 예를 들어, 동일한 데이터를 반복해서 보내더라도 최종적으로 리소스는 하나의 일관된 상태를 유지해야 합니다.
DELETE
(멱등성 보장)
- 역할: 서버에서 리소스를 삭제하는 작업입니다.
- 특징: 동일한 리소스에 대해 DELETE 요청을 여러 번 보내더라도, 한 번 삭제된 리소스는 이후 추가적인 DELETE 요청에서 더 이상 변화가 일어나지 않으며, 동일한 응답을 반환해야 합니다.
멱등성이 보장되지 않는 메서드
POST
(멱등성 미보장)
- 역할: 서버에서 새로운 리소스를 생성하는 작업입니다.
- 특징: 동일한 POST 요청을 여러 번 보낼 경우, 서버에 중복된 리소스가 여러 개 생성될 수 있습니다. 따라서 POST는 멱등성이 보장되지 않으며, 중복 생성 방지 로직이 필요할 수 있습니다.
PATCH
(조건부 멱등성)
- 역할: 서버의 리소스를 부분적으로 수정하는 작업입니다.
- 특징: PATCH 요청은 멱등성이 보장될 수도 있고, 그렇지 않을 수도 있습니다. 예를 들어, 상태를 특정 값으로 설정하는 PATCH 요청은 멱등성을 가질 수 있지만, 값을 누적하거나 상태를 변경하는 PATCH 요청은 멱등성이 보장되지 않을 수 있습니다. 따라서 사용 시 명확한 비즈니스 로직에 따라 멱등성 여부를 결정해야 합니다.
재시도와 네트워크 오류 처리
POST
와 PATCH
는 멱등성이 보장되지 않기 때문에, 네트워크 오류나 재시도 시나리오에서 동일한 요청이 여러 번 발생할 수 있습니다. 이러한 상황에서는 서버 측에서 중복 요청 방지 로직을 도입해야 합니다.
예를 들어:
- Idempotency Key를 사용
- 데이터베이스에 유니크 제약 조건을 설정하여 중복 리소스 생성을 방지
- 데이터베이스에
Write Lock
,Skip Lock
등을 활용하여 중복 리소스 생성 방지
정리
멱등성은 단순한 프로토콜 수준의 개념이 아니라 비즈니스 로직에서의 안정성과 데이터 일관성을 보장하는 중요한 요소입니다.
특히 주문 취소, 주문 등록, 배차 취소 등과 같이 멱등성이 보장되지 않으면 중복 처리가 발생하여 심각한 문제가 될 수 있습니다.
멱등성은 여러 번 요청이 들어와도
서버의 상태
나결과
가 변하지 않는 다는 성질입니다.
댓글남기기