๐Ÿš€ ํ…Œ์ผ์œˆ๋“œ CSS ์™„๋ฒฝ ์ •๋ณต: ์ฐจ์„ธ๋Œ€ ์›น ๊ฐœ๋ฐœ ์‹œ์ž‘ํ•˜๊ธฐ

์›น ๊ฐœ๋ฐœ์˜ ์„ธ๊ณ„๋Š” ๋Š์ž„์—†์ด ์ง„ํ™”ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ํšจ์œจ์„ฑ๊ณผ ์ƒ์‚ฐ์„ฑ์€ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฐ€์น˜ ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ณต์žกํ•ด์ง€๋Š” ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค(UI) ์š”๊ตฌ์‚ฌํ•ญ ์†์—์„œ CSS ์ž‘์„ฑ ๋ฐฉ์‹ ์—ญ์‹œ ํฐ ๋ณ€ํ™”๋ฅผ ๋งž์ดํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ณ€ํ™”์˜ ์ค‘์‹ฌ์— ์žˆ๋Š” ๊ธฐ์ˆ  ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋ฐ”๋กœ ํ…Œ์ผ์œˆ๋“œ CSS(Tailwind CSS)์ž…๋‹ˆ๋‹ค. ํ…Œ์ผ์œˆ๋“œ CSS๋Š” ๊ธฐ์กด์˜ CSS ์ž‘์„ฑ ๋ฐฉ์‹๊ณผ๋Š” ๋‹ค๋ฅธ ‘์œ ํ‹ธ๋ฆฌํ‹ฐ ์šฐ์„ (Utility-First)’ ์ ‘๊ทผ ๋ฐฉ์‹์„ ํ†ตํ•ด ๊ฐœ๋ฐœ ์†๋„๋ฅผ ํ˜์‹ ์ ์œผ๋กœ ๋†’์ด๊ณ , ์ผ๊ด€์„ฑ ์žˆ๋Š” ๋””์ž์ธ ์‹œ์Šคํ…œ ๊ตฌ์ถ•์„ ์šฉ์ดํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค.

ํ˜น์‹œ “CSS ํด๋ž˜์Šค ์ด๋ฆ„ ์ง“๋Š” ๋ฐ ์‹œ๊ฐ„์„ ๋„ˆ๋ฌด ๋งŽ์ด ๋บ๊ธด๋‹ค”, “CSS ์ฝ”๋“œ๊ฐ€ ์ ์  ๋น„๋Œ€ํ•ด์ง€๊ณ  ๊ด€๋ฆฌํ•˜๊ธฐ ์–ด๋ ต๋‹ค”, “ํŒ€์› ๊ฐ„์˜ CSS ์Šคํƒ€์ผ๋ง ๋ฐฉ์‹์ด ๋‹ฌ๋ผ ์ผ๊ด€์„ฑ์ด ๊นจ์ง„๋‹ค” ์™€ ๊ฐ™์€ ๊ณ ๋ฏผ์„ ํ•ด๋ณด์…จ๋‚˜์š”? ํ…Œ์ผ์œˆ๋“œ CSS๋Š” ๋ฐ”๋กœ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋“ค์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋“ฑ์žฅํ–ˆ์Šต๋‹ˆ๋‹ค. ์ตœ๊ทผ State of CSS 2023 ์„ค๋ฌธ์กฐ์‚ฌ์— ๋”ฐ๋ฅด๋ฉด, ํ…Œ์ผ์œˆ๋“œ CSS๋Š” ๊ฐœ๋ฐœ์ž๋“ค ์‚ฌ์ด์—์„œ ์••๋„์ ์ธ ๋งŒ์กฑ๋„์™€ ์‚ฌ์šฉ๋ฅ  ์ฆ๊ฐ€์„ธ๋ฅผ ๋ณด์ด๋ฉฐ ๊ฐ€์žฅ ์ฃผ๋ชฉ๋ฐ›๋Š” CSS ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ์ž๋ฆฌ๋งค๊น€ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ํ…Œ์ผ์œˆ๋“œ CSS๊ฐ€ ํ˜„๋Œ€ ์›น ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ ์–ผ๋งˆ๋‚˜ ๊ฐ•๋ ฅํ•œ ์†”๋ฃจ์…˜์ธ์ง€๋ฅผ ์ฆ๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ธ€์—์„œ๋Š” ํ…Œ์ผ์œˆ๋“œ CSS๊ฐ€ ๋ฌด์—‡์ธ์ง€, ์™œ ์ˆ˜๋งŽ์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์—ด๊ด‘ํ•˜๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ์–ด๋–ป๊ฒŒ ์‹œ์ž‘ํ•˜๊ณ  ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ๋ชจ๋“  ๊ฒƒ์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค. ํ…Œ์ผ์œˆ๋“œ CSS์˜ ํ•ต์‹ฌ ๊ฐœ๋…๋ถ€ํ„ฐ ์‹ค์ „ ํ™œ์šฉ ํŒ, ๊ทธ๋ฆฌ๊ณ  ๋” ๊นŠ์ด ์žˆ๋Š” ํ•™์Šต์„ ์œ„ํ•œ ๋กœ๋“œ๋งต๊นŒ์ง€, ์—ฌ๋Ÿฌ๋ถ„์ด ํ…Œ์ผ์œˆ๋“œ CSS ์ „๋ฌธ๊ฐ€๋กœ ๊ฑฐ๋“ญ๋‚˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“  ์ •๋ณด๋ฅผ ๋‹ด์•˜์Šต๋‹ˆ๋‹ค. ์ด ๊ธ€์„ ํ†ตํ•ด ์—ฌ๋Ÿฌ๋ถ„์€ ํ…Œ์ผ์œˆ๋“œ CSS์˜ ๋งค๋ ฅ์„ ๋ฐœ๊ฒฌํ•˜๊ณ , ์ฐจ์„ธ๋Œ€ ์›น ๊ฐœ๋ฐœ ํŠธ๋ Œ๋“œ๋ฅผ ์ด๋Œ์–ด๊ฐˆ ์ค€๋น„๋ฅผ ๋งˆ์น  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Tailwind CSS ๋กœ๊ณ ์™€ ์ฝ”๋“œ ์˜ˆ์‹œ

โœจ ํ…Œ์ผ์œˆ๋“œ CSS๋ž€ ๋ฌด์—‡์ธ๊ฐ€? ํ˜„๋Œ€ ์›น ๊ฐœ๋ฐœ์˜ ์ƒˆ๋กœ์šด ๊ธฐ์ค€

