예전부터 플랫폼을 사용하지 않고 직접 블로그를 만들어 배포하고 싶다는 생각이 있었습니다. 솔직히 다른 플랫폼 쓰는 것보다, 직접 만들어 보면 훨씬 보기도 좋고 기억에도 많이 남을 것 아니겠습니까?
Obsidian Publish와 Quartz
후보: Obsidian Publish
옵시디언 퍼블리시는 옵시디언에서 공식적으로 운영하는 퍼블리싱 서비스입니다. GUI를 벗어나지 않고 작성부터 배포까지 가능하기 때문에 웹 개발 지식이 없어도 쉽게 사이트를 구축할 수 있다는 장점이 있습니다. 다만 1달에 10달러씩 비용이 청구된다는 점이 큰 결격 사유였습니다. 저에게는 번거롭더라도 github 혹은 cloudflare의 pages 기능을 사용해 비용 없이 배포하는 게 더 나은 선택지로 다가왔습니다.
Quartz
그러던 중 Quartz에 대해 듣게 되었습니다. Quartz는 옵시디언 노트를 정적 사이트로 변환하는 오픈소스, 프리웨어 툴로, 옵시디언 퍼블리시의 대안 중 하나로 꼽힙니다. 그렇지만 이것만으로는 배포까지 진행할 수는 없습니다. 말 그대로 ‘사이트로 변환’만 해 주기 때문에, 그 결과물을 인터넷에서 뿌려줄 다른 서비스가 필요합니다.
여기서 사용되는 게 바로 Github Pages, Cloudflare Workers & Pages, Vercel 등등의 서비스인데, 저는 이 중 Cloudflare Workers & Pages를 사용했습니다.
블로그 구축
전체 구조
flowchart LR n2["Github 저장소"] -- 변화 감지 --> n3["Cloudflare에서 빌드/배포"] n1["Obsidian 노트 작성"] -- Push --> n2
일반적인 경우, 위의 다이어그램과 같이 깃허브에 변경 사항을 푸시하면, 클라우드플레어가 활동을 감지해 자동으로 빌드 및 배포를 진행합니다. 그렇지만 Cloudflare 관련 서비스를 처음 사용했던 데다가 웹 개발 지식도 부족했던 저는 클라우드플레어의 빌드 설정을 잘못 만졌는지 계속 오류가 나서, 결국 아래의 흐름으로 배포를 진행했습니다.
변명을 해 보자면, 예전에는 Cloudflare Pages와 Workers가 분리되어 있었지만, 언제부턴가 Workers & Pages로 합쳐졌는데, gpt가 이걸 반영을 못하고 에전 기준으로 설명해서 좀 돌아갔습니다. 물론 이것도 처음에 환경을 제대로 명시하지 않은 제 잘못이긴 합니다.
flowchart LR n1["Obsidian 노트 작성"] -- Push --> n2["Github 저장소"] n1 -- "Quartz CLI" --> n3["로컬에서 빌드"] n3 --"Wrangler CLI"--> n4["Cloudflare에 배포"]
NOTE
깃허브 저장소를 연결한 상태라면,
Workers&Pages - <프로젝트명> - 설정 - 빌드 - 빌드 비활성화옵션을 활성화해야 클라우드플레어에서 자동 빌드 및 배포를 중단합니다.
아무튼 작성 시점 현재는 이 흐름으로 사이트를 구축했습니다.
구축 과정
WARNING
- 아래의 명령어는 모두 Arch Linux 기준입니다. 다른 운영체제와는 차이가 있을 수 있습니다.
- 저는 웹 개발에 익숙하지 않기 때문에, 여기 소개된 것보다 더 나은 방법이 있을 수 있습니다.
레포지토리 생성
Quartz의 깃허브 템플릿을 사용해 노트 및 Quartz 관련 파일이 저장될 레포지토리를 만들었습니다. 클라우드플레어로 배포할 계획이라면, 비공개 레포지토리로 만들어도 무방합니다.
Quartz 설치
git clone <생성한 레포지토리>
cd <레포지토리 이름>
rm -f package-lock.json
pnpm install
pnpm quartz create노트 저장 및 미리보기
공개하려는 노트는 모두 conent 폴더 내에 저장해야 합니다.
pnpm quartz build --serve사이트의 최종적인 모습은 위의 명령어로 확인할 수 있습니다.
클라우드플레어로 배포
pnpm install wrangler
pnpm wrangler login클라우드플레어 계정이 없다면, 먼저 dash.cloudflare.com에서 계정을 만들어야 합니다.
{
"name": "blog",
"compatibility_date": "2026-10-19",
"assets": {
"directory": "public"
}
}프로젝트 루트의 wrangler.jsonc에는 이 내용만 있어도 됩니다. 이걸로 텍스트는 정상적으로 배포가 가능하지만, 이미지까지 배포하려면 추가적인 설정이 더 필요합니다. 저는 cloudflare r2 버킷을 사용했는데, 이것과 관련해서는 글을 하나 더 쓸 예정입니다.
pnpm quartz build
pnpm wrangler deploy준비가 되었다면, 빌드 후 배포하면 됩니다!
후기
처음에 볼 땐 고려할 게 상당히 많아 보였습니다. 물론 시행착오도 많았지만, 이렇게 글을 쓰며 정리해 보니 생각보다 그렇게 벽이 느껴지거나 하지는 않았던 것 같습니다.
또, 아직 사이트 구축에 관해서 못다 한 얘기가 있는데(플러그인 커스텀, r2 버킷으로 이미지 제공), 조만간 쓰도록 하겠습니다.