๐Ÿช„ Underwind โ€” ๋ฐ”๋žŒ์ด ๋ฐฉํ–ฅ์„ ๋ฐ”๊พธ๊ฒŒ ํ•˜๋Š” ์Šคํƒ€ํ„ฐ ํ…Œ๋งˆ

๋ฐœํ–‰: (2025๋…„ 12์›” 22์ผ ์˜คํ›„ 08:01 GMT+9)
6 min read
์›๋ฌธ: Dev.to

Source: Dev.to

๐Ÿช„ Underwind โ€” ๋ฐ”๋žŒ์ด ๋ฐฉํ–ฅ์„ ๋ฐ”๊พธ๊ฒŒ ํ•˜๋Š” ์Šคํƒ€ํ„ฐ ํ…Œ๋งˆ์˜ ํ‘œ์ง€ ์ด๋ฏธ์ง€

ํ•œ ๋ฒˆ์˜ ์ปค๋ฐ‹์ด ์›Œ๋“œํ”„๋ ˆ์Šค ๊ด‘ํ™œํ•œ ์™•๊ตญ์— ์žˆ์—ˆ์„ ๋•Œ, Underscores ๋ผ๋Š” ๊ฒธ์†ํ•œ ํ…Œ๋งˆ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค โ€” ์ตœ์†Œํ•œ์˜ HTML5 ํ…œํ”Œ๋ฆฟ๊ณผ ๊น”๋”ํ•œ PHP๋งŒ์œผ๋กœ๋„ ์ˆ™๋ จ๋œ ๊ฐœ๋ฐœ์ž๋“ค์„ ๋ฏธ์†Œ ์ง“๊ฒŒ ํ•˜๋Š” ๋ฒ ์–ด๋ณธ ์Šคํƒ€ํ„ฐ์˜€์Šต๋‹ˆ๋‹ค. ์Šคํƒ€์ผ์€ ๋งŽ์ง€ ์•Š์•˜์ง€๋งŒ, ๊ฟˆ์ด ์ž๋ผ๋‚  ํ† ๋Œ€๋ฅผ ๋งˆ๋ จํ•ด ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

์ˆ˜๋งŽ์€ ๋‹ฌ ๋™์•ˆ ์žฅ์ธ๋“ค์€ Understrap ๊ฐ™์€ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ด ๊ฒฌ๊ณ ํ•œ ๋ฟŒ๋ฆฌ ์œ„์— ์ ‘๋ชฉ์‹œ์ผฐ์Šต๋‹ˆ๋‹ค โ€” Underscores์˜ ๊ฐ€๋ฒผ์šด ์ฝ”๋“œ๋ฅผ Bootstrap์˜ ๋ฐ˜์‘ํ˜• ํŒŒ์›Œ์™€ ๊ฒฐํ•ฉํ•ด ๋งค ํ€˜์ŠคํŠธ๋งˆ๋‹ค ์‹œ๊ฐ„์„ ์ ˆ์•ฝํ•ด ์ฃผ๋Š” ์—”์ง„์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ฐœ๋ฐœ์ž๋“ค ์‚ฌ์ด์— ์ƒˆ๋กœ์šด ๋ฐ”๋žŒ์— ๋Œ€ํ•œ ์†์‚ญ์ž„์ด ํผ์ง€๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹คโ€ฆ

๐ŸŒฌ๏ธ ์ƒˆ๋กœ์šด ๋ฐ”๋žŒ์˜ ๋ถ€๋ฆ„