ํ…Œ์ผ์œˆ๋“œ CSS๋Š” ๋ฏธ๋ฆฌ ์ •์˜๋œ ์ˆ˜๋งŽ์€ ‘์œ ํ‹ธ๋ฆฌํ‹ฐ ํด๋ž˜์Šค’๋“ค์„ HTML ์š”์†Œ์— ์ง์ ‘ ์ ์šฉํ•˜์—ฌ ์Šคํƒ€์ผ๋งํ•˜๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ ์šฐ์„ (Utility-First) CSS ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค. ๊ธฐ์กด์˜ ๋ฐฉ์‹์ฒ˜๋Ÿผ ๋ณ„๋„์˜ CSS ํŒŒ์ผ์— `.card`, `.button`๊ณผ ๊ฐ™์€ ์‹œ๋งจํ‹ฑ(semantic) ํด๋ž˜์Šค ์ด๋ฆ„์„ ์ •์˜ํ•˜๊ณ  ์Šคํƒ€์ผ์„ ์ž‘์„ฑํ•˜๋Š” ๋Œ€์‹ , ํ…Œ์ผ์œˆ๋“œ๋Š” `flex`, `pt-4` (padding-top: 1rem), `text-center`์™€ ๊ฐ™์ด ์ง๊ด€์ ์ธ ์—ญํ• ์„ ํ•˜๋Š” ์ž‘์€ ๋‹จ์œ„์˜ ํด๋ž˜์Šค๋“ค์„ ์กฐํ•ฉํ•˜์—ฌ UI๋ฅผ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋งˆ์น˜ ๋ ˆ๊ณ  ๋ธ”๋ก์„ ์กฐ๋ฆฝํ•˜๋“ฏ, ํ•„์š”ํ•œ ์Šคํƒ€์ผ ์กฐ๊ฐ๋“ค์„ ๊ฐ€์ ธ์™€ ์›ํ•˜๋Š” ๋””์ž์ธ์„ ๋น ๋ฅด๊ณ  ์œ ์—ฐํ•˜๊ฒŒ ๋งŒ๋“ค์–ด๋‚ด๋Š” ๋ฐฉ์‹๊ณผ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ ‘๊ทผ ๋ฐฉ์‹์€ ์ฒ˜์Œ์—๋Š” ๋‹ค์†Œ ์ƒ์†Œํ•˜๊ฒŒ ๋Š๊ปด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. HTML ๋งˆํฌ์—…์ด ๋‹ค์†Œ ๊ธธ์–ด์ง€๊ณ  ๋ณต์žกํ•ด ๋ณด์ผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ๋ฐฉ์‹์€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๊ฐ•๋ ฅํ•œ ์ด์ ์„ ์ œ๊ณตํ•˜๋ฉฐ, ์ด๊ฒƒ์ด ๋ฐ”๋กœ ํ…Œ์ผ์œˆ๋“œ CSS๊ฐ€ ํ˜„๋Œ€ ์›น ๊ฐœ๋ฐœ์˜ ์ƒˆ๋กœ์šด ๊ธฐ์ค€์œผ๋กœ ๋– ์˜ค๋ฅด๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” ๋” ์ด์ƒ CSS ํด๋ž˜์Šค ์ด๋ฆ„์„ ๊ณ ๋ฏผํ•˜๊ฑฐ๋‚˜, ๊ธฐ์กด ์Šคํƒ€์ผ๊ณผ์˜ ์ถฉ๋Œ์„ ๊ฑฑ์ •ํ•˜๊ฑฐ๋‚˜, ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” CSS ์ฝ”๋“œ๊ฐ€ ์Œ“์ด๋Š” ๊ฒƒ์„ ์—ผ๋ คํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ์Šคํƒ€์ผ์„ ์ฆ‰์‹œ ์ ์šฉํ•˜๊ณ , ํ”„๋กœ์ ํŠธ ์ „์ฒด์— ๊ฑธ์ณ ์ผ๊ด€๋œ ๋””์ž์ธ ์–ธ์–ด๋ฅผ ์œ ์ง€ํ•˜๋ฉฐ, ์ตœ์ข…์ ์œผ๋กœ๋Š” ๋งค์šฐ ์ตœ์ ํ™”๋œ CSS ๊ฒฐ๊ณผ๋ฌผ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿงฉ ์œ ํ‹ธ๋ฆฌํ‹ฐ ์šฐ์„ (Utility-First) ์ ‘๊ทผ ๋ฐฉ์‹์˜ ์ดํ•ด

์œ ํ‹ธ๋ฆฌํ‹ฐ ์šฐ์„  ์ ‘๊ทผ ๋ฐฉ์‹์˜ ํ•ต์‹ฌ ์ฒ ํ•™์€ ์Šคํƒ€์ผ๋ง์˜ ์žฌ์‚ฌ์šฉ ๋‹จ์œ„๋ฅผ ๊ฐœ๋ณ„ CSS ์†์„ฑ ์ˆ˜์ค€์œผ๋กœ ๋‚ฎ์ถ”๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ฐ€์šด๋ฐ ์ •๋ ฌ๋œ ํŒŒ๋ž€์ƒ‰ ํ…์ŠคํŠธ๋ฅผ ๊ฐ€์ง„ ๋ฒ„ํŠผ์„ ๋งŒ๋“ ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ด…์‹œ๋‹ค. ์ „ํ†ต์ ์ธ ๋ฐฉ์‹์—์„œ๋Š” `.btn-primary`์™€ ๊ฐ™์€ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๊ณ  CSS ํŒŒ์ผ์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •์˜ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค:


.btn-primary {
  background-color: blue;
  color: white;
  padding: 0.5rem 1rem;
  border-radius: 0.25rem;
  text-align: center;
}

๊ทธ๋ฆฌ๊ณ  HTML์—์„œ๋Š” `` ์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํ…Œ์ผ์œˆ๋“œ CSS์—์„œ๋Š” HTML์— ์ง์ ‘ ์œ ํ‹ธ๋ฆฌํ‹ฐ ํด๋ž˜์Šค๋ฅผ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค:



์—ฌ๊ธฐ์„œ `bg-blue-500`์€ ๋ฐฐ๊ฒฝ์ƒ‰์„ ํŒŒ๋ž€์ƒ‰ ๊ณ„์—ด๋กœ, `text-white`๋Š” ๊ธ€์ž์ƒ‰์„ ํฐ์ƒ‰์œผ๋กœ, `py-2`๋Š” ์ƒํ•˜ ํŒจ๋”ฉ์„, `px-4`๋Š” ์ขŒ์šฐ ํŒจ๋”ฉ์„, `rounded`๋Š” ๋ชจ์„œ๋ฆฌ๋ฅผ ๋‘ฅ๊ธ€๊ฒŒ, `text-center`๋Š” ํ…์ŠคํŠธ๋ฅผ ๊ฐ€์šด๋ฐ ์ •๋ ฌํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ํด๋ž˜์Šค๋Š” ํ•˜๋‚˜์˜ ์ž‘์€ ์Šคํƒ€์ผ๋ง ์ฑ…์ž„์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

