Web

CSS ๋ญ ์“ธ๊นŒ์š”? (TailwindCSS vs Styled-components)

๐ŸŽฏ ๊ฐœ์š”

์ตœ๊ทผ ์‚ฌ์ด๋“œ ํ”„๋กœ์ ํŠธ๋ฅผ ๋ง‰ ์‹œ์ž‘ํ•˜๊ณ  ์ฃผ์ œ์™€ ๊ธฐ์ˆ ์Šคํƒ์„ ์ •ํ•˜๋ฉด์„œ CSS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ฌด์—‡์„ ์“ธ์ง€ ๊ณ ๋ฏผํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

"css...๋ญ ์“ธ๊นŒ์š”?"

"์–ด... ์ €๋Š” styled-components๋ฐ–์— ์•ˆ์จ๋ด์„œ ์ž˜ ๋ชจ๋ฅด๊ฒ ์–ด์š”ใ… "

์š”์ฆ˜ ์ž์ฃผ ์–ธ๊ธ‰๋˜๊ณ  ์žˆ๋‹ค๊ณ  ๋А๋ผ๋Š” Tailwind CSS (์ดํ•˜ tailwind)๋ฅผ ์‚ฌ์šฉํ•ด๋ณผ ๊ธฐํšŒ๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

์ƒˆ๋กœ์šด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉํ•ด๋ณผ ์ƒ๊ฐ์— ์‚ด์ง ์„ค๋ ˆ๋Š” ๋งˆ์Œ && ๊ฑฑ์ •๋˜๋Š” ๋งˆ์Œ์œผ๋กœ tailwind๋ฅผ ์‚ฌ์šฉํ•œ ์ด์œ , ์‚ฌ์šฉํ•ด๋ณธ ํ›„๊ธฐ์™€ ๋А๋‚€์ , Styled-components์™€์˜ ๋น„๊ตํ•˜๋ฉฐ ๋“œ๋Š” ๊ฐœ์ธ์ ์ธ ์ƒ๊ฐ์„ ์ •๋ฆฌํ•ด๋ณธ๋‹ค.

 

โš  ์‚ฌ์šฉ๋ฐฉ๋ฒ• ๋“ฑ์— ๋Œ€ํ•ด์„œ๋Š” ํ›จ์”ฌ ๋˜‘๋˜‘ํ•˜๊ณ  ๊น”๋”ํ•˜๊ฒŒ ์ž˜ ์ •๋ฆฌํ•ด์ฃผ์‹  ๋ถ„๋“ค์ด ๋งŽ๊ธฐ์— ๊ฐœ์ธ์ ์ธ ์ƒ๊ฐ๊ณผ ๊ฒฝํ—˜์„ ์œ„์ฃผ๋กœ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.

 

๐Ÿ“’ ๋„์ž… ๊ณ„๊ธฐ