์ „์„ค์— ๋”ฐ๋ฅด๋ฉด ์ด์Šฌ์ด ๋งบํžŒ ์•„์นจ, VSโ€ฏCode ํƒญ์ด ๊ฐ€๋“ํ•œ ์ƒํ™ฉ์—์„œ Melasistema ํŒ€์ด Understrap์„ ๋ฐ”๋ผ๋ณด๋ฉฐ ํ•œ์ˆจ์„ ์‰ฌ์—ˆ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ Bootstrap์˜ ๊ฒฉ์ž์™€ ๊ทธ๋ฆฌ๋“œ ๊ตฌ์กฐ๋ฅผ ์‚ฌ๋ž‘ํ–ˆ์ง€๋งŒ, ๋งˆ์Œ์€ ์œ ํ‹ธ๋ฆฌํ‹ฐโ€‘ํผ์ŠคํŠธ ํด๋ž˜์Šค์™€ ๋ฒˆ์ฉ์ด๋Š” ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์— ๋›ฐ๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์˜๊ฐ์˜ ์ˆœ๊ฐ„์— ๊ทธ๋“ค์€ Underscores์˜ ๊ฒฌ๊ณ ํ•œ ๊ธฐ๋ฐ˜์„ ์žก๊ณ  ๋ฐ”๋žŒ์˜ ๋ฐฉํ–ฅ์„ ๋ฐ”๊พธ์–ด Tailwindโ€ฏCSS๋ฅผ ๋ฐ›์•„๋“ค์˜€์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ด ์ฐฝ์ž‘๋ฌผ์— ์ด๋ฆ„์„ ๋ถ™์˜€์Šต๋‹ˆ๋‹คโ€ฆ Underwind.

๐Ÿ“œ Underwind๊ฐ€ ๋งˆ๋ฒ• ๊ฐ™์€ ์ด์œ 

  • โœจ ํ˜„๋Œ€์ ์ธ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ โ€” Vite์™€ Hot Module Replacement (HMR)์œผ๋กœ ๊ตฌ๋™; ๋ˆˆ ๊นœ์งํ•  ์‚ฌ์ด์— ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋งˆ๋ฒ•์ฒ˜๋Ÿผ ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค.
  • โœจ ์œ ํ‹ธ๋ฆฌํ‹ฐโ€‘ํผ์ŠคํŠธ ์Šคํƒ€์ผ๋ง โ€” Tailwindโ€ฏCSS ๋•๋ถ„์— ์ปค์Šคํ…€ ํด๋ž˜์Šค ๋ฌด๊ฒŒ์— ์–ฝ๋งค์ด์ง€ ์•Š๊ณ  ๋งˆํฌ์—… ์•ˆ์—์„œ ์ง์ ‘ UI๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • โœจ Alpine.js ์ง€์› โ€” ๊ฑฐ์˜ ์˜ค๋ฒ„ํ—ค๋“œ ์—†์ด ์‚ด์•„์žˆ๋Š” ์ž‘์€ ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • โœจ ๊ฐ€๋ณ๊ณ  ๊ฒฌ๊ณ ํ•œ ๊ธฐ๋ฐ˜ โ€” Underscores ํ…œํ”Œ๋ฆฟ์ด ๋ผˆ๋Œ€๋ฅผ ํŠผํŠผํ•˜๊ฒŒ ์œ ์ง€ํ•ด, ์ƒ์ƒํ•˜๋Š” ์–ด๋–ค ๋งž์ถค ํ…Œ๋งˆ๋„ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • โœจ WooCommerce ์นœํ™”์  โ€” ์˜จ๋ผ์ธ ๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค๋กœ ์ง„์ถœํ•˜๋Š” ์ƒ์ธ๋“ค์—๊ฒŒ ํฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.
  • โœจ ํ†ตํ•ฉ ์ฝ”๋“œ ํ’ˆ์งˆ ๋„๊ตฌ โ€” ESLint, Prettier, PHP_CodeSniffer๊ฐ€ ๊ฐ€์žฅ ๊นŒ๋‹ค๋กœ์šด ์ฝ”๋“œ ํ‘œ์ค€๋„ ์ง€์ผœ์ค๋‹ˆ๋‹ค.

