๐Ÿš€ Svelte DX๋ฅผ ํ–ฅ์ƒ์‹œํ‚ค์„ธ์š”: Vite Svelte Inspector ๊ฐ€์ด๋“œ

๋ฐœํ–‰: (2025๋…„ 12์›” 31์ผ ์˜ค์ „ 09:06 GMT+9)
5 min read
์›๋ฌธ: Dev.to

Source: Dev.to

์œ„์˜ ๋งํฌ์— ํฌํ•จ๋œ ์ „์ฒด ํ…์ŠคํŠธ๋ฅผ ์ œ๊ณตํ•ด ์ฃผ์‹œ๋ฉด, ํ•ด๋‹น ๋‚ด์šฉ์„ ํ•œ๊ตญ์–ด๋กœ ๋ฒˆ์—ญํ•ด ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. (์ฝ”๋“œ ๋ธ”๋ก, URL, ๋งˆํฌ๋‹ค์šด ํ˜•์‹ ๋“ฑ์€ ๊ทธ๋Œ€๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.)

์†Œ๊ฐœ

๋ธŒ๋ผ์šฐ์ €์—์„œ UI ์š”์†Œ๋ฅผ ๋ฐ”๋ผ๋ณด๋ฉฐ, ๊ทธ ์š”์†Œ๊ฐ€ ์ •ํ™•ํžˆ ์–ด๋–ค ์ปดํฌ๋„ŒํŠธ ํŒŒ์ผ์— ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ด ๋ณธ ์ ์ด ์žˆ๋‚˜์š”?
Svelte์™€ Vite๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋ฉด, ๋ฐ”๋กœ ๊ทธ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด ์ฃผ๋Š” ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค: @sveltejs/vite-plugin-svelte-inspector.
์ด ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ๊ฐœ๋ฐœ ์ค‘์— ๋ธŒ๋ผ์šฐ์ €์— ์ง์ ‘ DOM ์ธ์ŠคํŽ™ํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ํ™œ์„ฑํ™”ํ•˜๋ฉด ์š”์†Œ ์œ„์— ๋งˆ์šฐ์Šค๋ฅผ ์˜ฌ๋ ค ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ํ™•์ธํ•˜๊ณ , ํด๋ฆญํ•˜๋ฉด ํ•ด๋‹น ์œ„์น˜๋ฅผ ์ž๋™์œผ๋กœ ์ฝ”๋“œ ํŽธ์ง‘๊ธฐ์—์„œ ์—ด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„ค์ •

  1. @sveltejs/vite-plugin-svelte๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”(ํ”ผ์–ด ์˜์กด์„ฑ์ž…๋‹ˆ๋‹ค).
  2. ์ธ์ŠคํŽ™ํ„ฐ๋Š” Svelte ์„ค์ • ๋กœ์ง์— ๋‚ด์žฅ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ์ตœ์‹  ๋ฒ„์ „์˜ Svelte/Vite๋ฅผ ์‚ฌ์šฉ ์ค‘์ด๋ผ๋ฉด ๋ณ„๋„์˜ ํŒจํ‚ค์ง€๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹คโ€”๊ทธ๋ƒฅ ํ™œ์„ฑํ™”ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ํ™œ์„ฑํ™”

// svelte.config.js
export default {
  vitePlugin: {
    inspector: true
  }
};

์‚ฌ์šฉ์ž ์ •์˜ ๊ตฌ์„ฑ

์ธ์ŠคํŽ™ํ„ฐ๋ฅผ ํ† ๊ธ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‚˜ ๋ฒ„ํŠผ ์œ„์น˜๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, ๋ถˆ๋ฆฌ์–ธ ๋Œ€์‹  ๊ฐ์ฒด๋ฅผ ์ „๋‹ฌํ•˜์„ธ์š”:

// svelte.config.js
export default {
  vitePlugin: {
    inspector: {
      toggleKeyCombo: 'alt-x',
      showToggleButton: 'always',
      toggleButtonPos: 'bottom-right'
    }
  }
};

ํ™˜๊ฒฝ ๋ณ€์ˆ˜

์˜ต์…˜์€ ํ™˜๊ฒฝ ๋ณ€์ˆ˜(์‰˜ ๋˜๋Š” .env ํŒŒ์ผ)๋ฅผ ํ†ตํ•ด์„œ๋„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์„ค์ • ํŒŒ์ผ๋ณด๋‹ค ์šฐ์„ ํ•ฉ๋‹ˆ๋‹ค.

