Obsidian v1.7.1์—์„œ โ€œDebug startup timeโ€ ๋ทฐ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ทฐ๋Š” ์•ฑ์ด ์‹œ์ž‘๋˜๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ์•ฑ ๋กœ๋“œ ์‹œ๊ฐ„์— ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. Obsidian์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘๋™ํ•˜๋„๋ก ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด, Obsidian์€ ์‚ฌ์šฉ์ž๊ฐ€ ์•ฑ๊ณผ ์ƒํ˜ธ ์ž‘์šฉํ•˜๊ธฐ ์ „์— ๋ชจ๋“  ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ๋กœ๋“œ ์‹œ๊ฐ„์„ ์–ด๋–ป๊ฒŒ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

  • ํ”Œ๋Ÿฌ๊ทธ์ธ onload๋ฅผ ๋‹จ์ˆœํ™”ํ•˜์„ธ์š”.
  • ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ทฐ ์ƒ์„ฑ์ž๋ฅผ ํ™•์ธํ•˜์„ธ์š”.
  • ์ผ๋ฐ˜์ ์ธ ํ•จ์ •์„ ํ”ผํ•˜์„ธ์š”.

๋จผ์ €, ์‰ฌ์šด ๊ฒƒ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ฉ์‹œ๋‹ค. ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”. esbuild, rollup ๋˜๋Š” webpack๊ณผ ๊ฐ™์€ ๋ฒˆ๋“ค๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, โ€œ๊ฐœ๋ฐœโ€ ๋นŒ๋“œ ๋˜๋Š” โ€œํ”„๋กœ๋•์…˜โ€ ๋นŒ๋“œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋” ์ž‘๊ณ , ๋” ๋นจ๋ฆฌ ๋กœ๋“œ๋˜๋ฉฐ, ํ…Œ์ŠคํŠธ์—๋งŒ ์‚ฌ์šฉ๋˜๋Š” ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ๋ฆด๋ฆฌ์Šค๋ฅผ ์ƒ์„ฑํ•  ๋•Œ main.js ํŒŒ์ผ์ด ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ์ธ์ง€ ํ™•์ธํ•˜์„ธ์š”.

๋นŒ๋“œ ๊ตฌ์„ฑ์—์„œ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ฝ”๋“œ๋ฅผ ์ตœ์†Œํ™”ํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ „์ฒด ํ”Œ๋Ÿฌ๊ทธ์ธ ํŒŒ์ผ ํฌ๊ธฐ๊ฐ€ ์ž‘์•„์ ธ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ๋””์Šคํฌ์—์„œ ์ฝ๊ณ  ๋กœ๋“œํ•˜๋Š” ์†๋„๊ฐ€ ๋นจ๋ผ์ง‘๋‹ˆ๋‹ค.

๋‹ค์Œ์œผ๋กœ, ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ onload ํ•จ์ˆ˜ ๋‚ด์—์„œ ๋น„์šฉ์ด ๋งŽ์ด ๋“œ๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”. onload ํ•จ์ˆ˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ์ดˆ๊ธฐํ™”์— ํ•„์š”ํ•œ ์ฝ”๋“œ๋งŒ ํฌํ•จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ๋ช…๋ น์–ด, ๋ทฐ ์œ ํ˜• ๋ฐ ๋งˆํฌ๋‹ค์šด ํ›„์ฒ˜๋ฆฌ๊ธฐ ๋“ฑ๋ก๊ณผ ๊ฐ™์€ ์•ฑ ๋“ฑ๋ก์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ๊ณ„์‚ฐ ๋น„์šฉ์ด ๋งŽ์ด ๋“ค๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์ž‘์—…์€ ํฌํ•จ๋˜์–ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์‚ฌ์šฉ์ž ์ •์˜ ๋ทฐ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ, ์‚ฌ์šฉ์ž ์ •์˜ ๋ทฐ ์ƒ์„ฑ์ž์— ์œ ์˜ํ•˜์„ธ์š”. Obsidian์ด ์—ด๋ฆด ๋•Œ, ์‚ฌ์šฉ์ž์˜ ์ž‘์—… ๊ณต๊ฐ„์— ์ €์žฅ๋œ ๋ชจ๋“  ๋ทฐ๋ฅผ ๋‹ค์‹œ ์—ฝ๋‹ˆ๋‹ค. ๋ทฐ๊ฐ€ ๋กœ๋“œ๋˜๋ฉด(๊ทธ๋ฆฌ๊ณ  ์ง€์—ฐ๋˜์ง€ ์•Š์œผ๋ฉด), ์ด๋Š” ์•ฑ ๋กœ๋“œ ์‹œ๊ฐ„์— ์ง์ ‘์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค.