์ด ๋ฐฉ์‹์˜ ์žฅ์ ์€ ๋ช…ํ™•ํ•ฉ๋‹ˆ๋‹ค. ์ฒซ์งธ, CSS ํŒŒ์ผ์„ ๊ฑฐ์˜ ์ž‘์„ฑํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์Šคํƒ€์ผ๋ง์ด HTML ๋‚ด์—์„œ ์ด๋ฃจ์–ด์ง€๋ฏ€๋กœ ์ปจํ…์ŠคํŠธ ์ „ํ™˜ ๋น„์šฉ์ด ์ค„์–ด๋“ญ๋‹ˆ๋‹ค. ๋‘˜์งธ, ํด๋ž˜์Šค ์ด๋ฆ„ ์ž‘๋ช…์˜ ๊ณ ํ†ต์—์„œ ํ•ด๋ฐฉ๋ฉ๋‹ˆ๋‹ค. `.user-profile-card-header-title`๊ณผ ๊ฐ™์€ ๊ธธ๊ณ  ๋ณต์žกํ•œ ์ด๋ฆ„์„ ๊ณ ๋ฏผํ•  ํ•„์š” ์—†์ด, ํ•„์š”ํ•œ ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ์กฐํ•ฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์…‹์งธ, CSS ๋ณ€๊ฒฝ์ด ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค. ํŠน์ • ์š”์†Œ์˜ ์Šคํƒ€์ผ์„ ๋ณ€๊ฒฝํ•ด๋„ ๋‹ค๋ฅธ ์š”์†Œ์— ์˜ํ–ฅ์„ ๋ฏธ์น  ๊ฑฑ์ •์ด ์—†์Šต๋‹ˆ๋‹ค. ์œ ํ‹ธ๋ฆฌํ‹ฐ ํด๋ž˜์Šค๋Š” ๋ฒ”์œ„๊ฐ€ ํ•ด๋‹น ์š”์†Œ๋กœ ํ•œ์ •๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋„ท์งธ, ๋””์ž์ธ ์ผ๊ด€์„ฑ ์œ ์ง€๊ฐ€ ์šฉ์ดํ•ฉ๋‹ˆ๋‹ค. ๋ฏธ๋ฆฌ ์ •์˜๋œ ๋””์ž์ธ ํ† ํฐ(์ƒ‰์ƒ, ๊ฐ„๊ฒฉ, ํฐํŠธ ํฌ๊ธฐ ๋“ฑ)์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์œ ํ‹ธ๋ฆฌํ‹ฐ๊ฐ€ ์ƒ์„ฑ๋˜๋ฏ€๋กœ, ํ”„๋กœ์ ํŠธ ์ „์ฒด์—์„œ ํ†ต์ผ๋œ ์Šคํƒ€์ผ์„ ์ ์šฉํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.

๋ฌผ๋ก , HTML ๋งˆํฌ์—…์ด ๊ธธ์–ด์ง€๋Š” ๊ฒƒ์€ ๋‹จ์ ์œผ๋กœ ์ง€์ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ํ”„๋ ˆ์ž„์›Œํฌ(React, Vue, Svelte ๋“ฑ)์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ˜๋ณต๋˜๋Š” ๋งˆํฌ์—…์„ ์ปดํฌ๋„ŒํŠธ๋กœ ์ถ”์ƒํ™”ํ•˜์—ฌ ์ด ๋ฌธ์ œ๋ฅผ ์™„ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ํ…Œ์ผ์œˆ๋“œ์˜ `@apply` ์ง€์‹œ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ ์กฐํ•ฉ์„ ๋ณ„๋„์˜ CSS ํด๋ž˜์Šค๋กœ ๋ฌถ์„ ์ˆ˜๋„ ์žˆ์–ด, ํ•„์š”์— ๋”ฐ๋ผ ์œ ์—ฐํ•˜๊ฒŒ ๋Œ€์ฒ˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“œ ํ…Œ์ผ์œˆ๋“œ CSS์˜ ํƒ„์ƒ ๋ฐฐ๊ฒฝ๊ณผ ๋ฐœ์ „ ๊ณผ์ •

