멱등성(Idempotency)
- 어떤 연산을 여러 번 실행해도 결과가 같음을 보장하는 성질을 말한다.
- 쉽게 말해, "한 번 실행한 것과 여러 번 실행한 것이 같은 효과를 낸다"는 뜻
- "책상이 어지럽혀져 있을 때 정리하는 것" → 멱등하지 않음. (처음과 나중 상태가 다름.)
- "이미 정리된 책상을 다시 정리하는 것" → 멱등함. (반복해도 상태가 변하지 않음.)
예시 1: 전등 스위치
- 켜져 있는 전등을 다시 "켜기" 스위치를 눌러도 상태는 변하지 않는다.
- 반대로, 꺼져 있는 전등을 "끄기" 스위치를 누른다고 상태가 변하지 않는다.
- 따라서, "켜기"나 "끄기" 연산은 멱등하다.
예시 2: 문 잠그기
- 문이 이미 잠겨 있다면, "잠그기" 동작을 여러 번 해도 결과는 같다.
- 따라서, "잠그기" 연산은 멱등하다.
예시 3: 웹 요청
- GET 요청: 서버에서 데이터를 조회할 때 사용하는 요청했을 때 몇 번 요청해도 데이터 조회 결과는 같으므로 멱등하다.
- DELETE 요청: 같은 리소스를 두 번 삭제 요청해도 첫 번째 요청 이후로 이미 삭제된 상태이므로 멱등하다.
특징
- 연산을 여러 번 반복해도 상태나 결과가 변하지 않는다.
- 변화가 없는 상태가 연산의 결과로 나타닌다.
멱등성이 중요한 이유
- 안정성 보장: 네트워크 문제로 요청이 여러 번 전송되더라도 같은 결과를 보장하기 때문에 안정적인 시스템을 만들 수 있다.
- 중복 요청 허용: 사용자가 같은 요청을 실수로 여러 번 보내도 시스템이 안전하게 처리할 수 있다.
- 장애 복구: 시스템이 중간에 실패하더라도 같은 작업을 반복 실행해서 원래의 결과를 얻을 수 있다.
HTTP 메서드와 멱등성
HTTP 메서드 | 멱등성 여부 | 설명 |
GET | ✅ 멱등성 | 데이터를 가져오는 작업은 상태를 변경하지 않음. |
PUT | ✅ 멱등성 | 데이터를 업데이트. 같은 데이터로 여러 번 업데이트 가능. |
DELETE | ✅ 멱등성 | 이미 삭제된 리소스를 다시 삭제 요청해도 상태가 같음. |
POST | ❌ 비멱등성 | 새로운 리소스를 생성하므로 여러 번 요청하면 결과가 달라짐. |
PATCH |
❌ 비멱등성 | 리소스의 일부를 업데이트. 데이터와 요청에 따라 멱등성 여부가 달라질 수 있음. |
HEAD | ✅ 멱등성 | 리소스의 메타데이터(헤더 정보)만 조회. 본문은 반환하지 않음. |
OPTIONS | ✅ 멱등성 | 서버가 지원하는 메서드와 통신 옵션을 조회. 상태를 변경하지 않음. |
TRACE | ✅ 멱등성 | 클라이언트와 서버 간의 요청 경로를 테스트. 요청 본문을 그대로 반환하므로 상태 변화 없음. |
CONNECT |
❌ 비멱등성 | 클라이언트와 서버 간에 터널링을 생성. 주로 HTTPS를 통해 TCP 연결을 설정하는 데 사용. (웹 프록시 연결 등.) |
'Network' 카테고리의 다른 글
[Network] Stateful vs Stateless (2) | 2024.11.24 |
---|---|
[Network] 프로토콜과 OSI 7 Layer (0) | 2024.11.24 |
REST API 란? (0) | 2024.10.21 |
[Http] 캐시와 조건부 요청 (0) | 2024.04.28 |
[Http] 일반 헤더 (1) | 2024.04.28 |