Obsidian Publish 커스텀 설정 정리 가이드
1. 문제해결 편
파일명 수정시 URL 변경되는 문제
Obisidian Publish의 가장 큰 문제는 파일명을 변경하거나, 파일 위치를 변경하는 등 경로에 변화가 있으면 URL도 변경1된다는 점이다. Obsidian도 permlink를 제공하지만, 생성되는 모든 문서마다 permlink를 만드는게 귀찮다. 노션처럼 자동으로 임의의 permlink를 생성하는 방법도 고려했으나 URL에 Obsidian의 구조가 드러났으면 하는 바람으로 다른 해결책을 찾았다. 핵심 고려사항은 다음과 같다.
- 파일명이나 폴더명이 변경되어도 기존 URL도 접속이 가능해야 한다.
- 현재 폴더 구조와 파일명이 기본 URL이어야 한다.
이 2가지를 만족시키는 방법은 alias 옵션을 사용하는 것이다. Templater를 이용해서 Publish 후에 aliases에 현재 URL을 추가하는 것이다. 이 경우 다음 Publish에 파일명이나 폴더 구조가 변경되어도 aliases 옵션을 통해 기존 URL로 동일한 문서에 접근할 수 있다.
이를 구현한 코드는 2가지다. 첫번째는 현재 문서에만 적용하는 것이고, 두번째는 내가 원하는 폴더에 적용하는 것이다. 조금 수정하면 전체 Obsidian 문서에 적용하는 것도 가능하다.
현재 문서 aliases 업데이트
<%*
tp.hooks.on_all_templates_executed(async () => {
const file = tp.file.find_tfile(tp.file.path(true));
await app.fileManager.processFrontMatter(file, (frontmatter) => {
if (!frontmatter["aliases"]) {
frontmatter["aliases"] = [];
}
let newAlias = tp.file.path(true).replace(/\.md$/, "");
if (!frontmatter["aliases"].includes(newAlias)) {
frontmatter["aliases"].push(newAlias);
}
});
});
%>
특정 폴더 내 모든 문서의 aliases 업데이트
<%*
const folderPaths = [
"Articles/",
"Projects/"
];
const allMarkdownFiles = app.vault.getMarkdownFiles()
.filter(file => folderPaths.some(path => file.path.startsWith(path)));
for (const file of allMarkdownFiles) {
await app.fileManager.processFrontMatter(file, (frontmatter) => {
if (!frontmatter.aliases) {
frontmatter.aliases = [];
}
const newAlias = file.path.replace(/\.md$/, "");
if (!frontmatter.aliases.includes(newAlias)) {
frontmatter.aliases.push(newAlias);
}
});
}
%>
위 코드를 템플릿 문서에 추가하고 Templater를 실행하면 aliases가 업데이트 된다. 물론 기존 값을 가져와서 업데이트하므로, 중복된 aliases가 추가되지는 않는다.
2. 기능추가 편
내비게이션 커스텀 링크 추가
Obisidian Publish는 publish.js를 사용할 수 있도록 되어있다. 이를 통해 내비게이션 메뉴에 원하는 링크를 추가할 수 있다. Add Custom Links to Navigation 문서를 참고하자.
댓글 기능 (예정)
Obsidian Publish는 댓글 기능이 없다. 기본적으로 URL의 변동 때문에 Disqus 같은 댓글을 추가하는 것도 쉽지 않다. 하지만 비록 URL이 변경되면 기존 댓글이 사라지더라도, 구현할 예정이다. 참고로, 이미 Obsidian Publish에 댓글을 구현한 사람이 있는데, 아직 코드가 어떻게 작동하는지 검토하지 않았다.
Footnotes
-
노션은 모든 페이지마다 고유 값이 붙어서 페이지의 위치와 URL이 아무런 상관이 없다. ↩

