2024.03.23

옵시디언으로 블로그 만들기


뒤로가기

옵시디언으로 블로그 작성하기

현재 글을 옵시디언에서 작성하고 있다. 그리고 옵시디언에서 적는 글을 블로그로 포스팅한다. 예전부터 여러가지 블로그를 시도했다. 구글 블로그 스팟, 티스토리, GitHub Pages로 블로그 만들기 등등.. 근데 뭔가 한군데씩 맘에 들지 않는게 있었다. GitHub Pages, 그러니까 github.io로 했던 예전 시도도 사실 옵시디언을 블로그로 만든 형태였다. 근데 당시에는 md 파일을 html로 변환해주는 프레임워크인 Jekyll 을 사용해서 블로그를 만들었었다. 이 방식도 나름 괜찮긴 했는데, 이래저래 블로그를 내가 원하는 방식으로 꾸미기가 힘들었다. 무언가 하나 고칠때마다 에러와 씨름했다. 이게 프레임워크의 힘을 빌리는 것이다보니 커스터마이징하는데 삽질을 많이했다. 그래서 이런저런 피로감에 블로그를 지속할수 없다는 생각이 들어서 블로그를 접었다. 그게 1년쯤 전이다. 근데 요즘 취미로 뭘 좀 만들면서 프론트 쪽을 공부하게 됐다. 이제는 내가 원하는 방식으로 블로그를 만들수 있겠다는 생각이 들었다. 그래서 오랜 숙원중 하나였던 꾸준히 지속가능한 블로그를 만들어보려고 한다. 이젠 거의 100% 수제작 블로그가 가능해졌다.

_🌲 Attachments/Pasted image 20240328214636.png

포스팅 프로세스

이번에 만든 블로그의 포스팅 프로세스는 다음과 같다.

  1. 옵시디언에서 글으르 쓴다. 이때 글은 Markdown 형식으로 작성한다.
  2. 작성된 마크다운 문서를 파이썬으로 파싱해서 json의 형태로 바꾼다.
  3. 이때, 문서의 프론트 매터 등 기타 정보가 포함되고, 컨텐츠 내용은 html로 변환된다.
  4. 해당 Json을 읽고, 포스팅할수 있는 프론트 웹페이지를 만든다. React, Typescript, Tailwind를 사용하고, vite로 빌드했다.
  5. 이를 깃헙페이지에 push하여 호스팅한다.

이를 위해서 크게 2개의 프로젝트가 필요하다. 옵시디언 빌더, 블로그 프론트가 그것들이다.

옵시디언 빌더

먼저 옵시디언 빌더 프로젝트다. 이 프로젝트는 옵시디언 경로에 있는 markdown 파일을 읽어서 json으로 변환하는 프로젝트로 파이썬으로 개발했다. 출력된 json은 다음과 같다. 여기서 핵심은 html 키값이다. 이러한 json 파일이 만들어지면, 프론트 프로젝트로 복사된다.

