티스토리 뷰
반응형
GatsbyJS에서 Headless CMS(Contentful, Strapi) 연동하기: 콘텐츠 관리 자동화
정적인 Gatsby 사이트라도 Headless CMS와 연결하면 실시간 콘텐츠 관리가 가능해집니다.
이번 글에서는 Gatsby와 대표적인 CMS인 Contentful과 Strapi를 연동하는 방법을 단계별로 설명하겠습니다. 🚀
1. Headless CMS란 무엇인가요?
✅ Headless CMS의 특징
항목 설명
컨텐츠 중심 구조 | 백엔드(CMS)는 콘텐츠 제공, 프론트엔드는 자유롭게 디자인 |
API 기반 통신 | REST 또는 GraphQL API로 콘텐츠 데이터 제공 |
관리 UI 제공 | Markdown, 이미지, 태그 등을 GUI로 관리 |
정적 사이트와 호환 | Gatsby, Next.js, Hugo 등 SSG와 연동 가능 |
🚀 정적 사이트 + CMS 구조는 빠르면서도 유지보수가 쉬운 현대적 웹사이트 구조입니다.
2. Contentful + Gatsby 연동하기
반응형
✅ Contentful 기본 설정
- https://www.contentful.com 가입
- 공간(Space) 생성 → Content Model 정의 (예: BlogPost)
- Content Type에 title, slug, body, image 등 필드 추가
- API 키 생성: Space ID, Access Token 복사
✅ Gatsby에 플러그인 설치
npm install gatsby-source-contentful
📌 gatsby-config.js 설정
require("dotenv").config();
module.exports = {
plugins: [
{
resolve: `gatsby-source-contentful`,
options: {
spaceId: process.env.CONTENTFUL_SPACE_ID,
accessToken: process.env.CONTENTFUL_ACCESS_TOKEN,
},
},
],
};
📌 .env 파일에 환경변수 등록
CONTENTFUL_SPACE_ID=xxxxx
CONTENTFUL_ACCESS_TOKEN=yyyyy
✅ GraphQL로 데이터 확인
http://localhost:8000/___graphql 접속 후 아래 쿼리 입력:
{
allContentfulBlogPost {
nodes {
title
slug
body {
raw
}
}
}
}
🚀 이제 Contentful에서 작성한 콘텐츠를 Gatsby에서 사용할 수 있습니다!
3. Strapi + Gatsby 연동하기
✅ Strapi 기본 설정
- https://strapi.io 접속 → npx create-strapi-app으로 프로젝트 생성
- Admin UI에서 Collection Type 생성 (예: Post)
- 필드 추가: title, slug, content, thumbnail 등
- API 권한 허용
- Settings > Roles > Public에서 GET 권한 허용
✅ Gatsby 플러그인 설치
npm install gatsby-source-strapi
📌 gatsby-config.js 설정
module.exports = {
plugins: [
{
resolve: "gatsby-source-strapi",
options: {
apiURL: "http://localhost:1337",
collectionTypes: ["post"],
},
},
],
};
✅ GraphQL로 데이터 확인
{
allStrapiPost {
nodes {
id
title
slug
content
}
}
}
🚀 Strapi도 Gatsby에 콘텐츠를 동적으로 제공할 수 있습니다!
4. CMS 콘텐츠로 동적 페이지 생성하기
📌 gatsby-node.js 예제 (Contentful 기준)
exports.createPages = async ({ graphql, actions }) => {
const { createPage } = actions;
const result = await graphql(`
{
allContentfulBlogPost {
nodes {
slug
}
}
}
`);
result.data.allContentfulBlogPost.nodes.forEach(post => {
createPage({
path: `/blog/${post.slug}`,
component: require.resolve("./src/templates/blog-template.js"),
context: { slug: post.slug },
});
});
};
📌 GraphQL로 slug 기반 콘텐츠 가져오기
query ($slug: String!) {
contentfulBlogPost(slug: { eq: $slug }) {
title
body {
raw
}
}
}
🚀 CMS에서 관리한 블로그 글이 Gatsby 페이지로 생성됩니다!
5. 배포 시 CMS 데이터 최신화 전략
전략 설명
웹훅(Webhook) | CMS에서 콘텐츠가 변경되면 Gatsby 빌드를 자동 트리거 |
Incremental Builds | 변경된 콘텐츠만 다시 빌드하여 속도 향상 (Netlify/Vercel 지원) |
Gatsby Cloud 활용 | Gatsby 전용 빌드/배포 플랫폼, Webhook 설정 쉬움 |
6. 결론
이번 글에서는 Gatsby에서 Headless CMS를 연동하여 콘텐츠를 효율적으로 관리하는 방법을 배웠습니다.
✔ Contentful과 Strapi를 Gatsby에 연결하여 실시간 콘텐츠 제공
✔ GraphQL을 통해 콘텐츠를 가져오고, slug로 동적 페이지 생성
✔ 자동 배포와 Webhook 연동으로 운영 효율성 향상
🚀 다음 글에서는 Gatsby에서 국제화(i18n)를 구현하는 방법을 다루겠습니다!
'study > 프론트엔드' 카테고리의 다른 글
GatsbyJS 프로젝트를 CI/CD로 자동 배포하기 (GitHub Actions, Netlify, Vercel 활용) (0) | 2025.03.23 |
---|---|
GatsbyJS 웹사이트 성능 최적화 가이드: 속도 향상과 SEO를 동시에 잡는 법 (0) | 2025.03.22 |
GatsbyJS에서 Open Graph 및 Twitter Card 설정하기 (SNS 미리보기 최적화) (0) | 2025.03.21 |
GatsbyJS에서 Sitemap(사이트맵) 생성 및 SEO 최적화하기 (0) | 2025.03.20 |
GatsbyJS에서 RSS 피드 생성하기: 블로그 구독 기능 추가 (0) | 2025.03.20 |
※ 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- SEO최적화
- 개발블로그
- 백엔드개발
- PostgreSQL
- seo 최적화 10개
- 관리자
- Next.js
- REACT
- kotlin
- nextJS
- gatsbyjs
- SEO 최적화
- App Router
- Docker
- AI챗봇
- 웹개발
- rag
- CI/CD
- NestJS
- github
- nodejs
- Python
- Webpack
- 프론트엔드
- LangChain
- llm
- Prisma
- fastapi
- Ktor
- 프론트엔드면접
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
글 보관함
반응형