OutlineToObsidian Project - swkim0128/PARA GitHub Wiki

Outline ํˆด๊ณผ Obsidian ํˆด์„ ๋™๊ธฐํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” Outline์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ์ปฌ PC์— ๋งˆํฌ๋‹ค์šด ํŒŒ์ผ๋กœ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ , Obsidian์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋กœ์ปฌ PC์—์„œ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ Outline๊ณผ ์ž๋™์œผ๋กœ ๋™๊ธฐํ™”๋ฉ๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ๋ชฉ์ 

  • ํšจ์œจ์ ์ธ ๋ฌธ์„œ ๊ด€๋ฆฌ: Outline๊ณผ Obsidian์˜ ๊ฐ•์ ์„ ํ™œ์šฉํ•˜์—ฌ ์œ ์—ฐํ•œ ๋ฌธ์„œ ๊ด€๋ฆฌ ์ฒด๊ณ„๋ฅผ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ ์œ ์ง€: ๋กœ์ปฌ ํŒŒ์ผ ์ˆ˜์ • ์‹œ Outline๊ณผ ๋™๊ธฐํ™”ํ•˜์—ฌ ๋ฐ์ดํ„ฐ์˜ ์ตœ์‹  ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

์š”๊ตฌ์‚ฌํ•ญ ๋ฐ ๊ธฐ๋Šฅ ์ •๋ฆฌ

ํ•„์ˆ˜ ์š”๊ตฌ์‚ฌํ•ญ

  1. Obsidian ์ปค๋ฎค๋‹ˆํ‹ฐ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ง€์›

    • Obsidian ๋‚ด์—์„œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋‹ค์šด๋กœ๋“œํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  2. ์„ค์ • ๊ธฐ๋Šฅ

    • Obsidian ๋‚ด์—์„œ Outline API ์—ฐ๋™์„ ์œ„ํ•œ URL ๋ฐ personal token์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • ํŠน์ • ์ปฌ๋ ‰์…˜์„ ์„ค์ •ํ•˜์—ฌ ํ•ด๋‹น ์ปฌ๋ ‰์…˜ ๋‚ด ๋ฌธ์„œ๋ฅผ ๋™๊ธฐํ™”ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
    • ๋™๊ธฐํ™” ์ฃผ๊ธฐ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  3. Outline API ์—ฐ๋™ ๋ฐ ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™”

    • Obsidian์—์„œ ์„ค์ •ํ•œ ์ปฌ๋ ‰์…˜์˜ ๋ฌธ์„œ๋ฅผ ๋งˆํฌ๋‹ค์šด ํŒŒ์ผ๋กœ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.
    • ๋กœ์ปฌ์—์„œ ์ˆ˜์ •๋œ ํŒŒ์ผ์ด Outline์—๋„ ์ž๋™์œผ๋กœ ๋ฐ˜์˜๋˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
    • Outline API๋ฅผ ๊ฐ์‹ธ์„œ Obsidian์—์„œ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
    • Outline์—์„œ ์ œ๊ณตํ•˜๋Š” API ์˜ˆ์ œ๋ฅผ ํฌํ•จํ•˜์—ฌ ๋ฌธ์„œํ™”ํ•ฉ๋‹ˆ๋‹ค.
  4. ํŒŒ์ผ ์ถฉ๋Œ ๋ฐฉ์ง€ ๋ฐ ๊ด€๋ฆฌ

    • ๊ฐ™์€ ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ฒฝ๋กœ ๋‚ด์— ๋™์ผํ•œ ์ œ๋ชฉ์˜ ํŒŒ์ผ์ด ์กด์žฌํ•  ๊ฒฝ์šฐ ํ•ด๊ฒฐ ๋ฐฉ์•ˆ์„ ๋งˆ๋ จํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์ „ ์กฐ์‚ฌ

  1. Obsidian ํ”Œ๋Ÿฌ๊ทธ์ธ ๊ฐœ๋ฐœ ๋ฐฉ๋ฒ• ํ™•์ธ

    • ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ณ€์ˆ˜ ์„ค์ • ๋ฐฉ๋ฒ• ํ™•์ธ
    • Obsidian์—์„œ ์™ธ๋ถ€ API ์š”์ฒญํ•˜๋Š” ๋ฐฉ๋ฒ• ํ™•์ธ
  2. Outline API ํ™•์ธ

    • Outline์—์„œ ์ œ๊ณตํ•˜๋Š” API ๋ชฉ๋ก์„ ๊ฒ€ํ† ํ•˜๊ณ  ํ™œ์šฉ ๋ฐฉ์•ˆ์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋Šฅ ๋ชฉ๋ก