# Set a custom key combo (unquoted string)
SVELTE_INSPECTOR_TOGGLE=alt-x

# Pass a full JSON options object
SVELTE_INSPECTOR_OPTIONS='{"holdMode": false, "toggleButtonPos": "bottom-left"}'

# Disable it completely for your machine
SVELTE_INSPECTOR_OPTIONS=false

์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์˜ต์…˜

์˜ต์…˜ํƒ€์ž…๊ธฐ๋ณธ๊ฐ’์„ค๋ช…
toggleKeyCombostring'alt-x'๊ฒ€์‚ฌ๊ธฐ๋ฅผ ์ผœ๊ณ  ๋„๋Š” ๋‹จ์ถ•ํ‚ค. ํŒ: control-shift-o ์™€ ๊ฐ™์ด ์ˆ˜์ •์ž์™€ ํ‚ค๋ฅผ ์กฐํ•ฉํ•ด ์‚ฌ์šฉํ•˜์„ธ์š”.
showToggleButton'always' | 'active' | 'never''active'ํ™”๋ฉด์— ํ‘œ์‹œ๋˜๋Š” UI ๋ฒ„ํŠผ์„ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค.
toggleButtonPos'top-right' | 'top-left' | 'bottom-right' | 'bottom-left''top-right'๋– ๋‹ค๋‹ˆ๋Š” ๋ฒ„ํŠผ์˜ ์œ„์น˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
holdModebooleantruetrue์ด๋ฉด ํ† ๊ธ€ ํ‚ค๋ฅผ ๋ˆ„๋ฅด๊ณ  ์žˆ๋Š” ๋™์•ˆ๋งŒ ๊ฒ€์‚ฌ๊ธฐ๊ฐ€ ํ™œ์„ฑํ™”๋˜๊ณ , false์ด๋ฉด ํ‚ค๊ฐ€ ์Šค์œ„์น˜ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
customStylesbooleantrueํ™œ์„ฑํ™”๋  ๋•Œ ๊ธฐ๋ณธ ์Šคํƒ€์ผ์„ ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค. ์ง์ ‘ ์Šคํƒ€์ผ์„ ๋ชจ๋‘ ์ œ๊ณตํ•˜๋ ค๋ฉด false๋กœ ์„ค์ •ํ•˜์„ธ์š”.
navKeysobject{ parent: 'ArrowUp', child: 'ArrowDown', next: 'ArrowRight', prev: 'ArrowLeft' }DOM ํŠธ๋ฆฌ ๋‚ด์—์„œ ํ‚ค๋ณด๋“œ ํƒ์ƒ‰์„ ์œ„ํ•œ ํ‚ค ๋งคํ•‘์ž…๋‹ˆ๋‹ค.
openKeystring'Enter'์„ ํƒํ•œ ์š”์†Œ์˜ ํŽธ์ง‘๊ธฐ๋ฅผ ์—ฌ๋Š” ํ‚ค์ž…๋‹ˆ๋‹ค.
escapeKeysarray['Backspace', 'Escape']๊ฒ€์‚ฌ๊ธฐ๋ฅผ ๋‹ซ๋Š” ํ‚ค๋“ค์ž…๋‹ˆ๋‹ค.

ํƒ์ƒ‰ ๋ฐ ์ ‘๊ทผ์„ฑ

ํ‚ค๋ณด๋“œ๋กœ DOM ํŠธ๋ฆฌ๋ฅผ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

  • ๋ถ€๋ชจ: ArrowUp
  • ์ž์‹: ArrowDown
  • ๋‹ค์Œ ํ˜•์ œ: ArrowRight
  • ์ด์ „ ํ˜•์ œ: ArrowLeft

Enter ๋ฅผ ๋ˆŒ๋Ÿฌ ํŽธ์ง‘๊ธฐ๋ฅผ ์—ด๊ณ , Backspace ๋˜๋Š” Escape ๋ฅผ ๋ˆŒ๋Ÿฌ ๊ฒ€์‚ฌ๊ธฐ๋ฅผ ๋‹ซ์Šต๋‹ˆ๋‹ค.

์Šคํƒ€์ผ๋ง