ํ…Œ์ผ์œˆ๋“œ CSS๋Š” 2017๋…„ Adam Wathan๊ณผ ๊ทธ์˜ ๋™๋ฃŒ๋“ค์— ์˜ํ•ด ์ฒ˜์Œ ๊ณต๊ฐœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ๊ธฐ์กด์˜ CSS ๋ฐฉ๋ฒ•๋ก (BEM, OOCSS ๋“ฑ)์ด๋‚˜ ๋ถ€ํŠธ์ŠคํŠธ๋žฉ(Bootstrap)๊ณผ ๊ฐ™์€ ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ๊ฐ€์ง„ ํ•œ๊ณ„๋ฅผ ๋Š๋ผ๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ, ์ปค์Šคํ…€ ๋””์ž์ธ์„ ๊ตฌํ˜„ํ•  ๋•Œ ๊ธฐ์กด ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์Šคํƒ€์ผ์„ ๋ฎ์–ด์“ฐ๊ฑฐ๋‚˜(override) ํ™•์žฅํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ณต์žก์„ฑ๊ณผ ๋น„ํšจ์œจ์„ฑ์— ์ฃผ๋ชฉํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋“ค์€ CSS ์ž‘์„ฑ์˜ ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ ์ž ํ–ˆ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฌผ์ด ๋ฐ”๋กœ ์œ ํ‹ธ๋ฆฌํ‹ฐ ์šฐ์„  ์ ‘๊ทผ ๋ฐฉ์‹์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” ๋งŽ์€ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์ƒ์†Œํ•˜๊ณ  ๋…ผ๋ž€์˜ ์—ฌ์ง€๊ฐ€ ์žˆ๋Š” ์ ‘๊ทผ ๋ฐฉ์‹์ด์—ˆ์ง€๋งŒ, ํ…Œ์ผ์œˆ๋“œ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ฐœ๋ฐœ ๊ฒฝํ—˜์˜ ํ–ฅ์ƒ๊ณผ ์ƒ์‚ฐ์„ฑ ์ฆ๋Œ€๊ฐ€ ์ž…์†Œ๋ฌธ์„ ํƒ€๋ฉด์„œ ๋น ๋ฅด๊ฒŒ ์ธ๊ธฐ๋ฅผ ์–ป๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ…Œ์ผ์œˆ๋“œ CSS๋Š” ์ง€์†์ ์ธ ์—…๋ฐ์ดํŠธ๋ฅผ ํ†ตํ•ด ๋ฐœ์ „์„ ๊ฑฐ๋“ญํ•ด์™”์Šต๋‹ˆ๋‹ค. ์ฃผ์š” ๋ฒ„์ „ ๋ฆด๋ฆฌ์Šค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  • v1.0 (2019๋…„ 5์›”): ์•ˆ์ •์ ์ธ ์ฒซ ์ •์‹ ๋ฒ„์ „ ์ถœ์‹œ. ์œ ํ‹ธ๋ฆฌํ‹ฐ ์šฐ์„  ๊ฐœ๋…์„ ๋Œ€์ค‘ํ™”ํ•˜๋Š” ๊ณ„๊ธฐ๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • v2.0 (2020๋…„ 11์›”): ๋‹คํฌ ๋ชจ๋“œ ์ง€์›, ์ƒˆ๋กœ์šด ์ƒ‰์ƒ ํŒ”๋ ˆํŠธ, ๋” ๋„“์–ด์ง„ ๊ฐ„๊ฒฉ(spacing) ๋ฐ ํฌ๊ธฐ(sizing) ์Šค์ผ€์ผ, `@apply` ์„ฑ๋Šฅ ๊ฐœ์„  ๋“ฑ ๋งŽ์€ ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€ ๋ฐ ๊ฐœ์„ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ๋””์ž์ธ ์‹œ์Šคํ…œ ๊ตฌ์ถ•์— ๋”์šฑ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค.
  • v3.0 (2021๋…„ 12์›”): JIT(Just-In-Time) ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๊ธฐ๋ณธ ์—”์ง„์œผ๋กœ ํƒ‘์žฌ๋œ ํ˜์‹ ์ ์ธ ๋ฒ„์ „์ž…๋‹ˆ๋‹ค. JIT ์—”์ง„์€ ๊ฐœ๋ฐœ ๊ณผ์ •์—์„œ ์‚ฌ์šฉ๋œ ํด๋ž˜์Šค๋งŒ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๊ฐ์ง€ํ•˜์—ฌ ํ•„์š”ํ•œ CSS๋งŒ ์ƒ์„ฑํ•ด ์ค๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ๊ฐœ๋ฐœ ์„œ๋ฒ„ ๊ตฌ๋™ ์†๋„๊ฐ€ ๋นจ๋ผ์ง€๊ณ , ๋ชจ๋“  ์œ ํ‹ธ๋ฆฌํ‹ฐ ๋ณ€ํ˜•(variant)์„ ๊ธฐ๋ณธ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์œผ๋ฉฐ, ์ตœ์ข… ๋นŒ๋“œ ์‹œ CSS ํŒŒ์ผ ํฌ๊ธฐ๊ฐ€ ๊ทน์ ์œผ๋กœ ๊ฐ์†Œํ•˜๋Š” ํšจ๊ณผ๋ฅผ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ์ž„์˜ ๊ฐ’(arbitrary values) ์ง€์› (`top-[117px]`) ๋“ฑ ๋”์šฑ ์œ ์—ฐํ•œ ์Šคํƒ€์ผ๋ง์ด ๊ฐ€๋Šฅํ•ด์กŒ์Šต๋‹ˆ๋‹ค.
  • ์ตœ์‹  ๋ฒ„์ „ (2025๋…„ ํ˜„์žฌ): v3 ์ดํ›„์—๋„ ์ง€์†์ ์ธ ๊ฐœ์„ ๊ณผ ๊ธฐ๋Šฅ ์ถ”๊ฐ€๊ฐ€ ์ด๋ฃจ์–ด์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ตœ์‹  ๋ฒ„์ „ ์ •๋ณด๋Š” ํ…Œ์ผ์œˆ๋“œ CSS ๊ณต์‹ ๋ฌธ์„œ์—์„œ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ •ํ™•ํ•ฉ๋‹ˆ๋‹ค. ๊ณต์‹ ๋ฌธ์„œ๋Š” ํ…Œ์ผ์œˆ๋“œ ์„ค์น˜ ๋ฐ ์ตœ์‹  ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ๊ฐ€์žฅ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

ํ…Œ์ผ์œˆ๋“œ CSS์˜ ์„ฑ๊ณต์€ ๋‹จ์ˆœํžˆ ํ”„๋ ˆ์ž„์›Œํฌ ์ž์ฒด์˜ ์šฐ์ˆ˜์„ฑ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ํ™œ๋ฐœํ•œ ์ปค๋ฎค๋‹ˆํ‹ฐ์™€ ํ’๋ถ€ํ•œ ์ƒํƒœ๊ณ„ ๋•๋ถ„์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ๊ณต์‹ ๋ฌธ์„œ์˜ ๋†’์€ ์™„์„ฑ๋„, ์œ ์šฉํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ๋“ค(Typography, Forms ๋“ฑ), ๊ทธ๋ฆฌ๊ณ  Tailwind UI์™€ ๊ฐ™์€ ๊ณ ํ’ˆ์งˆ UI ์ปดํฌ๋„ŒํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๊ฐœ๋ฐœ์ž๋“ค์ด ํ…Œ์ผ์œˆ๋“œ๋ฅผ ๋”์šฑ ํšจ๊ณผ์ ์œผ๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿš€ ์™œ ํ…Œ์ผ์œˆ๋“œ CSS๋ฅผ ์„ ํƒํ•ด์•ผ ํ• ๊นŒ? ์••๋„์ ์ธ ์žฅ์  ๋ถ„์„

์ˆ˜๋งŽ์€ CSS ํ”„๋ ˆ์ž„์›Œํฌ์™€ ๋ฐฉ๋ฒ•๋ก  ์†์—์„œ ํ…Œ์ผ์œˆ๋“œ CSS๊ฐ€ ์œ ๋… ์ฃผ๋ชฉ๋ฐ›๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ผ๊นŒ์š”? ๋‹จ์ˆœํžˆ ์ตœ์‹  ๊ธฐ์ˆ ์ด๊ธฐ ๋•Œ๋ฌธ๋งŒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ํ…Œ์ผ์œˆ๋“œ CSS๋Š” ๊ฐœ๋ฐœ์ž๋“ค์ด ์‹ค์ œ๋กœ ๊ฒช๋Š” ์–ด๋ ค์›€์„ ํ•ด๊ฒฐํ•˜๊ณ , ์›น ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค ์ „๋ฐ˜์— ๊ฑธ์ณ ์‹ค์งˆ์ ์ธ ์ด์ ์„ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งŽ์€ ์‚ฌ๋ž‘์„ ๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ…Œ์ผ์œˆ๋“œ CSS๋ฅผ ์„ ํƒํ•ด์•ผ ํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ์ด์œ ๋“ค์„ ์ข€ ๋” ์ž์„ธํžˆ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