์‚ฌ์‹ค ์‚ฌ์šฉํ•ด๋ณธ ์  ์—†๋Š” Next.js๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ์ ํŠธ์˜€๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฏธ ์ž‘์—… ์‹œ์ž‘ ์ „ ๊ณต๋ถ€ํ•  ์‹œ๊ฐ„์ด ๋„‰๋„‰ํ•˜์ง€ ์•Š์•˜๋‹ค. ์‹ฌ์ง€์–ด ์งง์€ ์‹œ๊ฐ„ ๋‚ด์— ๊ฒฐ๊ณผ๋ฅผ ๋‚ด์•ผํ•˜๋Š” ์ด ํ”„๋กœ์ ํŠธ์—์„œ tailwind๊นŒ์ง€ ๊ณต๋ถ€ํ•ด ์ ์šฉํ•  ์ˆ˜ ์žˆ์„๊นŒ ํ•˜๋Š” ๋ง‰์—ฐํ•จ๋„ ๋А๊ปด์กŒ๋‹ค. (์ด๋•Œ๊นŒ์ง€ ์ •ํ•ด์ง„ ํด๋ž˜์Šค๋“ค์ด ์—„์ฒญ ๋งŽ์•„์„œ ์™ธ์›Œ์•ผ ํ•œ๋‹ค๊ณ ๋งŒ ์•Œ๊ณ  ์žˆ์—ˆ๋‹ค.

๐Ÿ“Œ ํŠธ๋ Œ๋“œ

๋น ๋ฅด๊ฒŒ ๋ณ€ํ™”ํ•˜๊ณ  ํŠธ๋ Œ๋“œ๊ฐ€ ์ค‘์š”ํ•˜๊ณ  ์–ด์ฉŒ๊ตฌ์ €์ฉŒ๊ตฌ... ํ”„๋ก ํŠธ์—”๋“œ ๋ถ„์•ผํ•˜๋ฉด ๋นผ๋จน์„ ์ˆ˜ ์—†๋Š” ์ด์•ผ๊ธฐ๋‹ค.

๊ฐœ์ธ์ ์œผ๋กœ ์‚ฌ์šฉ์žํ’€์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(๋˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ)๋ฅผ ์„ ํƒํ•  ๋•Œ ๋ฌด์‹œํ•  ์ˆ˜ ์—†๋Š” ๊ธฐ์ค€์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

ํŠนํžˆ ๊ฒฝํ—˜์ด ์ ๊ณ  ์ง์ ‘ ์‚ฌ์šฉํ•ด๋ณด๋ฉด์„œ ๋ฐฐ์šฐ๋Š” ์Šคํƒ€์ผ์ธ ๋‚˜์—๊ฒŒ๋Š” ๋”์šฑ ์ค‘์š”ํ–ˆ๋‹ค.

npm trends ์—์„œ npm ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค ์ค‘์—์„œ ์‚ฌ์šฉ์ž ์ˆ˜๋ฅผ ๋น„๊ตํ•ด์„œ ์ฐจํŠธ๋กœ ํ™•์ธํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค.

emotion๋„ ๊ฐ™์ด ๋น„๊ตํ•ด๋ดค๋‹ค.

์ƒ๊ฐ๋ณด๋‹ค ํฐ ์ฐจ์ด๊ฐ€ ๋‚˜์ง€๋Š” ์•Š์•˜๋‹ค. ๊ฐ๊ฐ์˜ ์žฅ๋‹จ์ ์ด ๋ช…ํ™•ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ์ž ๊ฐœ์ธ์˜ ์„ ํ˜ธ๋„์— ๋”ฐ๋ผ ๋‚˜๋‰˜๋Š” ๊ฒƒ์œผ๋กœ ํ•ด์„ํ–ˆ๋‹ค.

๐Ÿ“Œ ๋งค์šฐ ์งง์€ ์‹œ๊ฐ„, ๋””์ž์ธ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์•˜๋‹ค

๋‘ ๋‹ฌ์•ˆ์— ๊ธฐํš๊ณผ ๋””์ž์ธ๊ณผ ๊ฐœ๋ฐœ์„ ๋ชจ๋‘ ์™„๋ฃŒํ•ด์•ผ ํ–ˆ๋Š”๋ฐ, ๊ธฐํš์ด ๊ณ„์† ์—Ž์–ด์ ธ...(ํ• ๋งŽํ•˜์•Š) 8์ฃผ ์ค‘ 4์ฃผ๋ฅผ ๊ธฐํš ๋‹จ๊ณ„์—์„œ ์‚ฌ์šฉํ–ˆ๋‹ค. 5์ฃผ์ฐจ๋ถ€ํ„ฐ ๋””์ž์ด๋„ˆ๋ถ„๋“ค์ด ๋””์ž์ธ ์‹œ์Šคํ…œ๊ณผ ํ™”๋ฉด์„ ํ•˜๋‚˜๋‘˜ ์ž‘์—…ํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ๊ณ  ํ”„๋ก ํŠธ์—”๋“œ๋„.๊ฑฐ์˜ ๋™์‹œ์— ๋ฐ”๋กœ๋ฐ”๋กœ ์ž‘์—…ํ•ด์„œ ์‹œ๊ฐ„์„ ์ตœ๋Œ€ํ•œ ํ™•๋ณดํ•ด์•ผ ํ–ˆ์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋”์šฑ ๋‚˜์ค‘์— ๋””์ž์ธ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ์ ์šฉ ๋“ฑ์˜ ์ถ”๊ฐ€ ์ž‘์—…๊ณผ ๊ทธ๋กœ ์ธํ•œ ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ๋ฅผ ์ตœ์†Œํ™”ํ•ด์•ผ ํ–ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ tailwind๋ฅผ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š”์ง€๋Š” ํ›„์— ์–ธ๊ธ‰ํ•œ๋‹ค.

๐Ÿ“’ TailwindCSS์˜ ์žฅ์ 

๐Ÿ“Œ ๊ณ ๋ฏผํ•  ํ•„์š” ์—†์ด ๊ฐ€์ ธ๋‹ค ์‚ฌ์šฉํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค. (utility first)

tailwind์˜ ๊ฐ€์žฅ ํฐ ํŠน์ง•์€ utility-first ๋ผ๋Š” ์ ์ด๋‹ค.

์œ ํ‹ธ๋ฆฌํ‹ฐ ํด๋ž˜์Šค๋ž€ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ์ด๋ฆ„์„ ๊ฐ€์ง„ ์ €์ˆ˜์ค€ ๋””์ž์ธ ํ† ํฐ์ด๋‹ค. ๊ฐ„๋‹จํžˆ ๋งํ•ด CSS๋ฅผ ๋ชจ์•„๋‘” ์ง‘ํ•ฉ์ด๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋ž˜์„œ ์ด๋ฏธ ์ •ํ•ด์ ธ์žˆ๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ ํด๋ž˜์Šค๋ฅผ ๊ฐ€์ ธ๋‹ค ์‚ฌ์šฉํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค. ์ปค์Šคํ„ฐ๋งˆ์ด์ง•๋„ ์ž์œ ๋กญ๋‹ค.

๊ทธ๋ž˜์„œ, ์ผ๊ด„์ ์œผ๋กœ ์ ์šฉ๋˜์–ด ์žˆ๋Š” ํด๋ž˜์Šค๊ฐ€ ์žˆ๋‹ค๋ฉด ๋””์ž์ธ ์ˆ˜์ • ์š”์ฒญ์ด ๋‘๋ ต์ง€ ์•Š๋‹ค.(?!) ์•„์ฃผ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

<div class="flex justify-center items-center">
  <h1>Tailwind!!</h1>
  <p class="text-lg font-medium">
      “Tailwind CSS is the only framework that I've seen scale 
    on large teams. It’s easy to customize, adapts to any design, 
    and the build size is tiny.”
  </p>
</div>

๐Ÿ“Œ ์Šคํƒ€์ผ์‹œํŠธ์™€ ํ™”๋ฉด์„ ๋ฒˆ๊ฐˆ์•„๊ฐ€๋ฉฐ ๊ฐœ๋ฐœํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ๋ณต์žกํ•ด์ง€๊ณ  ์ฝ”๋“œ๋“ค์ด ์ ์  ๋งŽ์•„์ง€๋ฉด์„œ ์™”๋‹ค๊ฐ”๋‹ค ์ฐพ์•„๊ฐ€๋ฉฐ ๊ฐœ๋ฐœํ•˜๋Š”๊ฒŒ ์€๊ทผ ์‹œ๊ฐ„์ด ์˜ค๋ž˜๊ฑธ๋ ธ์—ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  13์ธ์น˜ ๋ฏธ๋‹ˆ๋ฏธ ๋…ธํŠธ๋ถ์„ ์‚ฌ์šฉํ•˜๋Š” ๋‚˜์—๊ฒŒ๋Š” ๊ฝค ํฐ ์žฅ์ ์œผ๋กœ ๋А๊ปด์กŒ๋‹ค.

๐Ÿ“’ TailwindCSS์˜ ๋‹จ์ 

๐Ÿ“Œ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ํ—ท๊ฐˆ๋ฆฐ๋‹ค.

<div className="text-red-400 text-blue-400">Hello world</div>

์ƒ์‹์ ์œผ๋กœ ๋‹น์—ฐํžˆ text-blue-400์ด ์ ์šฉ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์ง€๋งŒ ๊ทธ๋ ‡์ง€ ์•Š๋‹ค.

> npx tailwindcss -i ./src/input.css -o ./dist/output.css --watch
// dist/output.css
...
.text-blue-400 {
    --tw-text-opacity: 1;
    color: rgb(96 165 250 / var(--tw-text-opacity));
}

.text-red-400 {
  --tw-text-opacity: 1;
  color: rgb(248 113 113 / var(--tw-text-opacity));
}
...

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

๐Ÿ“Œ ๊ฐ€๋…์„ฑ ํฌ๊ธฐ

๋กœ์ง๊ณผ ์Šคํƒ€์ผ์„ ๋ถ„๋ฆฌํ•˜๊ณ  ์‹ถ์–ดํ–ˆ๋˜ ๊ณผ๊ฑฐ์—์„œ ๋‹ค์‹œ ํ•ฉ์นœ๋‹ค...? ๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค๊ธฐ๋„ ํ–ˆ๊ณ 

์–ด์ฉ” ์ˆ˜ ์—†์ด ํด๋ž˜์Šค๊ฐ€ ๋งŽ์•„์ง€๋ฉด ๊ฐ€๋…์„ฑ์„ ์žƒ์„ ์ˆ˜ ๋ฐ–์— ์—†๋‹ค.

ํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” @apply๋ฅผ ์‚ฌ์šฉํ•ด ๊ฐ™์€ ์Šคํƒ€์ผ์„ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์–ด์„œ ํฐ ๋‹จ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค.

๋ฏธ๋””์—„์˜ ์ฝ”๋“œ ์ค‘ ์ผ๋ถ€๋ถ„ - https://medium.com/

๐Ÿ“’ Styled-components์™€์˜ ๋น„๊ต

๐Ÿ“Œ Styled-components์˜ ์žฅ์ 

Styled-components๋Š” ๋Œ€ํ‘œ์ ์ธ CSS-in-JS์ด๋‹ค.

- css์˜ ์ปดํฌ๋„ŒํŠธํ™”๋กœ ์Šคํƒ€์ผ์‹œํŠธ์˜ ํŒŒ์ผ์„ ์œ ์ง€๋ณด์ˆ˜ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. css๋ชจ๋ธ์„ ๋ฌธ์„œ ๋ ˆ๋ฒจ์ด ์•„๋‹Œ ์ปดํฌ๋„ŒํŠธ ๋ ˆ๋ฒจ๋กœ ์ถ”์ƒํ™”ํ•œ๋‹ค.

- Javascript์™€ ์ƒํƒœ๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์–ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํ™˜๊ฒฝ์„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

- Javascript์™€ CSS ์‚ฌ์ด์˜ ์ƒ์ˆ˜์™€ ํ•จ์ˆ˜๋ฅผ ํŽธํ•˜๊ฒŒ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋‹ค. (props๋ฅผ ์‚ฌ์šฉํ•œ ์กฐ๊ฑด๋ถ€ ์Šคํƒ€์ผ๋ง์ด ๊ฐ€๋Šฅํ•˜๋‹ค.)

๐Ÿ“Œ ๋น„๊ต ์ •๋ฆฌ

- tailwind๋Š” ์ •ํ•ด์ ธ์žˆ๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๋งŒํผ ์•„๋ฌด๋ž˜๋„ ์ฒ˜์Œ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ์ด๋ฆ„๋“ค์„ ์ตํžˆ๋Š”๋ฐ์— ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค๋Š” ์ ์ด ๋‹จ์ ์ผ ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์กฐ๊ธˆ๋งŒ ์‚ฌ์šฉํ•˜๋‹ค ๋ณด๋ฉด ์ž์ฃผ ์“ฐ์ด๋Š” ๊ฒƒ๋“ค์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ธˆ๋ฐฉ ์†์— ์ต๋Š”๋‹ค.

 

- Styled-components๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ์™ธ๋ถ€์—์„œ ์ „๋‹ฌ๋ฐ›๋Š” ์ธ์ž๋ฅผ ์‚ฌ์šฉํ•ด ์Šคํƒ€์ผ์„ ์ž…ํžˆ๋Š” ๊ฒƒ์ด ์†์— ์ต์—ˆ์—ˆ๋Š”๋ฐ, tailwind๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ์— ์ž„์˜์˜ ๊ฐ’์„ ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” Arbitrary value support ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ธฐ๋Š” ํ•˜์ง€๋งŒ (ex: w-[20px]) ํ”ฝ์…€ ๋“ฑ์˜ ๋‹จ์œ„ ๊ฐ’์„ ์ง์ ‘ ๋„ฃ์„ ์ˆ˜ ์žˆ์„ ๋ฟ ๋ณ€์ˆ˜๋ฅผ ๋„ฃ์„ ์ˆ˜๋Š” ์—†๋‹ค. ๊ทธ๋ž˜์„œ ์–ด์ฉ” ์ˆ˜ ์—†์ด ์ธ๋ผ์ธ ์Šคํƒ€์ผ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

 

- Styled-components์˜ ๊ฒฝ์šฐ ๋„ค์ด๋ฐ์„ ์•„๋ฌด๋ฆฌ ํ™•์‹คํžˆ ํ•ด๋„ ์ปดํฌ๋„ŒํŠธ์— ์–ด๋–ค ์Šคํƒ€์ผ์ด ์ ์šฉ๋˜์–ด ์žˆ๋Š”์ง€, ์›ํ•˜๋Š” ๋Œ€๋กœ ๊ทธ๋ ค์ง€์ง€ ์•Š์„ ๋•Œ ์›์ธ์ด ๋˜๋Š” ๋ถ€๋ถ„์ด ์–ด๋””์ธ์ง€ ์ฐพ๋Š” ๊ฒƒ์ด ๋ฒˆ๊ฑฐ๋กญ๋‹ค. ๋ฐ˜๋ฉด tailwind๋Š” ์–ด๋””์— ์–ด๋–ค ์Šคํƒ€์ผ์ด ์ ์šฉ๋˜์–ด ์žˆ๋Š”์ง€ ๋ฐ”๋กœ ์ง๊ด€์ ์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋น„๊ต์  ๋นจ๋ผ ๊ฐœ๋ฐœ ์†๋„๋ฅผ ์˜ฌ๋ฆด ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

๐Ÿ“’ ๋งˆ์น˜๋ฉฐ

์–ด๋А ๊ฒƒ์ด๋“  ๊ทธ๋ ‡๊ฒ ์ง€๋งŒ ์žฅ์ ๊ณผ ๋‹จ์ ์ด ํ™•์‹คํ•œ ๊ฒƒ ๊ฐ™๋‹ค. ์ฐพ์•„๋ณด๋‹ค ๋ณด๋‹ˆ tailwind์™€ styled-components๋ฅผ ๊ฐ™์ด ์‚ฌ์šฉํ•˜๊ธฐ๋„ ํ•˜๊ณ , ๋น„๊ต ์ •๋ฆฌ์˜ ๋‘ ๋ฒˆ์งธ ์ƒํ™ฉ์—์„œ ์–ด์ฉ” ์ˆ˜ ์—†์ด ์ธ๋ผ์ธ ์Šคํƒ€์ผ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•ด tailwind์™€ Twin Marco ๋ผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๊ธฐ๋„ ํ•œ๋‹ค.

[TailwindCSS] https://tailwindcss.com/

[Styled-components] https://styled-components.com/