피드로 돌아가기
ETags and Conditional Requests: Stop Sending the Same API Response Twice
Dev.toDev.to
Backend

ETag와 Conditional Request 도입을 통한 네트워크 비용 및 직렬화 부하 제거

ETags and Conditional Requests: Stop Sending the Same API Response Twice

Mean2026년 6월 5일5intermediate

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 방어

원문 읽기