-
Notifications
You must be signed in to change notification settings - Fork 0
Publishing Posts
이 문서에서 해결하는 것: blog-posts에서 작성한 글을 production에 게시하는 방법을 설명합니다.
이 블로그는 저장소를 두 개로 나누어 운영합니다.
blog
Next.js 블로그 앱 저장소
blog-posts
MDX 글을 작성하고 보관하는 글 저장소blog/content-source/posts는 일반 폴더가 아니라 blog-posts 저장소가 연결된 submodule입니다.
즉, 아래 두 위치는 같은 GitHub 저장소인 yunkooo/blog-posts를 가리킵니다.
별도로 clone한 blog-posts
= blog/content-source/posts그래서 blog/content-source/posts에서 글을 작성하고 커밋하면, 실제로는 blog-posts 저장소에 커밋하는 것입니다.
blog-posts에 글을 push하는 것만으로는 production에 공개되지 않습니다.
production에 공개되려면 blog 저장소가 새 blog-posts 커밋을 가리키도록 content-source/posts submodule pointer를 커밋하고 push해야 합니다.
1. 글 저장소에 글 커밋/push
-> GitHub blog-posts에 글 내용이 올라감
2. blog 저장소에 submodule pointer 커밋/push
-> blog가 사용할 blog-posts 커밋 SHA가 갱신됨
-> GitHub Actions 배포가 실행됨가장 덜 헷갈리는 방식입니다. blog 프로젝트 안에서 글 작성부터 배포 트리거까지 이어서 처리합니다.
먼저 글 저장소 위치로 이동합니다.
cd /Users/koo/Desktop/dev/blog/content-source/posts새 .mdx 글을 작성하거나 기존 글을 수정합니다.
글 저장소인 blog-posts에 커밋하고 push합니다.
git status
git add .
git commit -m "Add new post"
git push origin main부모 blog 저장소로 돌아옵니다.
cd ../..blog 저장소에서 submodule pointer 변경을 확인합니다.
git status정상이라면 아래처럼 보입니다.
modified: content-source/posts이 표시는 글 파일 전체가 blog 저장소에 복사되었다는 뜻이 아닙니다. blog 저장소가 바라보는 blog-posts 커밋 SHA가 바뀌었다는 뜻입니다.
이제 pointer 변경을 blog 저장소에 커밋하고 push합니다.
git add content-source/posts
git commit -m "Update posts"
git push origin mainblog 저장소의 main에 push되면 GitHub Actions가 실행되고, 성공하면 Vercel production에 반영됩니다.
별도로 clone한 blog-posts 폴더에서 글을 작성해도 됩니다.
cd /path/to/blog-posts글을 작성하거나 수정한 뒤 blog-posts에 커밋하고 push합니다.
git status
git add .
git commit -m "Add new post"
git push origin main그 다음 blog 저장소로 이동합니다.
cd /Users/koo/Desktop/dev/blogblog/content-source/posts submodule이 방금 push한 최신 글 커밋을 가져오도록 업데이트합니다.
git -C content-source/posts pull --ff-only origin main이제 blog 저장소에서 submodule pointer 변경을 커밋하고 push합니다.
git status
git add content-source/posts
git commit -m "Update posts"
git push origin main| 방식 | 장점 | 주의할 점 |
|---|---|---|
blog/content-source/posts에서 작성 |
글 작성 후 바로 부모 blog repo로 돌아가 pointer 커밋을 만들 수 있음 |
현재 위치가 blog-posts submodule 안인지 blog 루트인지 확인해야 함 |
별도 blog-posts에서 작성 |
글 저장소만 따로 보기 깔끔함 | 작성 후 blog repo에서 git -C content-source/posts pull --ff-only origin main을 실행해야 함 |
이미 blog-posts에 글을 push했다면, blog 저장소에서 아래 명령만 실행하면 됩니다.
cd /Users/koo/Desktop/dev/blog
git -C content-source/posts pull --ff-only origin main
git status
git add content-source/posts
git commit -m "Update posts"
git push origin main이 흐름은 blog-posts의 최신 글 커밋을 content-source/posts submodule에 가져온 뒤, blog 저장소가 바라보는 submodule pointer를 갱신해 배포를 트리거합니다.
GitHub에서 아래 경로를 확인합니다.
blog repo -> Actions -> Deploy to Vercel성공하면 Vercel production에 반영됩니다.
글을 production에 반영하기 전에 blog 저장소 루트에서 아래 명령을 실행합니다.
cd /Users/koo/Desktop/dev/blog
npm run build자주 확인할 부분:
- frontmatter의
title,description,publishedAt,category,tags가 줄 단위 YAML 형식인지 -
draft: true로 남아 있지 않은지 - 코드블록 안에 또 다른 코드블록을 보여줄 때 바깥 fence를 백틱 4개로 썼는지
CI는 blog-posts의 최신 main을 자동으로 따라가지 않습니다.
항상 blog 저장소에 커밋된 submodule pointer가 가리키는 글 커밋만 배포합니다.
이 규칙 덕분에 private 저장소에서 초안을 자유롭게 수정해도, 명시적으로 게시하기 전까지 production이 바뀌지 않습니다.