캐싱
캐싱Cache Control

Cache Control

Included in the “Power Extensions” bundle

GET 메서드를 사용하여 GraphQL 서버에 쿼리를 실행할 때, 표준 HTTP 캐싱을 활용하면 GraphQL 응답을 클라이언트 측 또는 클라이언트와 서버 사이의 중간 단계(CDN 등)에서 캐시할 수 있습니다.

이는 persisted queries에 대해 자연스럽게 작동하며, 단일 엔드포인트와 커스텀 엔드포인트에 대해서는 엔드포인트에 ?query={ GraphQL query } 파라미터를 추가함으로써 작동합니다.

설명

HTTP 캐싱은 응답에 max-age 값이 포함된 Cache-Control 헤더를 전송하여 응답을 얼마나 오래 캐시해야 하는지를 나타내는 방식으로 작동합니다.

Cache Control 확장 기능은 Cache Control List를 제공하며, 필드와 디렉티브에 대한 커스텀 max-age 값을 정의할 수 있습니다. 따라서 서로 다른 필드와 디렉티브 조합을 포함하는 쿼리는 각각 다른 max-age 값을 생성합니다.

응답의 max-age 값은 GraphQL 엔진에 의해 자동으로 계산됩니다. 그 값은 요청된 쿼리의 모든 필드와 디렉티브 중에서 가장 낮은 max-age(Cache Control List에 정의된 값)가 됩니다. 단, 다음 중 하나에 해당하는 경우에는 no-store가 됩니다:

  • 뮤테이션이 실행된 경우
  • 어떤 필드 또는 디렉티브의 max-age0인 경우
  • 어떤 필드 또는 디렉티브에 대해 Access Control 규칙이 사용자 상태를 확인해야 하는 경우(이 경우 응답은 사용자별로 다르므로 캐시할 수 없습니다)

캐시 컨트롤 정책 정의

Cache Control List

사이트에 새로운 "Cache Control List" 커스텀 포스트 타입이 추가됩니다. 메뉴의 "Cache Control Lists" 페이지에서 항목을 탐색하고, "Add New Cache Control List"를 클릭하여 편집기에서 새 항목을 추가할 수 있습니다.

Cache Control Lists
Cache Control Lists

Cache Control List 편집기

각 Cache Control List에는 하나 이상의 항목이 포함되어 있으며, 각 항목은 다음 요소로 구성됩니다:

  • GraphQL 쿼리에 포함될 경우 선택한 max-age가 적용되는 필드와 디렉티브
  • max-age

Cache Control 항목

Cache Control List를 생성한 후, 해당 스키마 구성을 편집하고 "Cache Control Lists" 블록 아래의 목록에서 항목을 선택하여 엔드포인트가 이를 사용하도록 설정할 수 있습니다.

스키마 구성에서 Cache Control List 선택