# [[Tailwind CSS vs Styled Components]] ## ๐Ÿ“Œ Brief Summary Tailwind CSS์™€ Styled Components๋Š” React ํ”„๋กœ์ ํŠธ์—์„œ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ๋‘ ๊ฐ€์ง€ ์ฃผ์š” ์Šคํƒ€์ผ๋ง ์ ‘๊ทผ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. Tailwind CSS๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ ํผ์ŠคํŠธ(utility-first) ๊ธฐ๋ฐ˜์œผ๋กœ ๋นŒ๋“œ ํƒ€์ž„์— ์ •์  CSS๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋Ÿฐํƒ€์ž„ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์—†๋Š” ๋ฐ˜๋ฉด, Styled Components๋Š” CSS-in-JS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ JavaScript ๋‚ด์—์„œ ์Šคํƒ€์ผ์„ ์ •์˜ํ•˜์—ฌ ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„์˜ ๋™์  ์Šคํƒ€์ผ๋ง์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ตœ๊ทผ์˜ React ์ƒํƒœ๊ณ„(ํŠนํžˆ ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ)์™€ ์„ฑ๋Šฅ ์ตœ์ ํ™” ํŠธ๋ Œ๋“œ์—์„œ๋Š” ๋Ÿฐํƒ€์ž„ ๋น„์šฉ์ด ์—†๊ณ  ๋กœ๋”ฉ ์†๋„๊ฐ€ ๋น ๋ฅธ Tailwind CSS๊ฐ€ ๋Œ€๊ทœ๋ชจ ํ™•์žฅ์„ฑ์„ ์œ„ํ•œ ์•„ํ‚คํ…์ฒ˜๋กœ ๋”์šฑ ๊ฐ๊ด‘๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ## ๐Ÿ“– Core ๊ธฐContent * **์•„ํ‚คํ…์ฒ˜ ๋ฐ ์ž‘๋™ ๋ฐฉ์‹ (Technical Mechanism):** * **Tailwind CSS:** CSS ๊ธฐ๋ฐ˜(CSS-first) ์ ‘๊ทผ ๋ฐฉ์‹์„ ์ทจํ•˜๋ฉฐ, ๊ฐœ๋ฐœ์ž๊ฐ€ ์ œ๊ณต๋˜๋Š” ํ•˜์œ„ ์ˆ˜์ค€(low-level) ์œ ํ‹ธ๋ฆฌํ‹ฐ ํด๋ž˜์Šค๋ฅผ HTML/JSX ๋งˆํฌ์—…์— ์ง์ ‘ ์กฐํ•ฉํ•˜์—ฌ ๋””์ž์ธ์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค [1-3]. JIT(Just-In-Time) ์ปดํŒŒ์ผ๋Ÿฌ(๋˜๋Š” v4์˜ Oxide ์—”์ง„)๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ๋œ ํด๋ž˜์Šค๋งŒ ์ •์  CSS๋กœ ์ƒ์„ฑํ•˜๋ฏ€๋กœ ๋Ÿฐํƒ€์ž„ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ „ํ˜€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค [4, 5]. * **Styled Components:** ํƒœ๊ทธ๋œ ํ…œํ”Œ๋ฆฟ ๋ฆฌํ„ฐ๋Ÿด(Tagged template literals)์„ ์‚ฌ์šฉํ•˜์—ฌ JavaScript ํŒŒ์ผ ๋‚ด์— ์ง์ ‘ CSS๋ฅผ ์ž‘์„ฑํ•˜๋Š” CSS-in-JS ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค [6, 7]. ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์‹คํ–‰๋  ๋•Œ ๋™์ ์œผ๋กœ CSS ๋ฌธ์ž์—ด์„ ์ƒ์„ฑํ•˜๊ณ  ์ฃผ์ž…ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•˜๋ฏ€๋กœ, Props๋‚˜ State์— ๋”ฐ๋ฅธ ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„์˜ ๋™์  ์Šคํƒ€์ผ๋ง ๊ตฌ์„ฑ์— ๋งค์šฐ ์œ ๋ฆฌํ•ฉ๋‹ˆ๋‹ค [2, 8, 9]. * **์„ฑ๋Šฅ ๋ฐ ๋ฒˆ๋“ค ํฌ๊ธฐ (Performance & Bundle Size):** * Tailwind CSS๋Š” ๋งค์šฐ ์ž‘์€ ํ”„๋กœ๋•์…˜ CSS ๋ฒˆ๋“ค ํฌ๊ธฐ(5-20kb)๋ฅผ ๊ฐ€์ง€๋ฉฐ, JavaScript ๋Ÿฐํƒ€์ž„ ์—ฐ์‚ฐ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„ CPU ๋Œ€๊ธฐ ์‹œ๊ฐ„, ์ตœ์ดˆ ์ž…๋ ฅ ์ง€์—ฐ(FID), ๋‹ค์Œ ํŽ˜์ธํŠธ์— ๋Œ€ํ•œ ์ƒํ˜ธ์ž‘์šฉ(INP) ๋“ฑ Core Web Vitals ์ง€ํ‘œ์—์„œ ์›”๋“ฑํ•œ ์„ฑ๋Šฅ์„ ๋ณด์ž…๋‹ˆ๋‹ค [4, 5, 10, 11]. ์‹ค์ œ๋กœ Styled Components์—์„œ Tailwind๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•œ ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์˜ ์‚ฌ๋ก€์—์„œ๋Š” ๋ชจ๋ฐ”์ผ FID๊ฐ€ 75.9%, INP๊ฐ€ 58.4% ๊ฐ์†Œํ•˜๋Š” ๋“ฑ ํš๊ธฐ์ ์ธ ์„ฑ๋Šฅ ํ–ฅ์ƒ์ด ๋ณด๊ณ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค [11-13]. * Styled Components๋Š” ์•ฝ 30kb์˜ JavaScript ๋ฒˆ๋“ค์ด ์ถ”๊ฐ€๋˜๋ฉฐ, CSS๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ฃผ์ž…ํ•˜๊ธฐ ์œ„ํ•œ ๋Ÿฐํƒ€์ž„ ๋น„์šฉ(CPU ์—ฐ์‚ฐ)์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค [4, 5, 14]. ์ด๋กœ ์ธํ•ด ๋™์ ์ธ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก ๋ Œ๋”๋ง ์†๋„๊ฐ€ ๋А๋ ค์ง€๋Š” ์„ฑ๋Šฅ ๋ณ‘๋ชฉ ํ˜„์ƒ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [15-17]. 1๋งŒ ๊ฐœ์˜ ๋ฆฌ์ŠคํŠธ ์•„์ดํ…œ ๋ Œ๋”๋ง ํ…Œ์ŠคํŠธ์—์„œ Tailwind๋Š” 85ms, Styled Components๋Š” 148ms๊ฐ€ ์†Œ์š”๋˜์—ˆ์Šต๋‹ˆ๋‹ค [18]. * **React Server Components (RSC) ํ˜ธํ™˜์„ฑ:** * Next.js App Router์™€ ๊ฐ™์ด React Context๊ฐ€ ์—†๋Š” ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ(RSC) ํ™˜๊ฒฝ์—์„œ๋Š” ์ปจํ…์ŠคํŠธ ๊ธฐ๋ฐ˜ ํ…Œ๋งˆ(Theme) ์ œ๊ณต์— ์˜์กดํ•˜๋Š” ๋Ÿฐํƒ€์ž„ CSS-in-JS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(Styled Components ๋“ฑ)๊ฐ€ ๋ณธ์งˆ์ ์œผ๋กœ ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ๊ตฌ์กฐ์  ๋ฌธ์ œ๋ฅผ ์•ˆ๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค [14, 15, 19, 20]. ๋น„๋ก Styled Components v6.3.0 ๋ฆด๋ฆฌ์Šค์—์„œ ์ธ๋ผ์ธ `