1. Obsidian ์„ค์ • ๊ธฐ๋Šฅ

  • Obsidian ๋‚ด์—์„œ Outline API URL์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
  • Personal token์„ ์ž…๋ ฅํ•˜์—ฌ ์ธ์ฆ์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
  • ๋™๊ธฐํ™”ํ•  ์ปฌ๋ ‰์…˜์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
  • ๋™๊ธฐํ™” ์ฃผ๊ธฐ๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

2. ๋งˆํฌ๋‹ค์šด ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ ๋ฐ ๋™๊ธฐํ™” ๊ธฐ๋Šฅ

  • Obsidian์—์„œ ์„ค์ •ํ•œ ์ปฌ๋ ‰์…˜ ๋‚ด ๋ฌธ์„œ๋ฅผ ๋งˆํฌ๋‹ค์šด ํŒŒ์ผ๋กœ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.
  • ๋กœ์ปฌ ํŒŒ์ผ์ด ์ˆ˜์ •๋˜๋ฉด Outline์—๋„ ์ž๋™์œผ๋กœ ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค.
  • Outline์—์„œ ๋ฌธ์„œ๊ฐ€ ์ˆ˜์ •๋˜์—ˆ์„ ๊ฒฝ์šฐ, Obsidian ๋‚ด ํŒŒ์ผ๋„ ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค.

3. ํŒŒ์ผ ์ €์žฅ ๋ฐ ์—…๋กœ๋“œ ๊ธฐ๋Šฅ

  • Obsidian์—์„œ ํŒŒ์ผ์„ ์ €์žฅํ•˜๋ฉด Outline์—๋„ ์ž๋™ ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค.
  • ์ƒˆ๋กœ ์ƒ์„ฑํ•œ ํŒŒ์ผ์„ Outline์˜ ํŠน์ • ์œ„์น˜์— ์—…๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

4. ํŒŒ์ผ ์ถฉ๋Œ ๋ฐฉ์ง€

  • ๊ฐ™์€ ๋””๋ ‰ํ„ฐ๋ฆฌ ๋‚ด ๋™์ผํ•œ ์ œ๋ชฉ์˜ ํŒŒ์ผ์ด ์žˆ์„ ๊ฒฝ์šฐ, ์ด๋ฅผ ์ฒ˜๋ฆฌํ•  ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

Outline API ๊ธฐ๋Šฅ ์ •๋ฆฌ

์ฃผ์š” API ์—”๋“œํฌ์ธํŠธ

  1. ์ธ์ฆ

    • Endpoint: /auth (OAuth2 ์ง€์›)
    • ๊ธฐ๋Šฅ: ์‚ฌ์šฉ์ž ์ธ์ฆ ๋ฐ ํ† ํฐ ๋ฐœ๊ธ‰
  2. ๋ฌธ์„œ ๋ชฉ๋ก ๊ฐ€์ ธ์˜ค๊ธฐ

    • Endpoint: /documents.list
    • ๊ธฐ๋Šฅ: Outline ๋‚ด์˜ ๋ฌธ์„œ ๋ชฉ๋ก์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
    • ์‘๋‹ต ๋ฐ์ดํ„ฐ: ๋ฌธ์„œ ID, ์ œ๋ชฉ, ๊ฒฝ๋กœ, ์ˆ˜์ • ๋‚ ์งœ ๋“ฑ
  3. ๋ฌธ์„œ ์ƒ์„ธ ์ •๋ณด

    • Endpoint: /documents.info
    • ๊ธฐ๋Šฅ: ํŠน์ • ๋ฌธ์„œ์˜ ์ƒ์„ธ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
    • ์‘๋‹ต ๋ฐ์ดํ„ฐ: ๋ณธ๋ฌธ ๋‚ด์šฉ, ์ž‘์„ฑ์ž, ํƒœ๊ทธ ๋“ฑ
  4. ๋ฌธ์„œ ์ƒ์„ฑ

    • Endpoint: /documents.create
    • ๊ธฐ๋Šฅ: ์ƒˆ๋กœ์šด ๋ฌธ์„œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  5. ๋ฌธ์„œ ์ˆ˜์ •

    • Endpoint: /documents.update
    • ๊ธฐ๋Šฅ: ๊ธฐ์กด ๋ฌธ์„œ๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.
  6. ๋ฌธ์„œ ์‚ญ์ œ

    • Endpoint: /documents.delete
    • ๊ธฐ๋Šฅ: ๋ฌธ์„œ๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