📋 COPY
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
{
  "post_this_md": false,
  "blog_post": true,
  "layout": "post",
  "title": "옵시디언으로 블로그 만들기",
  "aliases": "옵시디언으로 블로그 만들기",
  "subtitle": null,
  "thumbnail-img": "",
  "date": "20240323",
  "parse-url": "",
  "sources": "",
  "tags": null,
  "categories": ["Etc"],
  "keywords": null,
  "html": " <div id=\"pygen-1\" class=\"w-full flex items-center justify-center\" style=\"\" > <div id=\"pygen-2\" class=\"w-full flex items-center justify-center\" style=\"\" > <div id=\"pygen-3\" class=\"w-full\" style=\"max-width:800px;\" > <div class=\"w-full\" style=\"padding-top: 1.25rem;padding-bottom: 1.25rem;padding-left: 1.25rem;padding-right: 1.25rem;\" > <False >  </False> </div> </div> </div> </div>  <div id=\"pygen-1\" class=\"w-full flex items-center justify-center\" style=\"\" > <div id=\"pygen-2\" class=\"w-full flex items-center justify-center\" style=\"\" > <div id=\"pygen-3\" class=\"w-full\" style=\"max-width:800px;\" > <h4>블로그를 다시 해보자</h4><p>현재 글을 옵시디언에서 작성하고 있다. 그리고 옵시디언에서 적는 글을 블로그로 포스팅한다. 예전부터 여러가지 블로그를 시도했다. 구글 블로그 스팟, 티스토리, GitHub Pages로 블로그 만들기 등등..  근데 뭔가 한군데씩 맘에 들지 않는게 있었다. GitHub Pages, 그러니까 github.io로 했던 예전 시도도 사실 옵시디언을 블로그로 만든 형태였다. 근데 당시에는 md 파일을 html로 변환해주는 프레임워크(?)인 <a href=\"https://jekyllrb.com/\" target=\"_blank\">Jekyll</a> 을 사용해서 블로그를 만들었었다. 이 방식도 나름 괜찮긴 했는데, 이래저래 내가 원하는 방식으로 꾸미기가 힘들었다. 프론트를 좀 알아야 제대로 꾸밀수 있다는 느낌을 받았다. 그래서 이런저런 피로감에 블로그를 지속할수 없다는 생각이 들어 블로그를 접었다. 그게 1년쯤 전이다. 근데 요즘 취미로 뭘 좀 만들면서 프론트 쪽을 공부하게 됐다. 이제는 내가 원하는 방식으로 블로그를 만들수 있겠다는 생각이 들었다. 그래서 오랜 숙원중 하나였던 꾸준히 지속가능한 블로그를 만들어보려고 한다. 이젠 거의 100% 수제작 블로그가 가능해졌다.</p> </div> </div> </div>  <div id=\"pygen-1\" class=\"w-full flex items-center justify-center\" style=\"padding-top: 1.25rem;padding-bottom: 1.25rem;\" > <div id=\"pygen-2\" class=\"w-full flex items-center justify-center\" style=\"--tw-bg-opacity: 1; background-color: rgba(255, 251, 235, var(--tw-bg-opacity));\" > <div id=\"pygen-3\" class=\"w-full\" style=\"max-width:800px;\" > <div class=\"w-full py-5 flex flex-col items-center \">  <img class=\"py-5 \" style src=\"/obsidian/Pasted image 20240323101052.png\">옵시디언에서 적는 글</img>  </div> </div> </div> </div>  <div id=\"pygen-1\" class=\"w-full flex items-center justify-center\" style=\"\" > <div id=\"pygen-2\" class=\"w-full flex items-center justify-center\" style=\"\" > <div id=\"pygen-3\" class=\"w-full\" style=\"max-width:800px;\" > <h4>포스팅 프로세스</h4><p>이번에 만든 블로그의 포스팅 프로세스는 다음과 같다. </p> </div> </div> </div>  <div id=\"pygen-1\" class=\"w-full flex items-center justify-center\" style=\"\" > <div id=\"pygen-2\" class=\"w-full flex items-center justify-center\" style=\"\" > <div id=\"pygen-3\" class=\"w-full\" style=\"max-width:800px;\" > <div class=\"w-full\" style=\"padding-top: 1.25rem;padding-bottom: 1.25rem;padding-left: 1.25rem;padding-right: 1.25rem;\" > <ol > <li>옵시디언에서 글으르 쓴다. 이때 글은 Markdown 형식으로 작성한다. </li><li>작성된 마크다운 문서를 파이썬으로 파싱해서 json의 형태로 바꾼다.</li><li>이때, 문서의 프론트 매터 등 기타 정보가 포함되고, 컨텐츠 내용은 html로 변환된다.</li><li>해당 Json을 읽고, 포스팅할수 있는 프론트 웹페이지를 만든다. React, Typescript, Tailwind를 사용하고, vite로 빌드했다.</li><li>이를 깃헙페이지에 push하여 호스팅한다. </li> </ol> </div> </div> </div> </div>  <div id=\"pygen-1\" class=\"w-full flex items-center justify-center\" style=\"\" > <div id=\"pygen-2\" class=\"w-full flex items-center justify-center\" style=\"\" > <div id=\"pygen-3\" class=\"w-full\" style=\"max-width:800px;\" > <p>계속 작성중..</p> </div> </div> </div> ",
  "outlinks": [],
  "resources": ["_🌲 Attachments/Pasted image 20240323101052.png"],
  "inlinks": [],
  "filename": "20240323_1711156165597"
}

그리고 마크다운 문서들의 목록이 담겨있는 구조 파일이 필요하다. 이 또한 json으로 출력된다. 아래 문서처럼 어떤 카테고리가 있는지, 각 카테고리에는 어떤 글이 들어있는지, 페이지는 몇 페이지나 되는지 등등 정보들이 담겨있다. 프론트에서는 여기 담겨 있는 파일명을 읽고, 해당 파일을 import하여 페이지를 표시할수 있다.

📋 COPY
1
2
3
4
5
6
7
8
9
{
  "categories": ["Posts", "Posts/Obsidian"],
  "Posts": { "1": ["20240323_1711156165597"], "number": 1, "total_pages": 1 },
  "Posts/Obsidian": {
    "1": ["20240323_1711156165597"],
    "number": 1,
    "total_pages": 1
  }
}

블로그 프론트

프론트의 경우 React, Tailwind의 조합으로 코드를 작성했다. 그리고 vite로 빌드한다. post_structure.json를 읽고 왼쪽에 있는 카테고리를 구성한다. 그리고 글을 선택하면 글을 읽어와 화면에 표시한다. 그리고 그 결과는? 현재 이 블로그가 되는 것이다.

뒤로가기