Kontent.ai & Astro
Kontent.ai는 AI 기능이 지원되는 구조화되고 모듈화된 방식으로 콘텐츠를 관리할 수 있는 헤드리스 CMS입니다.
Astro와 통합
섹션 제목: Astro와 통합이 섹션에서는 Kontent.ai TypeScript SDK를 사용하여 Kontent.ai 프로젝트를 Astro 애플리케이션에 연결합니다.
전제조건
섹션 제목: 전제조건시작하려면 다음이 필요합니다.
-
Kontent.ai 프로젝트 - 아직 Kontent.ai 계정이 없다면 무료 회원가입 후 새 프로젝트를 생성하세요.
-
Delivery API keys - 게시된 콘텐츠에는 Environment ID가 필요하고 초안을 가져오려면 Preview API key가 필요합니다 (선택 사항). 두 키 모두 Kontent.ai의 Environment Settings -> API keys 탭에 있습니다.
자격 증명 설정
섹션 제목: 자격 증명 설정Astro에 Kontent.ai 자격 증명을 추가하려면 다음 변수를 사용하여 프로젝트 루트에 .env
파일을 만듭니다.
KONTENT_ENVIRONMENT_ID=YOUR_ENVIRONMENT_IDKONTENT_PREVIEW_API_KEY=YOUR_PREVIEW_API_KEY
이제 이러한 환경 변수를 Astro 프로젝트에서 사용할 수 있습니다.
이러한 환경 변수를 위한 TypeScript IntelliSense를 얻으려면 src/
디렉터리에 새 env.d.ts
파일을 만들고 다음과 같이 ImportMetaEnv
를 구성할 수 있습니다.
interface ImportMetaEnv { readonly KONTENT_ENVIRONMENT_ID: string; readonly KONTENT_PREVIEW_API_KEY: string;}
이제 루트 디렉터리에 다음과 같은 새 파일이 포함되어야 합니다.
디렉터리src/
- env.d.ts
- .env
- astro.config.mjs
- package.json
종속성 설치
섹션 제목: 종속성 설치Astro를 Kontent.ai 프로젝트와 연결하려면 Kontent.ai TypeScript SDK를 설치하세요.
npm install @kontent-ai/delivery-sdk
pnpm add @kontent-ai/delivery-sdk
yarn add @kontent-ai/delivery-sdk
다음으로 Astro 프로젝트의 src/lib/
디렉터리에 kontent.ts
라는 새 파일을 만듭니다.
import { createDeliveryClient } from "@kontent-ai/delivery-sdk";
export const deliveryClient = createDeliveryClient({ environmentId: import.meta.env.KONTENT_ENVIRONMENT_ID, previewApiKey: import.meta.env.KONTENT_PREVIEW_API_KEY,});
Astro에서 환경 변수 가져오기에 대해 자세히 알아보세요.
이 구현은 .env
파일의 자격 증명을 사용하여 새로운 DeliveryClient
객체를 생성합니다.
previewApiKey
는 선택사항입니다. 사용하면 워크플로의 상태에 관계없이 콘텐츠 항목의 최신 버전을 반환하도록 Delivery API 엔드포인트에 대한 각 쿼리를 구성할 수 있습니다. 그렇지 않으면 게시된 항목만 반환됩니다.
마지막으로 Astro 프로젝트의 루트 디렉터리에는 이제 다음과 같은 새 파일이 포함되어야 합니다.
디렉터리src/
디렉터리lib/
- kontent.ts
- env.d.ts
- .env
- astro.config.mjs
- package.json
데이터 가져오기
섹션 제목: 데이터 가져오기이제 DeliveryClient
를 모든 컴포넌트에서 사용할 수 있습니다. 콘텐츠를 가져오려면 DeliveryClient
와 메서드 체이닝을 사용하여 원하는 항목을 정의하세요. 이 예시에서는 블로그 게시물의 기본 가져오기를 보여주고 제목을 목록으로 렌더링합니다.
---import { deliveryClient } from "../lib/kontent";
const blogPosts = await deliveryClient .items() .type("blogPost") .toPromise()---<html lang="en"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width" /> <title>Astro</title> </head> <body> <ul> {blogPosts.data.items.map(blogPost => ( <li>{blogPost.elements.title.value}</li> ))} </ul> </body></html>