ํ…Œ์ผ์œˆ๋“œ์˜ ๊ฐ€์žฅ ํฐ ๋งค๋ ฅ์€ ๊ฐœ๋ฐœ ๊ฒฝํ—˜์„ ํ˜์‹ ์ ์œผ๋กœ ๊ฐœ์„ ํ•œ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. CSS ํด๋ž˜์Šค ์ด๋ฆ„์„ ๊ณ ๋ฏผํ•˜๋Š” ์‹œ๊ฐ„, CSS์™€ HTML ํŒŒ์ผ ์‚ฌ์ด๋ฅผ ์˜ค๊ฐ€๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€, ์Šคํƒ€์ผ ์ถฉ๋Œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋””๋ฒ„๊น… ์‹œ๊ฐ„ ๋“ฑ์„ ํš๊ธฐ์ ์œผ๋กœ ์ค„์—ฌ์ค๋‹ˆ๋‹ค. ์ด๋Š” ๊ณง ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ์˜ ํ–ฅ์ƒ์œผ๋กœ ์ด์–ด์ง€๋ฉฐ, ๊ฐœ๋ฐœ์ž๋Š” ํ•ต์‹ฌ ๋กœ์ง ๊ตฌํ˜„์— ๋” ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ์ž˜ ์ •์˜๋œ ๋””์ž์ธ ์‹œ์Šคํ…œ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ผ๊ด€์„ฑ ์žˆ๋Š” UI๋ฅผ ์†์‰ฝ๊ฒŒ ๊ตฌ์ถ•ํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ๋„ ํฐ ์žฅ์ ์ž…๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ, JIT ์—”์ง„ ๋•๋ถ„์— ์ตœ์ข… ์‚ฌ์šฉ์ž์—๊ฒŒ ์ œ๊ณต๋˜๋Š” CSS ํŒŒ์ผ์˜ ํฌ๊ธฐ๋ฅผ ์ตœ์†Œํ™”ํ•˜์—ฌ ์›น์‚ฌ์ดํŠธ ์„ฑ๋Šฅ ์ตœ์ ํ™”์—๋„ ๊ธฐ์—ฌํ•ฉ๋‹ˆ๋‹ค.

โฑ๏ธ ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ ๊ทน๋Œ€ํ™”: ๋น ๋ฅด๊ณ  ์ง๊ด€์ ์ธ ์Šคํƒ€์ผ๋ง

ํ…Œ์ผ์œˆ๋“œ CSS์˜ ์œ ํ‹ธ๋ฆฌํ‹ฐ ์šฐ์„  ์ ‘๊ทผ ๋ฐฉ์‹์€ ๊ฐœ๋ฐœ ์†๋„๋ฅผ ๋ˆˆ์— ๋„๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค. HTML ๋งˆํฌ์—… ๋‚ด์—์„œ ์ง์ ‘ ์Šคํƒ€์ผ์„ ์ ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋ณ„๋„์˜ CSS ํŒŒ์ผ์„ ์—ด๊ณ  ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•˜๊ณ  ๋‹ค์‹œ HTML๋กœ ๋Œ์•„์˜ค๋Š” ๊ณผ์ •์„ ๊ฑฐ์น  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Š” ํŠนํžˆ ํ”„๋กœํ† ํƒ€์ดํ•‘์ด๋‚˜ ๋น ๋ฅธ ๊ธฐ๋Šฅ ๊ตฌํ˜„ ์‹œ ๊ฐ•๋ ฅํ•œ ์žฅ์ ์œผ๋กœ ์ž‘์šฉํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฒ„ํŠผ์˜ ํŒจ๋”ฉ์„ ์กฐ๊ธˆ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜, ํŠน์ • ํ…์ŠคํŠธ์˜ ์ƒ‰์ƒ์„ ๋ณ€๊ฒฝํ•˜๋Š” ์ž‘์€ ์ˆ˜์ • ์ž‘์—…์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ด…์‹œ๋‹ค. ๊ธฐ์กด ๋ฐฉ์‹์ด๋ผ๋ฉด ํ•ด๋‹น CSS ํด๋ž˜์Šค๋ฅผ ์ฐพ์•„ ์ˆ˜์ •ํ•˜๊ณ , ํ˜น์‹œ ๋‹ค๋ฅธ ๊ณณ์— ์˜ํ–ฅ์„ ์ฃผ์ง€๋Š” ์•Š๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํ…Œ์ผ์œˆ๋“œ์—์„œ๋Š” ํ•ด๋‹น HTML ์š”์†Œ์˜ ํด๋ž˜์Šค ์†์„ฑ์—์„œ `p-4`๋ฅผ `p-6`์œผ๋กœ ๋ฐ”๊พธ๊ฑฐ๋‚˜ `text-gray-700`์„ `text-blue-500`์œผ๋กœ ๋ณ€๊ฒฝํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋งค์šฐ ์ง๊ด€์ ์ด๊ณ  ๋น ๋ฆ…๋‹ˆ๋‹ค.

๋˜ํ•œ, ํ…Œ์ผ์œˆ๋“œ์˜ ์œ ํ‹ธ๋ฆฌํ‹ฐ ํด๋ž˜์Šค ์ด๋ฆ„์€ ๋Œ€๋ถ€๋ถ„ CSS ์†์„ฑ๊ณผ ์ง์ ‘์ ์œผ๋กœ ์—ฐ๊ด€๋˜์–ด ์žˆ์–ด ๋ฐฐ์šฐ๊ณ  ๊ธฐ์–ตํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. `margin-left`๋Š” `ml-`, `font-weight: bold`๋Š” `font-bold`, `display: flex`๋Š” `flex`์™€ ๊ฐ™์ด ์ง๊ด€์ ์ธ ๋„ค์ด๋ฐ ๊ทœ์น™์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” ํด๋ž˜์Šค ์ด๋ฆ„์ด ๋งŽ์•„ ๋ถ€๋‹ด์Šค๋Ÿฌ์šธ ์ˆ˜ ์žˆ์ง€๋งŒ, ์ž๋™ ์™„์„ฑ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” IDE ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ(์˜ˆ: VS Code์˜ Tailwind CSS IntelliSense)์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ธˆ๋ฐฉ ์ต์ˆ™ํ•ด์ง€๊ณ  ์ƒ์‚ฐ์„ฑ์„ ๋”์šฑ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋น ๋ฅธ ์Šคํƒ€์ผ๋ง ๋Šฅ๋ ฅ์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋””์ž์ธ ์‹œ์•ˆ์„ ์ฝ”๋“œ๋กœ ์˜ฎ๊ธฐ๊ฑฐ๋‚˜, ์‚ฌ์šฉ์ž ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ˜์˜ํ•˜์—ฌ UI๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ณผ์ •์—์„œ ๋น›์„ ๋ฐœํ•ฉ๋‹ˆ๋‹ค. ๋””์ž์ธ ๋ณ€๊ฒฝ ์š”๊ตฌ์‚ฌํ•ญ์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ, ๋ณต์žกํ•œ CSS ๊ตฌ์กฐ๋ฅผ ํ—ค์ง‘์„ ํ•„์š” ์—†์ด ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ์˜ ๋งˆํฌ์—…๋งŒ ์ˆ˜์ •ํ•˜๋ฉด ๋˜๋ฏ€๋กœ ์œ ์ง€๋ณด์ˆ˜ ๋น„์šฉ ๋˜ํ•œ ์ ˆ๊ฐ๋ฉ๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ ํ–ฅ์ƒ์„ ๋ณด์—ฌ์ฃผ๋Š” ๊ทธ๋ž˜ํ”„ ๋˜๋Š” ์ฐจํŠธ ์ด๋ฏธ์ง€