์ด๋Š” ๋‹จ์ˆœํ•œ ์Šคํƒ€ํ„ฐ๊ฐ€ ์•„๋‹ˆ๋ผ ๋‚ ๊ฐœ๊ฐ€ ๋‹ฌ๋ฆฐ ์บ”๋ฒ„์Šค์ด๋ฉฐ, ์ฐฝ์ž‘์ž๋“ค์ด ๊ทธ ์–ด๋А ๋•Œ๋ณด๋‹ค ๋น ๋ฅด๊ณ  ์ฆ๊ฒ๊ฒŒ ์ž‘์—…ํ•˜๋„๋ก ์ดˆ๋Œ€ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿš€ ์‹œ์ž‘ํ•˜๊ธฐ: ์˜์›…์˜ ํ€˜์ŠคํŠธ

  1. ์ €์žฅ์†Œ๋ฅผ ์›Œ๋“œํ”„๋ ˆ์Šค ํ…Œ๋งˆ ํด๋”์— ํด๋ก ํ•ฉ๋‹ˆ๋‹ค.
  2. npm install ๊ณผ composer install ๋กœ ์˜์กด์„ฑ์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.
  3. npm run dev ๋ฅผ ์‹คํ–‰ํ•ด ์ฆ‰์‹œ ๋ฆฌ๋กœ๋“œ๋˜๋Š” ์ž‘์—…์„ ๊ฐ์‹œํ•ฉ๋‹ˆ๋‹ค.
  4. npm run build ๋กœ ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ๋ฅผ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ ์ˆœ๊ฐ„, ํ•œ๋•Œ ๋นˆ ๋ฐฑ์ง€์˜€๋˜ ๊ฒƒ์ด Tailwind ํด๋ž˜์Šค๊ฐ€ ๋›์ฒ˜๋Ÿผ ํœ˜๋‚ ๋ฆฌ๋Š” ์žฅ์ธ์˜ ์ฆ๊ฑฐ์›€์œผ๋กœ ๋ณ€ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿงญ Underwind๊ฐ€ ์ค‘์š”ํ•œ ์ด์œ 

์›Œ๋“œํ”„๋ ˆ์Šค ํ…Œ๋งˆ ์™•๊ตญ์—๋Š” ๋‹ค์–‘ํ•œ ๊ธธ์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค: Underscores์˜ ์ˆœ์ˆ˜ํ•œ ๋ณธ์งˆ๋ถ€ํ„ฐ Understrap ๊ฐ™์€ Bootstrap ๊ธฐ๋ฐ˜ ํ”„๋ ˆ์ž„์›Œํฌ๊นŒ์ง€. ๊ทธ๋Ÿฌ๋‚˜ ํ˜„๋Œ€ ๋„๊ตฌ, ์œ ํ‹ธ๋ฆฌํ‹ฐโ€‘ํผ์ŠคํŠธ ์Šคํƒ€์ผ๋ง, ๊ทธ๋ฆฌ๊ณ  ์ •๊ตํ•œ ๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜์„ ํ•˜๋‚˜์˜ ์Šคํƒ€ํ„ฐ์— ๊ฒฐํ•ฉํ•œ ๊ฒฝ์šฐ๋Š” ๋“œ๋ญ…๋‹ˆ๋‹ค.

Underwind ๋Š” ๋‹จ์ˆœํžˆ ๊ธฐ๋ฐ˜์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ชจ๋ฉ˜ํ…€์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ฐ”๋กœ ์—ฌ๋Ÿฌ๋ถ„์—๊ฒŒ ์†์‚ญ์ด๋Š” ํ…Œ๋งˆ์ž…๋‹ˆ๋‹ค:

โ€œ์ฆ๊ฑฐ์›€์œผ๋กœ ๋””์ž์ธํ•˜๊ณ , ์†๋„๋กœ ๊ฐœ๋ฐœํ•˜์„ธ์š”. ๋ฐ”๋žŒ์ด ์—ฌ๋Ÿฌ๋ถ„์„ ์•ž์œผ๋กœ ๋‚˜์•„๊ฐ€๊ฒŒ ํ•  ๊ฒ๋‹ˆ๋‹ค.โ€

๐Ÿ’ซ ์—ํ•„๋กœ๊ทธ

