profound-logoProfound CMS
⌘K
Admin
Theme
DocsTutorialBlogPhilosophy
DocsTutorialBlogPhilosophy

Hybrid

Collection of Pages with Components구성 요소 유형Setup server sent events (SSE) content refetch어드민 패널 프록시 설정템플릿 빌더에서 스크립팅Project Scaffolding미디어 라이브러리

Headless

Quick startjson과 Claude 코드컴포넌트 Zod 가져오기

REST API

REST API 개요get웹사이트를 CMS API에 연결하기get경로 가져오기get라우트 가져오기get블록 가져오기getCEL 캐시가 포함된 블록 가져오기get블록 생성 가져오기get컴포넌트 가져오기getGET /components/{name}get데이터셋 스키마 이름 가져오기getGET /content-changes (SSE)patchPATCH /dataset/{schema_name}post게시물 번역patch번역 패치get사용량 가져오기postPOST /csvpatchPATCH /csv
All Systems Operational
Powered Byprofound-logo
Theme

컴포넌트 Zod 가져오기

스크립트를 사용해 컴파일 타임에 컴포넌트의 Zod 설명을 가져옵니다

이 기능을 사용하면 구성 요소의 설명을 타입 안전한 "Zod" 설명 형태로 가져올 수 있으며, 이는 콘텐츠에 대해 TS 우선 스키마 검증과 정적 타입 추론을 제공합니다.

https://zod.dev

Zod 스키마를 가져오기 위해, 몇 가지 의존성을 로드하고 cms-renderer의 유틸리티를 사용하는 스크립트를 만들 것입니다.

프로젝트 구조부터 살펴보겠습니다

apps/
 web/
 app/
   page.tsx
 scripts/
   generate-schemas.ts // 스크립트가 위치하는 곳입니다

이제 generated-schema.ts 파일을 수정하겠습니다

import { fetchAllCustomSchemaFields, saveZodSchemaCode } from 'cms-renderer/lib/custom-schemas';
import { cmsConfig } from '../lib/cms-config'; // 내 설정을 가져옵니다

async function main() {
  const { cmsUrl, websiteId, apiKey } = cmsConfig;

  if (!cmsUrl) {
    throw new Error(
      '[generate-schemas] NEXT_PUBLIC_CMS_API_URL이 설정되어 있지 않습니다. 환경 변수 또는 .env 파일에 설정하세요.'
    );
  }
  if (!websiteId) {
    throw new Error(
      '[generate-schemas] NEXT_PUBLIC_PROFOUND_WEBSITE_ID가 설정되어 있지 않습니다. 환경 변수 또는 .env 파일에 설정하세요.'
    );
  }
  if (!apiKey) {
    throw new Error(
      '[generate-schemas] PROFOUND_API_KEY가 설정되어 있지 않습니다. 환경 변수 또는 .env 파일에 설정하세요.'
    );
  }

  const schemas = await fetchAllCustomSchemaFields({ cmsUrl, websiteId, apiKey });

  if (schemas.length === 0) {
    throw new Error(
      '[generate-schemas] API에서 반환된 컴포넌트가 없습니다. PROFOUND_API_KEY가 유효하며 올바른 웹사이트를 가리키는지 확인하세요.'
    );
  }

  await saveZodSchemaCode(schemas, './generated/cms-schemas.ts');

  console.log('[generate-schemas] 완료.');
}

main().catch((err) => {
  console.error('[generate-schemas] 실패:', err);
  process.exit(1);
});

당신의 CmsConfig는 다음과 같아야 합니다

export const cmsConfig = {
  cmsUrl: process.env.NEXT_PUBLIC_CMS_API_URL,
  apiKey: process.env.CMS_API_KEY,
  websiteId: '...',
};

package.json 내부에서 스크립트를 실행하는 방법과 몇 가지 의존성을 정의합니다

참고: tsconfig가 없다면 --tsconfig 플래그와 그 값을 제거하면 됩니다

{
  "name": "web",
  "version": "0.1.0",
  "type": "module",
  "private": true,
  "scripts": {
    "generate-schemas": "tsx --tsconfig tsconfig.json scripts/generate-schemas.ts",
    "...": "..."
  },
  "dependencies": {
    "cms-renderer": "0.3.1",
    "zod": "^4.3.6",
    "...": "..."
  },
  "devDependencies": {
    "tsx": "^4.21.0",
 "object-hash": "^3.0.0",
    "...": "..."
  }
}

이제 다음 명령을 실행하면

$ bun run generate-schemas
tsx --tsconfig tsconfig.json scripts/generate-schemas.ts
[generate-schemas] 완료.

비슷한 출력이 나타나고, 프로젝트 구조에 새 파일이 생성된 것을 확인할 수 있습니다

apps/
 web/
 app/
   page.tsx
 scripts/
   generated-schema.ts // 스크립트가 위치하는 곳입니다
 generated/
   cms-schema.ts // 생성된 Zod 스키마

파일 안을 살펴보며 스키마가 어떻게 생겼는지 확인할 수 있습니다. 이 파일을 업데이트하려면 bun run generate-schemas 명령을 다시 실행해야 하며, 이를 dev나 build 워크플로에 연결할 수 있습니다.

그런 다음 이러한 Zod 객체를 다음과 같이 page.tsx 파일로 가져올 수 있습니다

import type { PetFoodPost, SiteConfig } from '@/generated/cms-schemas';
import { petFoodPostSchema } from '@/generated/cms-schemas';

// 객체를 타입 안전하게 파싱하려면 petFoodPostSchema.parse(obj)를 호출하세요

관리자 패널에서 컴포넌트를 업데이트하고 다시 스키마를 가져와 손쉽게 개발할 수 있습니다

Continue Reading
Previous‹json과 Claude 코드