๐ŸŽจ ๋””์ž์ธ ์‹œ์Šคํ…œ ๊ตฌ์ถ•๊ณผ ์œ ์ง€๋ณด์ˆ˜์˜ ์šฉ์ด์„ฑ

ํ…Œ์ผ์œˆ๋“œ CSS๋Š” ์ผ๊ด€๋œ ๋””์ž์ธ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜ํ•˜๋Š” ๋ฐ ๋งค์šฐ ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ์˜ `tailwind.config.js` ํŒŒ์ผ์„ ํ†ตํ•ด ์ƒ‰์ƒ ํŒ”๋ ˆํŠธ, ๊ฐ„๊ฒฉ ๋‹จ์œ„, ํฐํŠธ, ์ค‘๋‹จ์ (breakpoints) ๋“ฑ ๋””์ž์ธ ํ† ํฐ์„ ์ค‘์•™์—์„œ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ์œ ํ‹ธ๋ฆฌํ‹ฐ ํด๋ž˜์Šค๋Š” ์ด ์„ค์ • ํŒŒ์ผ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒ์„ฑ๋˜๋ฏ€๋กœ, ํ”„๋กœ์ ํŠธ ์ „์ฒด์— ๊ฑธ์ณ ํ†ต์ผ๋œ ๋””์ž์ธ ์–ธ์–ด๋ฅผ ๊ฐ•์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ํ”„๋กœ์ ํŠธ์˜ ๊ธฐ๋ณธ ๋ธŒ๋žœ๋“œ ์ƒ‰์ƒ์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ๊ฒฝ์šฐ, `tailwind.config.js` ํŒŒ์ผ์—์„œ ํ•ด๋‹น ์ƒ‰์ƒ ๊ฐ’์„ ํ•œ ๋ฒˆ๋งŒ ์ˆ˜์ •ํ•˜๋ฉด, ์ด ์ƒ‰์ƒ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ์š”์†Œ(`bg-primary`, `text-primary` ๋“ฑ)์˜ ์Šคํƒ€์ผ์ด ์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ˆ˜์‹ญ, ์ˆ˜๋ฐฑ ๊ฐœ์˜ CSS ํŒŒ์ผ์„ ์ผ์ผ์ด ์ˆ˜์ •ํ•ด์•ผ ํ•˜๋Š” ๊ธฐ์กด ๋ฐฉ์‹์— ๋น„ํ•ด ์—„์ฒญ๋‚œ ํšจ์œจ์„ฑ ํ–ฅ์ƒ์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ, ํ…Œ์ผ์œˆ๋“œ์˜ ์ œ์•ฝ ๊ธฐ๋ฐ˜(constraint-based) ๋””์ž์ธ ์ ‘๊ทผ ๋ฐฉ์‹์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž„์˜์˜ ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์ œํ•œํ•˜๊ณ  ๋ฏธ๋ฆฌ ์ •์˜๋œ ๋””์ž์ธ ์‹œ์Šคํ…œ ๋‚ด์—์„œ ์ž‘์—…ํ•˜๋„๋ก ์œ ๋„ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํŒจ๋”ฉ ๊ฐ’์œผ๋กœ `p-1`, `p-2`, `p-3`, `p-4` ๋“ฑ ์ •ํ•ด์ง„ ๋‹จ์œ„๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ํ•จ์œผ๋กœ์จ, ๋””์ž์ธ์˜ ์ผ๊ด€์„ฑ์„ ๋†’์ด๊ณ  ์†Œ์œ„ ‘๋งค์ง ๋„˜๋ฒ„’์˜ ์‚ฌ์šฉ์„ ์ค„์—ฌ์ค๋‹ˆ๋‹ค.

๋ฌผ๋ก , ๋ฐ˜๋ณต์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋ณต์žกํ•œ UI ํŒจํ„ด์ด๋‚˜ ์ปดํฌ๋„ŒํŠธ์˜ ๊ฒฝ์šฐ, ์œ ํ‹ธ๋ฆฌํ‹ฐ ํด๋ž˜์Šค ์กฐํ•ฉ์ด ๋„ˆ๋ฌด ๊ธธ์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿด ๋•Œ๋Š” ํ…Œ์ผ์œˆ๋“œ์˜ `@apply` ์ง€์‹œ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ ์„ธํŠธ๋ฅผ ํ•˜๋‚˜์˜ ์ปค์Šคํ…€ ํด๋ž˜์Šค๋กœ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


/* styles.css */
@tailwind base;
@tailwind components;
@tailwind utilities;

@layer components {
  .btn-primary {
    @apply bg-blue-500 text-white py-2 px-4 rounded hover:bg-blue-700 transition-colors;
  }
}

์ด๋ ‡๊ฒŒ ์ •์˜๋œ `.btn-primary` ํด๋ž˜์Šค๋Š” HTML์—์„œ `` ์™€ ๊ฐ™์ด ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. `@apply`๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ์˜ ํŽธ๋ฆฌํ•จ๊ณผ ์‹œ๋งจํ‹ฑ ํด๋ž˜์Šค์˜ ๊ฐ€๋…์„ฑ์„ ์ ˆ์ถฉํ•  ์ˆ˜ ์žˆ๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์ด์ง€๋งŒ, ๋‚จ์šฉํ•˜๋ฉด ํ…Œ์ผ์œˆ๋“œ์˜ ํ•ต์‹ฌ ์žฅ์ ์ธ ์œ ํ‹ธ๋ฆฌํ‹ฐ ์ค‘์‹ฌ ์ ‘๊ทผ ๋ฐฉ์‹์ด ํฌ์„๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์‹ ์ค‘ํ•˜๊ฒŒ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ฒฐ๋ก ์ ์œผ๋กœ, ํ…Œ์ผ์œˆ๋“œ CSS๋Š” ๋””์ž์ธ ์‹œ์Šคํ…œ์˜ ์ •์˜, ์ ์šฉ, ์œ ์ง€๋ณด์ˆ˜๋ฅผ ๋งค์šฐ ํšจ์œจ์ ์œผ๋กœ ๋งŒ๋“ค์–ด์ฃผ๋ฉฐ, ์ด๋Š” ํŠนํžˆ ๊ทœ๋ชจ๊ฐ€ ํฐ ํ”„๋กœ์ ํŠธ๋‚˜ ์—ฌ๋Ÿฌ ๊ฐœ๋ฐœ์ž๊ฐ€ ํ˜‘์—…ํ•˜๋Š” ํ™˜๊ฒฝ์—์„œ ๊ฐ•๋ ฅํ•œ ์ด์ ์œผ๋กœ ์ž‘์šฉํ•ฉ๋‹ˆ๋‹ค.