customStyles๊ฐ€ ํ™œ์„ฑํ™”๋˜๋ฉด ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์ตœ์†Œํ•œ์˜ ์Šคํƒ€์ผ์‹œํŠธ๋ฅผ ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค. ์ง์ ‘ ์Šคํƒ€์ผ๋งํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด:

  • โ€œ ์€ svelte-inspector-enabled ํด๋ž˜์Šค๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค.
  • ๋งˆ์šฐ์Šค๋ฅผ ์˜ฌ๋ฆฐ ์š”์†Œ๋Š” svelte-inspector-active-target ํด๋ž˜์Šค๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค.

์ด ํด๋ž˜์Šค๋“ค์„ ์ž์ฒด CSS์—์„œ ํƒ€๊ฒŸํŒ…ํ•˜์—ฌ ์ƒ‰์ƒ, ํ…Œ๋‘๋ฆฌ ๋“ฑ์„ ์‚ฌ์šฉ์ž ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŽธ์ง‘๊ธฐ ํ†ตํ•ฉ

โ€œํด๋ฆญโ€‘ํˆฌโ€‘์˜คํ”ˆโ€ ๊ธฐ๋Šฅ์€ ์‚ฌ์šฉ ์ค‘์ธ ํŽธ์ง‘๊ธฐ๊ฐ€ ์ธ์‹๋˜๋Š”์ง€์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค. VSโ€ฏCode, WebStorm ๋“ฑ๊ณผ ๊ฐ™์€ ํ‘œ์ค€ ํŽธ์ง‘๊ธฐ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ง€์›๋ฉ๋‹ˆ๋‹ค. ํŽธ์ง‘๊ธฐ๊ฐ€ ์—ด๋ฆฌ์ง€ ์•Š์„ ๊ฒฝ์šฐ:

  1. ํ”Œ๋Ÿฌ๊ทธ์ธ README์— ์žˆ๋Š” Supported Editors ๋ชฉ๋ก์„ ํ™•์ธํ•˜์„ธ์š”.
  2. Custom Editor ์ง€์นจ์„ ๋”ฐ๋ผ ํŠน์ • ๋ฐ”์ด๋„ˆ๋ฆฌ ๊ฒฝ๋กœ๋‚˜ ๋ช…๋ น์„ ์„ค์ •ํ•˜์„ธ์š”.

๊ฒฐ๋ก 

๋””๋ฒ„๊น…์„ ์ฆ๊ธฐ์„ธ์š”! ๐Ÿ›โžก๏ธโœจ
๊ฐ€์žฅ ์ตœ์‹  ์˜ต์…˜๊ณผ ์„ธ๋ถ€ ์‚ฌํ•ญ์€ GitHub์˜ ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

Back to Blog

๊ด€๋ จ ๊ธ€

๋” ๋ณด๊ธฐ ยป

๋””๋ฒ„๊น… StyleX + Vite: โ€˜Invalid Empty Selectorโ€™์˜ ๋ฏธ์Šคํ„ฐ๋ฆฌ

์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ์ „ํ˜€ ์•Œ๋ ค์ฃผ์ง€ ์•Š์„ ๋•Œ CSSโ€‘inโ€‘JS ๋ ˆ์ด์Šค ์ปจ๋””์…˜์„ ๋””๋ฒ„๊น…ํ•˜๋Š” ์ฒด๊ณ„์ ์ธ ์—ฌ์ • TL;DR โ€“ ๋งŒ์•ฝ Invalid empty selector ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋ฉด...

2005๋…„์‹์ฒ˜๋Ÿผ ๋А๊ปด์ง€์ง€ ์•Š๋Š” ํ˜„๋Œ€์ ์ธ POS ์‹œ์Šคํ…œ ๊ตฌ์ถ•

๋ฐค์ƒˆ๋„๋ก ๋‚˜๋ฅผ ์ž  ๋ชป ๋“ค๊ฒŒ ๋งŒ๋“  ๋ฌธ์ œ ์†”์งํžˆ ๋งํ•˜์ž๋ฉดโ€”๋‚˜๋Š” ๊ฐ€๊ฒŒ ์ฃผ์ธ๋“ค์ด ๊ตฌ์‹์ด๊ณ  ํˆฌ๋ฐ•ํ•œ POS ์‹œ์Šคํ…œ ๋•Œ๋ฌธ์— ๊ณ ์ƒํ•˜๋Š” ๋ชจ์Šต์„ ๋ณด๋Š” ๊ฒƒ์ด ์ง€๊ฒจ์›Œ์กŒ์–ด์š”. ๊ทธ ์‹œ์Šคํ…œ์€ ๋งˆ์น˜โ€ฆ