์‹œ์ž‘ ์‹œ ์‹คํ–‰ํ•˜๊ณ  ์‹ถ์€ ์ฝ”๋“œ๊ฐ€ ์žˆ๋‹ค๋ฉด ์–ด๋””์— ๋‘์–ด์•ผ ํ•˜๋‚˜์š”?

๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ, ์ฝ”๋“œ๋ฅผ onLayoutReady ์ฝœ๋ฐฑ ์•ˆ์— ๋ž˜ํ•‘ํ•˜๊ณ  ์‹ถ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ฝœ๋ฐฑ์€ ์ง€์—ฐ๋˜๋ฉฐ Obsidian ๋กœ๋”ฉ์ด ์™„๋ฃŒ๋œ ํ›„์—๋งŒ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

ํ•จ์ •

vault.on('create') ์ˆ˜์‹ 

Obsidian์˜ vault ์ดˆ๊ธฐํ™” ํ”„๋กœ์„ธ์Šค์˜ ์ผ๋ถ€๋กœ, ๋ชจ๋“  ํŒŒ์ผ์— ๋Œ€ํ•ด create๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ํŒŒ์ผ์— ๋ฐ˜์‘ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ, ๋จผ์ € ์ž‘์—… ๊ณต๊ฐ„์ด ์ค€๋น„๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค. vault ์ด๋ฒคํŠธ ๋“ฑ๋ก์€ onLayoutReady ์ฝœ๋ฐฑ ๋‚ด์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ž‘์—… ๊ณต๊ฐ„์ด ์™„์ „ํžˆ ์ดˆ๊ธฐํ™”๋  ๋•Œ๊นŒ์ง€ ์ด๋ฒคํŠธ์— ๋ฐ˜์‘ํ•˜์ง€ ์•Š๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์˜ต์…˜ A. ๋ ˆ์ด์•„์›ƒ์ด ์ค€๋น„๋˜์—ˆ๋Š”์ง€ ํ™•์ธ

class MyPlugin extends Plugin {
    onload(app: App) {
	    super(app);
        this.registerEvent(this.app.vault.on('create', this.onCreate, this));
    }
 
	onCreate() {
	    if (!this.app.workspace.layoutReady) {
	      // ์ž‘์—… ๊ณต๊ฐ„์ด ์•„์ง ๋กœ๋”ฉ ์ค‘์ด๋ฏ€๋กœ ์•„๋ฌด๊ฒƒ๋„ ํ•˜์ง€ ์•Š์Œ
	      return;
	    }
		// ...
	}
}

์˜ต์…˜ B. ๋ ˆ์ด์•„์›ƒ์ด ์ค€๋น„๋˜๋ฉด ํ•ธ๋“ค๋Ÿฌ ๋“ฑ๋ก

class MyPlugin extends Plugin {
    onload(app: App) {
	    super(app);
	    this.app.workspace.onLayoutReady(() => {
	        this.registerEvent(this.app.vault.on('create', this.onCreate, this));
	    });
    }
 
	onCreate() {
		// ...
	}
}

ํ”Œ๋Ÿฌ๊ทธ์ธ ์ตœ์ ํ™”์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ๋„์›€์ด ํ•„์š”ํ•˜๋ฉด ๊ฐœ๋ฐœ์ž ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ๋„์›€์„ ์š”์ฒญํ•˜์„ธ์š”!