ํ๋ฌ๊ทธ์ธ(Plugin)์ ์ฌ์ฉํ๋ฉด ์์ ๋ง์ ๊ธฐ๋ฅ์ผ๋ก Obsidian์ ํ์ฅํ์ฌ ๋ง์ถคํ ๋ ธํธ ์์ฑ ๊ฒฝํ์ ๋ง๋ค ์ ์์ต๋๋ค.
์ด ํํ ๋ฆฌ์ผ์์๋ ์ํ ํ๋ฌ๊ทธ์ธ์ ์์ค ์ฝ๋(Source Code)์์ ์ปดํ์ผ(Compile)ํ๊ณ Obsidian์ ๋ก๋ํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์๋๋ค.
ํ์ต ๋ด์ฉ
์ด ํํ ๋ฆฌ์ผ์ ์๋ฃํ๋ฉด ๋ค์์ ํ ์ ์๊ฒ ๋ฉ๋๋ค:
- Obsidian ํ๋ฌ๊ทธ์ธ ๊ฐ๋ฐ์ ์ํ ํ๊ฒฝ ๊ตฌ์ฑ
- ์์ค ์ฝ๋์์ ํ๋ฌ๊ทธ์ธ ์ปดํ์ผ
- ํ๋ฌ๊ทธ์ธ์ ์์ ํ ํ ๋ค์ ๋ก๋
์ฌ์ ์๊ตฌ์ฌํญ
์ด ํํ ๋ฆฌ์ผ์ ์๋ฃํ๋ ค๋ฉด ๋ค์์ด ํ์ํฉ๋๋ค:
- ๋ก์ปฌ ๋จธ์ ์ ์ค์น๋ Git
- Node.js์ฉ ๋ก์ปฌ ๊ฐ๋ฐ ํ๊ฒฝ
- Visual Studio Code์ ๊ฐ์ ์ฝ๋ ์๋ํฐ(Code Editor)
์์ํ๊ธฐ ์ ์
ํ๋ฌ๊ทธ์ธ์ ๊ฐ๋ฐํ ๋ ํ ๋ฒ์ ์ค์๋ก ๋ณผํธ(Vault)์ ์๋ํ์ง ์์ ๋ณ๊ฒฝ์ด ๋ฐ์ํ ์ ์์ต๋๋ค. ๋ฐ์ดํฐ ์์ค์ ๋ฐฉ์งํ๋ ค๋ฉด ๋ฉ์ธ ๋ณผํธ์์ ํ๋ฌ๊ทธ์ธ์ ๊ฐ๋ฐํด์๋ ์ ๋ฉ๋๋ค. ํญ์ ํ๋ฌ๊ทธ์ธ ๊ฐ๋ฐ ์ ์ฉ ๋ณ๋ ๋ณผํธ๋ฅผ ์ฌ์ฉํ์ธ์.
1๋จ๊ณ: ์ํ ํ๋ฌ๊ทธ์ธ ๋ค์ด๋ก๋
์ด ๋จ๊ณ์์๋ Obsidian์ด ์ฐพ์ ์ ์๋๋ก ๋ณผํธ์ .obsidian
๋๋ ํฐ๋ฆฌ ๋ด plugins
๋๋ ํฐ๋ฆฌ์ ์ํ ํ๋ฌ๊ทธ์ธ์ ๋ค์ด๋ก๋ํฉ๋๋ค.
์ด ํํ ๋ฆฌ์ผ์์ ์ฌ์ฉํ ์ํ ํ๋ฌ๊ทธ์ธ์ GitHub ์ ์ฅ์์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
-
ํฐ๋ฏธ๋(Terminal) ์ฐฝ์ ์ด๊ณ ํ๋ก์ ํธ ๋๋ ํฐ๋ฆฌ๋ฅผ
plugins
๋๋ ํฐ๋ฆฌ๋ก ๋ณ๊ฒฝํฉ๋๋ค.cd path/to/vault mkdir .obsidian/plugins cd .obsidian/plugins
-
Git์ ์ฌ์ฉํ์ฌ ์ํ ํ๋ฌ๊ทธ์ธ์ ํด๋ก (Clone)ํฉ๋๋ค.
git clone https://github.com/obsidianmd/obsidian-sample-plugin.git
GitHub ํ ํ๋ฆฟ ์ ์ฅ์
์ํ ํ๋ฌ๊ทธ์ธ์ ์ ์ฅ์๋ GitHub ํ ํ๋ฆฟ ์ ์ฅ์(Template Repository)์ ๋๋ค. ์ฆ, ์ํ ํ๋ฌ๊ทธ์ธ์์ ์์ ๋ง์ ์ ์ฅ์๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ๋ฐฉ๋ฒ์ ์์๋ณด๋ ค๋ฉด ํ ํ๋ฆฟ์์ ์ ์ฅ์ ๋ง๋ค๊ธฐ๋ฅผ ์ฐธ์กฐํ์ธ์.
์ํ ํ๋ฌ๊ทธ์ธ์ ํด๋ก ํ ๋๋ ์์ ์ ์ ์ฅ์ URL์ ์ฌ์ฉํ๋ ๊ฒ์ ์์ง ๋ง์ธ์.
2๋จ๊ณ: ํ๋ฌ๊ทธ์ธ ๋น๋
์ด ๋จ๊ณ์์๋ Obsidian์ด ๋ก๋ํ ์ ์๋๋ก ์ํ ํ๋ฌ๊ทธ์ธ์ ์ปดํ์ผํฉ๋๋ค.
-
ํ๋ฌ๊ทธ์ธ ๋๋ ํฐ๋ฆฌ๋ก ์ด๋ํฉ๋๋ค.
cd obsidian-sample-plugin
-
์์กด์ฑ(Dependencies)์ ์ค์นํฉ๋๋ค.
npm install
-
์์ค ์ฝ๋๋ฅผ ์ปดํ์ผํฉ๋๋ค. ๋ค์ ๋ช ๋ น์ ํฐ๋ฏธ๋์์ ๊ณ์ ์คํ๋๋ฉฐ ์์ค ์ฝ๋๋ฅผ ์์ ํ ๋ ํ๋ฌ๊ทธ์ธ์ ๋ค์ ๋น๋ํฉ๋๋ค.
npm run dev
ํ๋ฌ๊ทธ์ธ ๋๋ ํฐ๋ฆฌ์ ์ด์ ํ๋ฌ๊ทธ์ธ์ ์ปดํ์ผ๋ ๋ฒ์ ์ด ํฌํจ๋ main.js
ํ์ผ์ด ์๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
3๋จ๊ณ: ํ๋ฌ๊ทธ์ธ ํ์ฑํ
Obsidian์์ ํ๋ฌ๊ทธ์ธ์ ๋ก๋ํ๋ ค๋ฉด ๋จผ์ ํ์ฑํํด์ผ ํฉ๋๋ค.
- Obsidian์์ ์ค์ ์ ์ฝ๋๋ค.
- ์ฌ์ด๋ ๋ฉ๋ด์์ ์ปค๋ฎค๋ํฐ ํ๋ฌ๊ทธ์ธ์ ์ ํํฉ๋๋ค.
- ์ปค๋ฎค๋ํฐ ํ๋ฌ๊ทธ์ธ ์ผ๊ธฐ๋ฅผ ์ ํํฉ๋๋ค.
- ์ค์น๋ ํ๋ฌ๊ทธ์ธ ์๋์์ Sample Plugin ์์ ํ ๊ธ ๋ฒํผ์ ์ ํํ์ฌ ํ์ฑํํฉ๋๋ค.
์ด์ Obsidian์์ ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ ์ค๋น๊ฐ ๋์์ต๋๋ค. ๋ค์์ผ๋ก ํ๋ฌ๊ทธ์ธ์ ์ผ๋ถ ๋ณ๊ฒฝํด๋ณด๊ฒ ์ต๋๋ค.
4๋จ๊ณ: ํ๋ฌ๊ทธ์ธ ๋งค๋ํ์คํธ ์ ๋ฐ์ดํธ
์ด ๋จ๊ณ์์๋ ํ๋ฌ๊ทธ์ธ ๋งค๋ํ์คํธ(Manifest) manifest.json
์ ์
๋ฐ์ดํธํ์ฌ ํ๋ฌ๊ทธ์ธ ์ด๋ฆ์ ๋ณ๊ฒฝํฉ๋๋ค. ๋งค๋ํ์คํธ์๋ ํ๋ฌ๊ทธ์ธ์ ์ด๋ฆ๊ณผ ์ค๋ช
๊ฐ์ ์ ๋ณด๊ฐ ํฌํจ๋์ด ์์ต๋๋ค.
- ์ฝ๋ ์๋ํฐ์์
manifest.json
์ ์ฝ๋๋ค. id
๋ฅผ"hello-world"
์ ๊ฐ์ ๊ณ ์ ์๋ณ์๋ก ๋ณ๊ฒฝํฉ๋๋ค.name
์"Hello world"
์ ๊ฐ์ ์ฌ์ฉ์ ์นํ์ ์ธ ์ด๋ฆ์ผ๋ก ๋ณ๊ฒฝํฉ๋๋ค.- ํ๋ฌ๊ทธ์ธ ํด๋ ์ด๋ฆ์ ํ๋ฌ๊ทธ์ธ์
id
์ ์ผ์นํ๋๋ก ๋ณ๊ฒฝํฉ๋๋ค. - ํ๋ฌ๊ทธ์ธ ๋งค๋ํ์คํธ์ ์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ก๋ํ๋ ค๋ฉด Obsidian์ ๋ค์ ์์ํฉ๋๋ค.
์ค์น๋ ํ๋ฌ๊ทธ์ธ์ผ๋ก ๋์๊ฐ์ ํ๋ฌ๊ทธ์ธ ์ด๋ฆ์ด ๋ณ๊ฒฝํ ๋ด์ฉ์ ๋ฐ์ํ์ฌ ์ ๋ฐ์ดํธ๋ ๊ฒ์ ํ์ธํ์ธ์.
manifest.json
์ ๋ณ๊ฒฝํ ๋๋ง๋ค Obsidian์ ๋ค์ ์์ํ๋ ๊ฒ์ ์์ง ๋ง์ธ์.
5๋จ๊ณ: ์์ค ์ฝ๋ ์ ๋ฐ์ดํธ
์ฌ์ฉ์๊ฐ ํ๋ฌ๊ทธ์ธ๊ณผ ์ํธ์์ฉํ ์ ์๋๋ก ์ฌ์ฉ์๊ฐ ์ ํํ์ ๋ ์ธ์ฌ๋ง์ ํ์ํ๋ _๋ฆฌ๋ณธ ์์ด์ฝ(Ribbon Icon)_์ ์ถ๊ฐํฉ๋๋ค.
-
์ฝ๋ ์๋ํฐ์์
main.ts
๋ฅผ ์ฝ๋๋ค. -
ํ๋ฌ๊ทธ์ธ ํด๋์ค(Class) ์ด๋ฆ์
MyPlugin
์์HelloWorldPlugin
์ผ๋ก ๋ณ๊ฒฝํฉ๋๋ค. -
obsidian
ํจํค์ง(Package)์์Notice
๋ฅผ ๊ฐ์ ธ์ต๋๋ค(Import).import { Notice, Plugin } from 'obsidian';
-
onload()
๋ฉ์๋(Method)์์ ๋ค์ ์ฝ๋๋ฅผ ์ถ๊ฐํฉ๋๋ค:this.addRibbonIcon('dice', 'Greet', () => { new Notice('Hello, world!'); });
-
**๋ช ๋ น ํ๋ ํธ(Command Palette)**์์ ์ ์ฅํ์ง ์๊ณ ์ฑ ๋ค์ ๋ก๋๋ฅผ ์ ํํ์ฌ ํ๋ฌ๊ทธ์ธ์ ๋ค์ ๋ก๋ํฉ๋๋ค.
์ด์ Obsidian ์ฐฝ ์ผ์ชฝ์ ๋ฆฌ๋ณธ์์ ์ฃผ์ฌ์ ์์ด์ฝ์ ๋ณผ ์ ์์ต๋๋ค. ์ด๋ฅผ ์ ํํ๋ฉด ์ค๋ฅธ์ชฝ ์๋จ ๋ชจ์๋ฆฌ์ ๋ฉ์์ง๊ฐ ํ์๋ฉ๋๋ค.
์์ค ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ ํ์๋ ํ๋ฌ๊ทธ์ธ์ ๋ค์ ๋ก๋ํด์ผ ํ๋ค๋ ์ ์ ๊ธฐ์ตํ์ธ์. ์ปค๋ฎค๋ํฐ ํ๋ฌ๊ทธ์ธ ํจ๋์์ ๋นํ์ฑํํ ๋ค์ ๋ค์ ํ์ฑํํ๊ฑฐ๋ ์ด ๋จ๊ณ์ 5๋ฒ์์ ์ค๋ช ํ ๋๋ก ๋ช ๋ น ํ๋ ํธ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค.
ํซ ๋ฆฌ๋ก๋ฉ(Hot Reloading)
๊ฐ๋ฐํ๋ ๋์ ํ๋ฌ๊ทธ์ธ์ ์๋์ผ๋ก ๋ค์ ๋ก๋ํ๋ ค๋ฉด Hot-Reload ํ๋ฌ๊ทธ์ธ์ ์ค์นํ์ธ์.
๊ฒฐ๋ก
์ด ํํ ๋ฆฌ์ผ์์๋ TypeScript API๋ฅผ ์ฌ์ฉํ์ฌ ์ฒซ ๋ฒ์งธ Obsidian ํ๋ฌ๊ทธ์ธ์ ๋น๋ํ์ต๋๋ค. ํ๋ฌ๊ทธ์ธ์ ์์ ํ๊ณ ๋ค์ ๋ก๋ํ์ฌ Obsidian ๋ด์์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ฐ์ํ์ต๋๋ค.