피드로 돌아가기
Dev.toBackend
원문 읽기
ETag와 Conditional Request 도입을 통한 네트워크 비용 및 직렬화 부하 제거
ETags and Conditional Requests: Stop Sending the Same API Response Twice
AI 요약
Context
데이터 변경 없는 반복 요청에도 전체 Payload를 재전송하는 API 구조로 인한 대역폭 낭비 발생. 매 요청마다 발생하는 JSON Serialization 및 데이터베이스 읽기 비용이 시스템 전체의 성능 병목으로 작용하는 상황.
Technical Solution
- Cache-Control 및 ETag 헤더를 조합하여 클라이언트 사이드 캐싱과 서버 사이드 재검증 구조 설계
- Response Body의 해시값을 기반으로 ETag를 생성하여 데이터 변경 여부를 판별하는 Fingerprint 메커니즘 구현
- If-None-Match 헤더를 통한 304 Not Modified 응답 처리로 Payload 전송 및 직렬화 단계 생략
- Version Column 또는 Updated_at 타임스탬프를 활용한 ETag 생성 방식으로 DB Full Read 부하 최소화
- If-Match 헤더를 이용한 Optimistic Concurrency 제어로 데이터 덮어쓰기 방지 및 412 Precondition Failed 처리
실천 포인트
- 사용자별 데이터에는 'private' 지시어를 설정하여 공유 프록시 캐싱 방지 - 데이터 일관성이 중요한 리소스는 'no-cache' 또는 'max-age=0, must-revalidate' 설정 검토 - DB Full Read를 피하기 위해 메타데이터 기반의 Lightweight ETag 생성 로직 적용 - Update API 설계 시 If-Match 헤더 검증 로직을 추가하여 Race Condition 방어