๐ฏ ๊ฐ์
์ต๊ทผ ์ฌ์ด๋ ํ๋ก์ ํธ๋ฅผ ๋ง ์์ํ๊ณ ์ฃผ์ ์ ๊ธฐ์ ์คํ์ ์ ํ๋ฉด์ CSS ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ฌด์์ ์ธ์ง ๊ณ ๋ฏผํ๊ฒ ๋์๋ค.
"css...๋ญ ์ธ๊น์?"
"์ด... ์ ๋ styled-components๋ฐ์ ์์จ๋ด์ ์ ๋ชจ๋ฅด๊ฒ ์ด์ใ "
์์ฆ ์์ฃผ ์ธ๊ธ๋๊ณ ์๋ค๊ณ ๋๋ผ๋ Tailwind CSS (์ดํ tailwind)๋ฅผ ์ฌ์ฉํด๋ณผ ๊ธฐํ๋ผ๊ณ ์๊ฐํ๋ค.
์๋ก์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉํด๋ณผ ์๊ฐ์ ์ด์ง ์ค๋ ๋ ๋ง์ && ๊ฑฑ์ ๋๋ ๋ง์์ผ๋ก tailwind๋ฅผ ์ฌ์ฉํ ์ด์ , ์ฌ์ฉํด๋ณธ ํ๊ธฐ์ ๋๋์ , Styled-components์์ ๋น๊ตํ๋ฉฐ ๋๋ ๊ฐ์ธ์ ์ธ ์๊ฐ์ ์ ๋ฆฌํด๋ณธ๋ค.
โ ์ฌ์ฉ๋ฐฉ๋ฒ ๋ฑ์ ๋ํด์๋ ํจ์ฌ ๋๋ํ๊ณ ๊น๋ํ๊ฒ ์ ์ ๋ฆฌํด์ฃผ์ ๋ถ๋ค์ด ๋ง๊ธฐ์ ๊ฐ์ธ์ ์ธ ์๊ฐ๊ณผ ๊ฒฝํ์ ์์ฃผ๋ก ๊ณต์ ํฉ๋๋ค.
๐ ๋์ ๊ณ๊ธฐ
์ฌ์ค ์ฌ์ฉํด๋ณธ ์ ์๋ Next.js๋ฅผ ์ฌ์ฉํ๋ ํ๋ก์ ํธ์๊ธฐ ๋๋ฌธ์ ์ด๋ฏธ ์์ ์์ ์ ๊ณต๋ถํ ์๊ฐ์ด ๋๋ํ์ง ์์๋ค. ์ฌ์ง์ด ์งง์ ์๊ฐ ๋ด์ ๊ฒฐ๊ณผ๋ฅผ ๋ด์ผํ๋ ์ด ํ๋ก์ ํธ์์ tailwind๊น์ง ๊ณต๋ถํด ์ ์ฉํ ์ ์์๊น ํ๋ ๋ง์ฐํจ๋ ๋๊ปด์ก๋ค. (์ด๋๊น์ง ์ ํด์ง ํด๋์ค๋ค์ด ์์ฒญ ๋ง์์ ์ธ์์ผ ํ๋ค๊ณ ๋ง ์๊ณ ์์๋ค.
๐ ํธ๋ ๋
๋น ๋ฅด๊ฒ ๋ณํํ๊ณ ํธ๋ ๋๊ฐ ์ค์ํ๊ณ ์ด์ฉ๊ตฌ์ ์ฉ๊ตฌ... ํ๋ก ํธ์๋ ๋ถ์ผํ๋ฉด ๋นผ๋จน์ ์ ์๋ ์ด์ผ๊ธฐ๋ค.
๊ฐ์ธ์ ์ผ๋ก ์ฌ์ฉ์ํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(๋๋ ํ๋ ์์ํฌ)๋ฅผ ์ ํํ ๋ ๋ฌด์ํ ์ ์๋ ๊ธฐ์ค์ด๋ผ๊ณ ์๊ฐํ๋ค.
ํนํ ๊ฒฝํ์ด ์ ๊ณ ์ง์ ์ฌ์ฉํด๋ณด๋ฉด์ ๋ฐฐ์ฐ๋ ์คํ์ผ์ธ ๋์๊ฒ๋ ๋์ฑ ์ค์ํ๋ค.
npm trends ์์ npm ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค ์ค์์ ์ฌ์ฉ์ ์๋ฅผ ๋น๊ตํด์ ์ฐจํธ๋ก ํ์ธํด๋ณผ ์ ์๋ค.
์๊ฐ๋ณด๋ค ํฐ ์ฐจ์ด๊ฐ ๋์ง๋ ์์๋ค. ๊ฐ๊ฐ์ ์ฅ๋จ์ ์ด ๋ช ํํ๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ์ ๊ฐ์ธ์ ์ ํธ๋์ ๋ฐ๋ผ ๋๋๋ ๊ฒ์ผ๋ก ํด์ํ๋ค.
๐ ๋งค์ฐ ์งง์ ์๊ฐ, ๋์์ธ ๋ณ๊ฒฝ ๊ฐ๋ฅ์ฑ์ด ๋์๋ค
๋ ๋ฌ์์ ๊ธฐํ๊ณผ ๋์์ธ๊ณผ ๊ฐ๋ฐ์ ๋ชจ๋ ์๋ฃํด์ผ ํ๋๋ฐ, ๊ธฐํ์ด ๊ณ์ ์์ด์ ธ...(ํ ๋งํ์) 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๋ฅผ ์ฌ์ฉํด ๊ฐ์ ์คํ์ผ์ ์ฌ์ฌ์ฉํ ์๋ ์์ด์ ํฐ ๋จ์ ์ด๋ผ๊ณ ์๊ฐํ์ง๋ ์๋๋ค.
๐ 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/
'Web' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๊ณตํต ์ปดํฌ๋ํธ ์ค๊ณ ์ฌ์ (0) | 2025.03.30 |
---|---|
ํ๋ก ํธ์๋ ์น ์ต์ ํ๋ฅผ ์ํ Code Splitting (0) | 2023.09.19 |