โšก๏ธ ๋›ฐ์–ด๋‚œ ์„ฑ๋Šฅ๊ณผ ์ตœ์ ํ™”: ๊ฐ€๋ฒผ์šด ์ตœ์ข… ๊ฒฐ๊ณผ๋ฌผ

ํ…Œ์ผ์œˆ๋“œ CSS์˜ ๋˜ ๋‹ค๋ฅธ ํ•ต์‹ฌ ์žฅ์ ์€ ์ตœ์ข… ๋นŒ๋“œ ์‹œ ๋งค์šฐ ๊ฐ€๋ฒผ์šด CSS ํŒŒ์ผ์„ ์ƒ์„ฑํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ํ…Œ์ผ์œˆ๋“œ v3๋ถ€ํ„ฐ ๊ธฐ๋ณธ์œผ๋กœ ํ™œ์„ฑํ™”๋œ JIT(Just-In-Time) ์ปดํŒŒ์ผ๋Ÿฌ ๋•๋ถ„์ž…๋‹ˆ๋‹ค.

JIT ์—”์ง„์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ํ”„๋กœ์ ํŠธ์—์„œ ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•œ ์œ ํ‹ธ๋ฆฌํ‹ฐ ํด๋ž˜์Šค๋งŒ์„ ์Šค์บ”ํ•˜์—ฌ, ํ•„์š”ํ•œ CSS ๊ทœ์น™๋งŒ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ ์ค‘์—๋Š” ๋ชจ๋“  ์œ ํ‹ธ๋ฆฌํ‹ฐ์™€ ๋ณ€ํ˜•(hover, focus, responsive ๋“ฑ)์„ ์ž์œ ๋กญ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ตœ์ข… ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ ์‹œ์—๋Š” ์‚ฌ์šฉ๋˜์ง€ ์•Š์€ ์Šคํƒ€์ผ์€ ๋ชจ๋‘ ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค.

์ด๋Š” ๋ถ€ํŠธ์ŠคํŠธ๋žฉ์ด๋‚˜ ํŒŒ์šด๋ฐ์ด์…˜ ๊ฐ™์€ ์ „ํ†ต์ ์ธ ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ํ”„๋ ˆ์ž„์›Œํฌ์™€ ๋Œ€์กฐ์ ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ”„๋ ˆ์ž„์›Œํฌ๋“ค์€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋งŽ์€ ์Šคํƒ€์ผ ๊ทœ์น™๊นŒ์ง€ ํฌํ•จ๋œ ๊ฑฐ๋Œ€ํ•œ CSS ํŒŒ์ผ์„ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก , ์ด๋Ÿฌํ•œ ํ”„๋ ˆ์ž„์›Œํฌ๋“ค๋„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ํ…Œ์ผ์œˆ๋“œ์˜ JIT ๋ฐฉ์‹์€ ํ›จ์”ฌ ๋” ์ž๋™ํ™”๋˜๊ณ  ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ ๋Œ€๋ถ€๋ถ„์˜ ํ…Œ์ผ์œˆ๋“œ ํ”„๋กœ์ ํŠธ๋Š” ์ตœ์ข… CSS ๋ฒˆ๋“ค ํฌ๊ธฐ๊ฐ€ 10kB ๋ฏธ๋งŒ์ธ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์›น์‚ฌ์ดํŠธ ๋กœ๋”ฉ ์†๋„์— ์ง์ ‘์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค. CSS ํŒŒ์ผ ํฌ๊ธฐ๊ฐ€ ์ž‘์„์ˆ˜๋ก ๋ธŒ๋ผ์šฐ์ €๊ฐ€ CSS๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ํŒŒ์‹ฑํ•˜๋Š” ์‹œ๊ฐ„์ด ์ค„์–ด๋“ค์–ด ํŽ˜์ด์ง€ ๋ Œ๋”๋ง ์†๋„๊ฐ€ ๋นจ๋ผ์ง€๊ณ , ์ด๋Š” ์‚ฌ์šฉ์ž ๊ฒฝํ—˜(UX) ํ–ฅ์ƒ๊ณผ ๊ฒ€์ƒ‰ ์—”์ง„ ์ตœ์ ํ™”(SEO)์—๋„ ๊ธ์ •์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค.

JIT ์—”์ง„์˜ ์žฅ์ ์€ ์—ฌ๊ธฐ์„œ ๊ทธ์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ ์ค‘์—๋„ ํ•„์š”ํ•œ CSS๋งŒ ์ฆ‰์‹œ ์ƒ์„ฑํ•˜๋ฏ€๋กœ, ๋นŒ๋“œ ์‹œ๊ฐ„์ด ๋‹จ์ถ•๋˜๊ณ  ๊ฐœ๋ฐœ ์„œ๋ฒ„์˜ ๋ฐ˜์‘์„ฑ์ด ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, `bg-[#bada55]`๋‚˜ `mt-[13px]`์™€ ๊ฐ™์ด ์„ค์ • ํŒŒ์ผ์— ๋ฏธ๋ฆฌ ์ •์˜๋˜์ง€ ์•Š์€ ์ž„์˜์˜ ๊ฐ’(arbitrary values)์„ ๋Œ€๊ด„ํ˜ธ `[]` ์•ˆ์— ๋„ฃ์–ด ์ง์ ‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์–ด, ์ปค์Šคํ…€ ์Šคํƒ€์ผ์— ๋Œ€ํ•œ ์œ ์—ฐ์„ฑ์ด ํฌ๊ฒŒ ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๋ก ์ ์œผ๋กœ, ํ…Œ์ผ์œˆ๋“œ CSS๋Š” ๊ฐœ๋ฐœ ํŽธ์˜์„ฑ์„ ๋†’์ด๋ฉด์„œ๋„ ์ตœ์ข… ๊ฒฐ๊ณผ๋ฌผ์˜ ์„ฑ๋Šฅ๊นŒ์ง€ ์ตœ์ ํ™”ํ•˜๋Š”, ๋‘ ๋งˆ๋ฆฌ ํ† ๋ผ๋ฅผ ๋ชจ๋‘ ์žก์€ ์Šค๋งˆํŠธํ•œ ํ”„๋ ˆ์ž„์›Œํฌ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ› ๏ธ ํ…Œ์ผ์œˆ๋“œ CSS ํ•ต์‹ฌ ๊ฐœ๋… ๋งˆ์Šคํ„ฐํ•˜๊ธฐ