Obsidian ํ”Œ๋Ÿฌ๊ทธ์ธ ์ž‘์„ฑ ๋ฐฉ๋ฒ•

๊ธฐ๋ณธ ๊ตฌ์กฐ

  1. ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์ • ํŒŒ์ผ

    • manifest.json: ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

      {
        "id": "outline-sync",
        "name": "Outline Sync",
        "version": "1.0.0",
        "author": "Your Name",
        "minAppVersion": "0.12.0"
      }
  2. ํ”Œ๋Ÿฌ๊ทธ์ธ ์—”ํŠธ๋ฆฌ ํŒŒ์ผ

    • main.js: ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ์ง„์ž…์ ์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ๋กœ์ง ์ž‘์„ฑ

      import { Plugin } from 'obsidian';
      
      export default class OutlineSyncPlugin extends Plugin {
        async onload() {
          console.log('Outline Sync Plugin Loaded');
          // ๋™๊ธฐํ™” ๋กœ์ง ์ถ”๊ฐ€
        }
      
        onunload() {
          console.log('Outline Sync Plugin Unloaded');
        }
      }

์ฃผ์š” ๊ธฐ๋Šฅ ๊ตฌํ˜„

  1. Outline API ํ˜ธ์ถœ

    • fetch API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Outline ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.
  2. ํŒŒ์ผ ๊ด€๋ฆฌ

    • Obsidian์˜ ํŒŒ์ผ API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ์ปฌ ํŒŒ์ผ์„ ์ฝ๊ณ  ์”๋‹ˆ๋‹ค.

      this.app.vault.adapter.write('path/to/file.md', 'Markdown content');
  3. ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ ๋“ฑ๋ก

    • ํŒŒ์ผ ๋ณ€๊ฒฝ ์ด๋ฒคํŠธ๋ฅผ ๊ฐ์ง€ํ•˜์—ฌ ๋™๊ธฐํ™” ํŠธ๋ฆฌ๊ฑฐ๋กœ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค.

      this.registerEvent(
        this.app.vault.on('modify', (file) => {
          console.log(`${file.path} was modified.`);
          // Outline ์—…๋ฐ์ดํŠธ ๋กœ์ง ์ถ”๊ฐ€
        })
      );

๋””๋ฒ„๊น… ๋ฐ ๋ฐฐํฌ

  • ๋””๋ฒ„๊น…: Obsidian ๊ฐœ๋ฐœ์ž ๋„๊ตฌ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์˜ค๋ฅ˜๋ฅผ ๋””๋ฒ„๊น…ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฐฐํฌ: GitHub ์ €์žฅ์†Œ์— ์ฝ”๋“œ๋ฅผ ์—…๋กœ๋“œํ•˜๊ณ  Obsidian ํ”Œ๋Ÿฌ๊ทธ์ธ ์ €์žฅ์†Œ์— ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.

์ฐจํ›„ ๊ณ„ํš

  1. ํ”„๋กœํ† ํƒ€์ž… ๊ตฌํ˜„

    • Outline API๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋กœ์ง๊ณผ Obsidian ํ”Œ๋Ÿฌ๊ทธ์ธ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.
  2. ๋™๊ธฐํ™” ๋กœ์ง ๊ฐœ์„ 

    • ์–‘๋ฐฉํ–ฅ ๋™๊ธฐํ™” ๋ฐ ์ถฉ๋Œ ๊ด€๋ฆฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์„ค๊ณ„ํ•ฉ๋‹ˆ๋‹ค.
  3. ์‚ฌ์šฉ์ž ํ”ผ๋“œ๋ฐฑ ๋ฐ˜์˜

    • ์ดˆ๊ธฐ ์‚ฌ์šฉ์ž ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›์•„ ๊ธฐ๋Šฅ์„ ๊ฐœ์„ ํ•ฉ๋‹ˆ๋‹ค.
  4. ์ตœ์ข… ๋ฐฐํฌ

    • ๋ฌธ์„œํ™” ๋ฐ ํŠœํ† ๋ฆฌ์–ผ ์ œ๊ณต ํ›„ ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค.
โš ๏ธ **GitHub.com Fallback** โš ๏ธ