API 만들기
API 만들기HTTP 캐싱 추가

HTTP 캐싱 추가

GraphQL 서버에 대해 (더 전통적인 POST 메서드 대신) GET을 사용하여 쿼리를 실행하면, 표준 HTTP 캐싱을 활용하여 GraphQL 응답을 클라이언트 측이나 클라이언트와 서버 사이의 중간 단계(예: CDN)에서 캐시할 수 있습니다.

이는 퍼시스티드 쿼리에서는 자연스럽게 동작하며, 단일 엔드포인트 및 커스텀 엔드포인트에서는 엔드포인트에 파라미터 ?query={ GraphQL query }를 추가함으로써 동작시킬 수 있습니다.

설정은 캐시 컨트롤 목록을 통해 생성되며, 스키마 설정을 통해 엔드포인트에 제공됩니다.

GET을 통한 엔드포인트 실행

퍼시스티드 쿼리는 GraphQL 쿼리를 서버에 저장하므로 (즉, 요청 본문에 제공할 필요가 없으므로), 이미 GET으로 실행하기에 적합합니다.

반면, 단일 엔드포인트 및 커스텀 엔드포인트의 경우, 엔드포인트 URL에 추가된 파라미터 ?query=... 아래에서 쿼리를 제공해야 합니다.

예를 들어, 다음 GraphQL 쿼리는:

{
  posts {
    id
    title
    url
    author {
      id
      name
      url
    }
  }
}

...단일 엔드포인트에 대해 GET으로 다음과 같이 실행할 수 있습니다:

https://mysite.com/graphql/?query={ posts { id title url author { id name url } } }

max-age 자동 계산

응답의 max-age 값은 엔드포인트에 할당된 액세스 컨트롤 목록(스키마 설정을 통해)에서 자동으로 계산됩니다.

이 값은 요청된 쿼리 내 모든 필드 및 디렉티브에서 가장 낮은 max-age 값이거나, 다음 중 하나에 해당하는 경우 no-store가 됩니다:

  • 뮤테이션이 실행되는 경우
  • 어떤 필드 또는 디렉티브의 max-age 값이 0인 경우
  • 어떤 필드 또는 디렉티브에 대해 액세스 컨트롤 규칙이 사용자 상태를 확인해야 하는 경우 (이 경우, 응답은 사용자에게 특정되므로 캐시할 수 없습니다)

기본 max-age

특정 max-age가 설정되지 않은 필드는 스키마 설정에서 정의된 기본값을 사용합니다:

스키마 설정에서의 기본 max-age 값

설정되지 않은 경우, 설정 페이지의 「Cache Control」 탭에서 정의된 기본 max-age 값이 사용됩니다. 이 값은 86400초이며, 설정에서 변경할 수 있습니다.

예시

User 타입의 필드에 대해 다음과 같은 max-age 값 설정이 있다고 가정합니다:

  • name => 600
  • url => 30

이 경우, 이 쿼리에 대한 응답의 max-age 값은 86400으로 설정됩니다 (displayName이나 email 모두 설정되지 않았으므로 기본값이 사용됩니다):

query {
  users {
    displayName
    email
  }
}

이 쿼리에 대한 응답의 max-age 값은 30으로 설정됩니다 (설정된 모든 필드 중 가장 낮은 값인 url에 해당합니다):

query {
  user(by: {id: 1}) {
    name
    url
  }
}

이 쿼리에 대한 응답의 max-age 값은 no-store로 설정됩니다 (필드 me가 사용자 상태를 필요로 하기 때문입니다):

query {
  me {
    name
    url
  }
}

이 쿼리에 대한 응답의 max-age 값은 no-store로 설정됩니다 (뮤테이션을 실행하기 때문입니다):

mutation {
  createPost {
    id
  }
}

모든 캐시 컨트롤 목록에 접근

플러그인 메뉴에서 「Cache Control Lists」를 클릭하면, 생성된 모든 캐시 컨트롤 목록의 목록이 표시됩니다:

관리 화면의 캐시 컨트롤 목록
관리 화면의 캐시 컨트롤 목록

새 캐시 컨트롤 목록 생성

「Add New Cache Control List」 버튼을 클릭하여 WordPress 편집기를 엽니다:

캐시 컨트롤 목록 생성

캐시 컨트롤 목록에 제목을 지정하고, 필드와 디렉티브가 포함된 항목을 추가하고, 해당 max-age 값을 설정합니다:

캐시 컨트롤 목록 생성

준비가 되면 Publish 버튼을 클릭합니다. 그러면 새 캐시 컨트롤 목록이 스키마 설정에서 사용 가능해집니다.

캐시 컨트롤 항목

모든 캐시 컨트롤 목록에는 하나 이상의 항목이 포함되어 있으며, 각 항목에는 다음 요소가 있습니다:

  • 캐싱을 설정할 필드
  • 캐싱을 설정할 디렉티브
  • 해당 max-age

액세스 컨트롤 항목

인터페이스에서 필드 선택

타입의 필드 외에도 인터페이스에서 필드를 선택할 수도 있습니다. 이 경우, max-age 값은 해당 인터페이스를 구현하는 모든 타입에서 해당 필드를 쿼리할 때 적용됩니다.

인터페이스에서 필드 선택
인터페이스에서 필드 선택

캐시 컨트롤 목록 설명

문서 설정 패널의 「Excerpt」 필드를 사용하여 캐시 컨트롤 목록에 설명을 추가합니다.

자세한 내용은 가이드 「API에 설명 추가」를 참조하세요.

캐시 컨트롤 목록 사용

캐시 컨트롤 목록을 생성한 후, 해당 스키마 설정을 편집하고 「Cache Control Lists」 블록 아래 목록에서 ACL을 선택함으로써, 커스텀 엔드포인트 또는 퍼시스티드 쿼리가 이를 사용하도록 할 수 있습니다.

스키마 설정에서 캐시 컨트롤 목록 선택

설정을 커스터마이즈하지 않는 경우, 설정 페이지의 「Cache Control」 탭에서 정의된 기본 캐시 컨트롤 목록이 사용됩니다:

설정 페이지에서 기본 캐시 컨트롤 목록 선택