Community

๐Ÿ“Œ CSS-in-JS์™€ ํ—ค์–ด์ง€๋Š” ์ด์œ 

Spot์ด๋ผ๋Š” ์ œํ’ˆ์„ ๋งŒ๋“œ๋Š” ํŒ€์—์„œ Emotion์„ ๋ฒ„๋ฆฌ๊ณ  Sass Modules(+Utility Class)๋กœ ๋ฐ”๊พธ๊ฒŒ ๋œ ์ด์œ ๋ฅผ ๋‹ค๋ฃฌ ๊ธ€์ž…๋‹ˆ๋‹ค. ์ €์ž๋Š” CSS-in-JS์˜ ์žฅ์ ๊ณผ ๋‹จ์  ๊ทธ๋ฆฌ๊ณ  ๋ชป๋‚œ ์ (Ugly)์„ ์†Œ๊ฐœํ•˜๊ณ  ์„ฑ๋Šฅ ์ด์Šˆ๋กœ Emotion๊ณผ ํ—ค์–ด์กŒ๋‹ค๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค. ์žฅ์ ์€ ์„ธ ๊ฐ€์ง€. ์Šคํƒ€์ผ์„ ์ œํ•œ๋œ ์˜์—ญ์—์„œ ๊ด€๋ฆฌํ•œ๋‹ค๋Š” ์ (Locally-scoped styles), ์ปดํฌ๋„ŒํŠธ ์ฝ”๋“œ์™€ ์Šคํƒ€์ผ ์ฝ”๋“œ๋ฅผ ํ•œ ๊ณณ์— ๋ชจ์•„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ (Colocation) ๊ทธ๋ฆฌ๊ณ  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ณ€์ˆ˜๋ฅผ ์Šคํƒ€์ผ์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. ๋‹จ์ ๋„ ์„ธ ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. ๋Ÿฐํƒ€์ž„์— ์Šคํƒ€์ผ ์ง๋ ฌํ™”ํ•˜๋ฉด์„œ ์„ฑ๋Šฅ์— ๋ถ€์ •์ ์ธ ์˜ํ–ฅ์„ ์ค€๋‹ค๋Š” ์ , CSS-in-JS๋ฅผ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์ธํ•ด ๋ฒˆ๋“ค ํฌ๊ธฐ๊ฐ€ ์ปค์ง„๋‹ค๋Š” ์  ๊ทธ๋ฆฌ๊ณ  React DevTools๋ฅผ ๋ณด๊ธฐ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๊ฐ€ ๋๋˜ ๋ถ€๋ถ„์€ ์ฒซ๋ฒˆ์งธ ๋‹จ์ ์ธ ์Šคํƒ€์ผ ์ง๋ ฌํ™”๋กœ ์ธํ•œ ์„ฑ๋Šฅ ์ด์Šˆ์ž…๋‹ˆ๋‹ค. ๋ฆฌ์•กํŠธ๊ฐ€ ๋ Œ๋”๋งํ•˜๋Š” ์‹œ์ ์— ๋งค๋ฒˆ ์Šคํƒ€์ผ์„ ๊ณ„์‚ฐํ•˜๋Š” ๊ฒฝ์šฐ ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ๋ณด๋‹ค ์†๋„๊ฐ€ ๋А๋ ค์ง„๋‹ค๋Š” ์ ์ด์ฃ . ์ด๋ฅผ ์œ„ํ•ด ๋Ÿฐํƒ€์ž„ ๋น„์šฉ์ด ์—†๋Š” Sass๋ฅผ ๋„์ž…ํ•œ ๊ฒƒ์œผ๋กœ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์‹ค ๊ฐœ๋ฐœ์ž์˜ ํŽธ์˜, ๊ฒฝํ—˜(DX)์„ ๋†“๊ณ  ๋ดค์„ ๋• CSS-in-JS์˜ ์žฅ์ ์ด ํ›จ์”ฌ ๋‘๋“œ๋Ÿฌ์ง‘๋‹ˆ๋‹ค. ์ €์ž๋„ ๊ธ€์˜ ๋ง๋ฏธ์—์„œ "Spot์˜ ๊ฒฝ์šฐ, Emotion์˜ ๋Ÿฐํƒ€์ž„ ์„ฑ๋Šฅ๋น„์šฉ์ด DX์˜ ์ด์ ์„ ํ›จ์”ฌ ๋Šฅ๊ฐ€"ํ–ˆ๊ธฐ์— Emotion์„ ๋ฒ„๋ฆฌ๋Š” ๊ฒฐ์ •์„ ํ–ˆ๋‹ค๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ์ธ์ ์œผ๋กœ๋Š” ์ด ๊ธ€์ด ๋งŽ์€ ๊ฐœ๋ฐœ์ž๊ฐ€ CSS-in-JS๋ฅผ ๋” ์ข‹์€ ๋ฐฉ๋ฒ•์œผ๋กœ ์‚ฌ์šฉ๋˜์—ˆ์œผ๋ฉด ํ•˜๋Š” ๋งˆ์Œ์œผ๋กœ ์“ฐ์ธ ๊ฒŒ ์•„๋‹Œ๊ฐ€ ์‹ถ์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ๊ธฐ์ˆ ์ด๋“  ์˜ค์šฉํ•˜๋ฉด ๋‹จ์ ์ด ์žฅ์ ๋ณด๋‹ค ๊ทน๋Œ€ํ™”๋  ์ˆ˜ ์žˆ์œผ๋‹ˆ๊นŒ์š”. Spot ํŒ€๊ณผ ๊ฐ™์€ ์ƒํ™ฉ์ด ์•„๋‹ˆ๋ผ๋ฉด CSS-in-JS์˜ ์Šคํƒ€์ผ ์ง๋ ฌํ™”๋ฅผ ๊ณผ๋„ํ•˜๊ฒŒ ๋ฐœ์ƒ์‹œํ‚ค๊ณ  ์žˆ๋Š”์ง€ ๋ฐ˜์„ฑํ•˜๋Š” ์ชฝ์œผ๋กœ ์ด ๊ธ€์„ ์ดํ•ดํ•˜๋ฉด ์ข‹๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ญ๋‹ˆ๋‹ค.

์•Œ๋ฆผ

์•Œ๋ฆผ์ด ์—†์Šต๋‹ˆ๋‹ค