ํ…Œ์ผ์œˆ๋“œ CSS์˜ ๊ฐ•๋ ฅํ•จ์„ ์ œ๋Œ€๋กœ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ช‡ ๊ฐ€์ง€ ํ•ต์‹ฌ ๊ฐœ๋…์„ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์œ ํ‹ธ๋ฆฌํ‹ฐ ํด๋ž˜์Šค์˜ ๊ธฐ๋ณธ์ ์ธ ์‚ฌ์šฉ๋ฒ•๋ถ€ํ„ฐ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ, ์ƒํƒœ ๊ด€๋ฆฌ, ๊ทธ๋ฆฌ๊ณ  ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ๋ฐฉ๋ฒ•๊นŒ์ง€, ์ด๋Ÿฌํ•œ ๊ฐœ๋…๋“ค์„ ์ตํžˆ๋ฉด ํ…Œ์ผ์œˆ๋“œ๋ฅผ ํ›จ์”ฌ ๋” ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” ์ˆ˜๋งŽ์€ ํด๋ž˜์Šค ์ด๋ฆ„์— ์••๋„๋  ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ์ฒด๊ณ„์ ์ธ ๊ทœ์น™๊ณผ ํŒจํ„ด์„ ์ดํ•ดํ•˜๋ฉด ๊ธˆ๋ฐฉ ์ต์ˆ™ํ•ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์„น์…˜์—์„œ๋Š” ํ…Œ์ผ์œˆ๋“œ CSS๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ํ•ต์‹ฌ ์š”์†Œ๋“ค์„ ์ž์„ธํžˆ ์‚ดํŽด๋ณด๊ณ , ์‹ค์ œ ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ•˜๋Š”์ง€ ์•Œ์•„๋ด…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์œ ํ‹ธ๋ฆฌํ‹ฐ ํด๋ž˜์Šค๋“ค์„ ์กฐํ•ฉํ•˜์—ฌ ์›ํ•˜๋Š” ์Šคํƒ€์ผ์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•, ๋‹ค์–‘ํ•œ ํ™”๋ฉด ํฌ๊ธฐ์™€ ์‚ฌ์šฉ์ž ์ธํ„ฐ๋ž™์…˜์— ๋Œ€์‘ํ•˜๋Š” ๋ฐฉ๋ฒ•, ๊ทธ๋ฆฌ๊ณ  ํ”„๋กœ์ ํŠธ์˜ ๊ณ ์œ ํ•œ ๋””์ž์ธ ์š”๊ตฌ์‚ฌํ•ญ์— ๋งž๊ฒŒ ํ…Œ์ผ์œˆ๋“œ๋ฅผ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์šฐ๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๊ฐœ๋…๋“ค์„ ๋งˆ์Šคํ„ฐํ•˜๋ฉด ์–ด๋–ค ๋ณต์žกํ•œ UI๋ผ๋„ ํ…Œ์ผ์œˆ๋“œ๋กœ ์ž์‹  ์žˆ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋ฐ˜์„ ๋‹ค์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“ ๊ธฐ๋ณธ ์œ ํ‹ธ๋ฆฌํ‹ฐ ํด๋ž˜์Šค ํ™œ์šฉ๋ฒ•

ํ…Œ์ผ์œˆ๋“œ์˜ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์„ฑ ์š”์†Œ๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค. ๊ฐ ํด๋ž˜์Šค๋Š” ํŠน์ •ํ•œ CSS ์†์„ฑ ํ•˜๋‚˜๋ฅผ ์ œ์–ดํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ ์นดํ…Œ๊ณ ๋ฆฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๊ฐ„๊ฒฉ (Spacing):
    • p-{size}: ํŒจ๋”ฉ (padding) – ์˜ˆ: `p-4` (padding: 1rem)
    • m-{size}: ๋งˆ์ง„ (margin) – ์˜ˆ: `m-2` (margin: 0.5rem)
    • pt-{size}, `pr-{size}`, `pb-{size}`, `pl-{size}`: ํŠน์ • ๋ฐฉํ–ฅ ํŒจ๋”ฉ (top, right, bottom, left) – ์˜ˆ: `pt-6` (padding-top: 1.5rem)
    • mt-{size}, `mr-{size}`, `mb-{size}`, `ml-{size}`: ํŠน์ • ๋ฐฉํ–ฅ ๋งˆ์ง„ – ์˜ˆ: `ml-auto` (margin-left: auto)
    • space-x-{amount}, `space-y-{amount}`: ์ž์‹ ์š”์†Œ ์‚ฌ์ด์˜ ๊ฐ„๊ฒฉ (flex/grid ์ปจํ…Œ์ด๋„ˆ ๋‚ด) – ์˜ˆ: `space-x-4`
  • ํฌ๊ธฐ (Sizing):
    • w-{size}: ๋„ˆ๋น„ (width) – ์˜ˆ: `w-1/2` (width: 50%), `w-screen` (width: 100vw), `w-64` (width: 16rem)
    • h-{size}: ๋†’์ด (height) – ์˜ˆ: `h-full` (height: 100%), `h-screen` (height: 100vh), `h-16` (height: 4rem)
    • min-w-{size}, `max-w-{size}, `min-h-{size}, `max-h-{size}`: ์ตœ์†Œ/์ตœ๋Œ€ ๋„ˆ๋น„/๋†’์ด
  • ๋ ˆ์ด์•„์›ƒ (Layout):
    • block, `inline-block`, `inline`, `flex`, `inline-flex`, `grid`, `inline-grid`, `hidden` (display)
    • flex-row, `flex-col`, `items-center`, `justify-between` (Flexbox ๊ด€๋ จ)
    • grid-cols-{count}, `gap-{size}` (Grid ๊ด€๋ จ)
    • float-left, `float-right`, `clear-both` (Float)
    • z-10, `z-50` (z-index)
    • absolute, `relative`, `fixed`, `sticky` (position)
    • top-0, `right-4`, `bottom-auto`, `left-1/2` (position ๊ฐ’)
  • ํƒ€์ดํฌ๊ทธ๋ž˜ํ”ผ (Typography):
    • font-sans, `font-serif`, `font-mono` (font-family)
    • text-xs, `text-sm`, `text-base`, `text-lg`, `text-xl`, `text-2xl` … (font-size)
    • font-light, `font-normal`, `font-medium`, `font-semibold`, `font-bold` (font-weight)
    • text-left, `text-center`, `text-right`, `text-justify` (text-align)
    • text-blue-500, `text-gray-700` (color) – ์ƒ‰์ƒ ํŒ”