๊ทธ๋ฆฌํ•˜์—ฌ ๋ ˆ๊ฑฐ์‹œ ์›Œํฌํ”Œ๋กœ์šฐ๊ฐ€ ์ €๋ฌผ๊ณ  Tailwind๊ฐ€ ์›Œ๋“œํ”„๋ ˆ์Šค ๊ฐœ๋ฐœ์— ์ฒซ ๋น›์„ ๋น„์ถ”๋Š” ์ˆœ๊ฐ„, Underwind ๊ฐ€ ์šฐ๋š ์„ฐ์Šต๋‹ˆ๋‹ค โ€” ์•ผ์‹ฌ์ฐฌ ํ…Œ๋งˆ ์ œ์ž‘์ž๋ฅผ ์œ„ํ•œ ์ƒˆ๋กœ์šด ํ‘œ์ค€์ด์ฃ .

์—ฌ๋Ÿฌ๋ถ„์˜ ์ปค๋ฐ‹์ด ์˜๋ฏธ ์žˆ๊ธฐ๋ฅผ, Tailwind ํด๋ž˜์Šค๊ฐ€ ์–ธ์ œ๋‚˜ ํ’์„ฑํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

Back to Blog

๊ด€๋ จ ๊ธ€

๋” ๋ณด๊ธฐ ยป

์šฐ๋ฆฌ๋Š” ๊ดด๋ฌผ์„ ์ฃฝ์˜€๋‹ค: WebForms Core 2.0 ์ถœ์‹œ ๋ฐ ๊ณตํฌ์˜ ํ”„๋ก ํŠธ์—”๋“œ ์‹œ๋Œ€์˜ ์ข…๋ง

์†Œ๊ฐœ: ํ˜„๋Œ€ ์•…๋ชฝ์˜ ํ•ด๋ถ€ web development์˜ ์„ธ๊ณ„๋Š” ๊ธธ์„ ์žƒ์—ˆ๋‹ค. ํ•œ๋•Œ ์ •๋ณด๋ฅผ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•œ ๋‹จ์ˆœํ•œ ๋„๊ตฌ์˜€๋˜ frontโ€‘end๊ฐ€ ์ง„ํ™”ํ–ˆ๋‹ค.

Angular ํ•™์Šต์„ ์œ„ํ•œ 7๊ฐ€์ง€ ์ตœ๊ณ ์˜ ๋ฆฌ์†Œ์Šค: ๋‚˜์˜ ๊ฐœ์ธ ์—ฌ์ • ๋ฐ ์„ ํƒ

Angular ํ•™์Šต์„ ์œ„ํ•œ 7๊ฐ€์ง€ ์ตœ๊ณ ์˜ ๋ฆฌ์†Œ์Šค: ๋‚˜์˜ ๊ฐœ์ธ ์—ฌ์ • ๋ฐ ์„ ํƒ์„ ์œ„ํ•œ ํ‘œ์ง€ ์ด๋ฏธ์ง€ https://media2.dev.to/dynamic/image/width=1000,height=420,fit=cover,gravity=auto,...

2026๋…„์— ์šฐ๋ฆฌ๋Š” ๋ชจ๋‘ ๊ฐœ์ธ ์›น์‚ฌ์ดํŠธ๋ฅผ ๊ณผ๋„ํ•˜๊ฒŒ ๋ณต์žกํ•˜๊ฒŒ ๋งŒ๋“ค๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™๋‹ค

๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์€ ๋„์šฐ๊ธฐ๋ณด๋‹ค ๋นŒ๋”๋“ค์—๊ฒŒ ๋” ํฐ ํ•ด๋ฅผ ๋ผ์น˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋„ค, ์ง„์‹ฌ์ž…๋‹ˆ๋‹ค. ์ด์•ผ๊ธฐํ•ด๋ด…์‹œ๋‹ค. ๋ฌธ์ œ ๋Œ€๋ถ€๋ถ„์˜ ํฌํŠธํด๋ฆฌ์˜ค์™€ ๊ฐœ์ธ ์›น์‚ฌ์ดํŠธ๋Š” 2026๋…„์— ๋„ˆ๋ฌด ๋งŽ์€ ์ผ์„ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค: - T...