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

웹사이트를 CMS API에 연결하기

웹사이트를 CMS API에 연결하세요

CMS API를 사용하면 웹사이트가 Profound CMS에서 게시된 콘텐츠를 가져오고 렌더링할 수 있습니다. 이를 활용하여 문서 페이지, 마케팅 페이지, 블로그, 도움말 센터 등 콘텐츠 중심의 다양한 경험을 구현할 수 있습니다.

일반적인 통합은 세 부분으로 구성됩니다:

  1. CMS 연결 구성하기
  2. 게시된 콘텐츠 가져오기
  3. 애플리케이션에서 콘텐츠 렌더링하기

구성

애플리케이션을 CMS에 연결하려면 CMS API URL, 웹사이트 ID, API 키를 제공해야 합니다.

const cmsConfig = {
  cmsUrl: 'https://cms.dev.tryprofoun.com',
  websiteId: 'your-website-id',
  apiKey: process.env.PROFOUND_API_KEY,
};

환경에 따라 달라지는 값은 환경 변수로 관리하세요:

NEXT_PUBLIC_CMS_API_URL=https://cms.dev.tryprofound.com
NEXT_PUBLIC_WEBSITE_ID=your-website-id
PROFOUND_API_KEY=your-api-key

비공개 API 키를 클라이언트 측 코드에 노출하지 마세요. API 키는 서버, 빌드 프로세스, 또는 백엔드 라우트에서만 사용해야 합니다.

콘텐츠 가져오기

CMS의 콘텐츠는 스키마별로 구성됩니다. 예를 들어 프로젝트에는 post, category, page, section과 같은 스키마가 있을 수 있습니다.

스키마 이름을 사용하여 콘텐츠를 가져오세요:

const posts = await cms.schema('post').fetchAll();

ID로 단일 문서를 가져오려면:

const post = await cms.schema('post').fetchSingleById('document-id');

로컬라이즈된 콘텐츠를 가져오려면 스키마의 번역본을 요청하세요:

const frenchPost = await cms
  .schema('post')
  .translation('fr')
  .fetchSingleById('document-id');

라우트 렌더링

CMS에서 관리하는 페이지를 사용하는 웹사이트의 경우, 현재 URL 경로를 기반으로 콘텐츠를 가져올 수 있습니다.

const route = await cms.route.getByPath({
  websiteId: 'your-website-id',
  path: '/docs/getting-started',
});

라우트 응답은 페이지와 렌더링해야 할 블록을 식별합니다. 애플리케이션은 해당 블록을 가져와서 자체 컴포넌트로 렌더링할 수 있습니다.

const blocks = await cms.block.getByIds({
  websiteId: 'your-website-id',
  ids: route.blockIds,
});

예시: 문서 페이지 렌더링

async function getDocsPage(path: string) {
  const route = await cms.route.getByPath({
    websiteId: process.env.WEBSITE_ID,
    path,
  });

  const blocks = await cms.block.getByIds({
    websiteId: process.env.WEBSITE_ID,
    ids: route.blockIds,
  });

  return {
    title: route.label,
    path: route.path,
    blocks,
  };
}

반환된 블록을 사용하여 애플리케이션의 컴포넌트 시스템으로 페이지를 렌더링할 수 있습니다.

캐싱

게시된 CMS 콘텐츠는 캐싱해도 안전합니다. 대부분의 웹사이트에서는 API 응답을 짧은 기간 동안 캐싱하고 콘텐츠가 변경될 때 재검증하세요.

일반적인 설정은 다음과 같습니다:

const content = await cache(
  () => cms.schema('post').fetchAll(),
  {
    revalidate: 60,
    tags: ['cms-posts'],
  }
);

권장 캐시 동작:

  • 게시된 읽기 결과를 캐시하세요.
  • 자주 업데이트되는 콘텐츠에는 짧은 캐시 기간을 사용하세요.
  • 프레임워크가 온디맨드 무효화를 지원한다면 캐시 태그를 활용하세요.
  • 미리보기 또는 초안 콘텐츠는 캐싱하지 마세요.

미리보기 모드

미리보기 모드는 편집자가 게시되기 전에 미게시 변경 사항을 확인할 수 있게 해줍니다.

일반적인 패턴은 다음과 같습니다:

/docs/getting-started
/cms-preview/docs/getting-started

프로덕션 페이지는 게시된 콘텐츠만 가져와야 합니다. 미리보기 페이지는 다음과 같은 미리보기 매개변수를 받을 수 있습니다:

?edit_mode=true

미리보기 라우트는 일반적으로 동적으로 유지하고 정적으로 캐싱하지 않아야 합니다.

오류 처리

빌드나 요청 중에 CMS 콘텐츠를 사용할 수 없을 수 있습니다. 애플리케이션은 이를 우아하게 처리해야 합니다.

권장 동작:

  • 라우트가 존재하지 않으면 404를 반환하세요.
  • 선택적 탐색 콘텐츠를 불러올 수 없는 경우 빈 목록을 반환하세요.
  • 서버 측 가져오기 오류를 로그로 남기세요.
  • 방문자에게 내부 API 오류를 노출하지 마세요.

예시:

async function getPost(id: string) {
  try {
    return await cms.schema('post').fetchSingleById(id);
  } catch (error) {
    console.error('Failed to fetch CMS post', error);
    return null;
  }
}

보안

API 키는 비공개로 유지하고 서버에서만 사용하세요. 브라우저 번들이나 공개 JavaScript에 비공개 자격 증명을 포함하지 마세요.

다음과 같은 민감하지 않은 값에만 공개 환경 변수를 사용하세요:

  • CMS 공개 URL
  • 웹사이트 ID
  • 로케일 구성

다음 항목에는 비공개 환경 변수를 사용하세요:

  • API 키
  • 미리보기 토큰
  • 관리자 자격 증명
  • 배포 시크릿

요약

웹사이트에서 구조화된 콘텐츠를 가져오거나, CMS에서 관리하는 라우트를 렌더링하거나, 편집자 미리보기 워크플로를 지원해야 할 때 CMS API를 사용하세요.

표준 통합은 다음을 수행해야 합니다:

  • CMS URL, 웹사이트 ID, API 키를 구성하세요.
  • 스키마별로 문서를 가져오세요.
  • 라우트 경로에 따라 페이지를 가져오세요.
  • CMS 블록을 자체 컴포넌트로 렌더링하세요.
  • 게시된 콘텐츠를 캐싱하세요.
  • 미리보기 콘텐츠는 동적으로 유지하세요.
  • 비공개 자격 증명은 서버에만 보관하세요.
Continue Reading
Previous‹REST API 개요Next경로 가져오기›