Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Publishing Posts

yunkooo edited this page Apr 23, 2026 · 4 revisions

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하면 blog repo가 자동으로 알까?

자동으로 알지 못합니다.

blog-posts 저장소에 새 커밋이 생겨도 blog 저장소는 그 커밋을 자동으로 따라가지 않습니다.

예를 들어 blog-posts가 아래처럼 바뀌었다고 가정합니다.

blog-posts
A 버전 -> B 버전 -> C 버전

그런데 blog 저장소가 아직 B 버전을 가리키고 있다면, production 블로그는 계속 B 버전의 글 목록을 사용합니다.

blog
content-source/posts -> B 버전

blog 저장소가 C 버전을 사용하려면 아래 작업을 해야 합니다.

cd /Users/koo/Desktop/dev/blog
git -C content-source/posts pull --ff-only origin main
git add content-source/posts
git commit -m "Update posts"
git push origin main

이 커밋이 올라가야 blog 저장소가 새 blog-posts 버전을 사용합니다.

blog/content-source/posts에서 커밋하면 blog repo는 어떻게 알까?

blog/content-source/postsblog 저장소 안에 있는 것처럼 보이지만, 그 안에서는 별도의 Git 저장소처럼 동작합니다.

이 위치에서 커밋하면:

cd /Users/koo/Desktop/dev/blog/content-source/posts
git add .
git commit -m "Add new post"
git push origin main

이 커밋은 blog가 아니라 blog-posts 저장소에 올라갑니다.

그 다음 부모인 blog 저장소로 돌아와서 확인하면:

cd ../..
git status

아래처럼 보일 수 있습니다.

modified: content-source/posts

이 의미는 글 파일이 blog 저장소에 직접 들어왔다는 뜻이 아닙니다.

정확히는 blog 저장소가 기억하던 blog-posts 버전이 바뀌었다는 뜻입니다.

그래서 부모 blog 저장소에서도 한 번 더 커밋해야 합니다.

git add content-source/posts
git commit -m "Update posts"
git push origin main

content-source/posts는 blog-posts 자체일까?

완전히 같은 말은 아닙니다.

blog-posts는 글의 전체 이력이 있는 원본 저장소입니다.

blog/content-source/postsblog-posts의 특정 버전을 blog 폴더 안에 펼쳐놓은 작업 공간입니다.

blog-posts
 글 저장소 원본
blog/content-source/posts
 blog가 현재 선택한 blog-posts 버전이 펼쳐진 위치

그래서 blog/content-source/posts 안에서는 blog-posts에 커밋하고 push할 수 있습니다. 하지만 부모 blog 저장소에는 content-source/posts가 어떤 버전을 가리키는지도 따로 기록해야 합니다.

submodule pointer는 최근 글 하나를 가리킬까?

아닙니다.

submodule pointer는 최근 글 하나가 아니라 blog-posts 저장소의 특정 버전 전체를 가리킵니다.

예를 들어 blog-posts에 이런 버전들이 있다고 가정합니다.

A 버전: 첫 번째 글 추가
B 버전: 두 번째 글 추가
C 버전: 첫 번째 글 수정
D 버전: 세 번째 글 추가

각 버전은 그 시점의 전체 글 폴더 상태입니다.

D 버전의 글 폴더 상태:
- 첫 번째 글 수정본
- 두 번째 글
- 세 번째 글

blog 저장소의 content-source/posts pointer가 D 버전을 가리키면, production 블로그는 D 버전 시점의 전체 글 목록을 사용합니다.

한 문장으로 정리하면:

submodule pointer는 blog-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/content-source/posts에서 바로 작성

가장 덜 헷갈리는 방식입니다. 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 main

blog 저장소의 main에 push되면 GitHub Actions가 실행되고, 성공하면 Vercel production에 반영됩니다.

다른 흐름: 별도 blog-posts 폴더에서 작성

별도로 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/blog

blog/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로 남아 있지 않은지
  • 코드블록 안에 또 다른 코드블록을 넣어 백틱이 화면에 어색하게 노출되지 않는지

주의

CI는 blog-posts의 최신 main을 자동으로 따라가지 않습니다.

항상 blog 저장소에 커밋된 submodule pointer가 가리키는 글 커밋만 배포합니다.

이 규칙 덕분에 private 저장소에서 초안을 자유롭게 수정해도, 명시적으로 게시하기 전까지 production이 바뀌지 않습니다.

Clone this wiki locally

AltStyle によって変換されたページ (->オリジナル) /