Get-and-Set
“Get-and-Set"은 전통적인 CRUD(Create, Read, Update, Delete) 방식을 개선한 REST API 디자인 패턴으로, 리소스의 존재 여부와 관계없이 단순화된 작업 흐름을 제공한다.
기본 개념
두 가지 핵심 연산
- Get: 리소스의 현재 상태 조회 (CRUD의 Read와 동일)
- Set:
- Create/Update: 리소스 존재 여부와 무관하게 값을 설정 (Last-Write-Wins 정책)
- Delete:
null
값을 전달하여 리소스 삭제
동작 원리
CRUD와의 차이점
기능 | CRUD API | Get-and-Set API |
---|---|---|
생성/수정 | POST/PUT/PATCH 분리 | 단일 Set 연산으로 통합 |
삭제 | DELETE 메서드 사용 | Set(null)으로 처리 |
동시성 제어 | 복잡한 버전 관리 필요 | Last-Write-Wins 기본 적용 |
에러 처리 | 상태 코드 404/409 등 다양 | 단순화된 200/400/500 |
사용 사례 | 복잡한 비즈니스 로직 | 단순 리소스 관리 시스템 |
작동 원리 상세
Set 연산의 3가지 시나리오
- 리소스 없음 + 값 전달: 새 리소스 생성 (
201 Created
) - 리소스 존재 + 값 전달: 기존 리소스 덮어쓰기 (
200 OK
) - 리소스 존재 + null 전달: 리소스 삭제 (
204 No Content
)
Last-Write-Wins 동시성 제어
타임스탬프 기반: 최종 쓰기 요청이 우선 적용
옵션 반환 값:
구현 예시 (Node.js/Express)
|
|
장단점 분석
장점
- 단순한 API 계약: 클라이언트가 2개의 엔드포인트만 이해하면 됨
- 원자적 연산: 한 번의 요청으로 생성/수정/삭제 가능
- 네트워크 효율성: 요청 횟수 감소 (CRUD 대비 33% 절약)
- 충돌 최소화: Last-Write-Wins로 복잡한 충돌 해결 불필요
단점
- 부분 업데이트 불가: 전체 리소스 덮어쓰기만 가능
- 감사 추적 어려움: 상세한 변경 이력 관리가 복잡함
- 낙관적 동시성 제한: 동시 수정 시 데이터 손실 가능성
적합한 사용 사례
- 분산 캐시 시스템 (Redis, Memcached)
- 파일 스토리지 서비스 (S3-like APIs)
- 실시간 설정 관리 (플러그인/마이크로서비스 구성)
- 검색 엔진 인덱싱 (Elasticsearch 문서 업데이트)
고급 활용 전략
조건부 Set 구현
- ETag/버전 번호를 사용한 조건부 업데이트
배치 Set 연산
이벤트 소싱 연계
용어 정리
용어 | 설명 |
---|---|