CSS @apply์ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ํ์ํ์ฌ ํจ์จ์ ์ธ ๋ฏน์ค์ธ ๊ด๋ฆฌ์ ๊ฐ์ํ๋ ์คํ์ผ๋ง์ ๊ตฌํํ๊ณ , ์ต์ ์น ๊ฐ๋ฐ์์ ์ ์ง๋ณด์์ฑ๊ณผ ์ฝ๋ ์ฌ์ฌ์ฉ์ฑ์ ํฅ์์ํค์ธ์. ์ค์ ์์ ์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ํตํด ๋ฐฐ์๋ณด์ธ์.
CSS @apply ๋ง์คํฐํ๊ธฐ: ๋ฏน์ค์ธ ์ ์ฉ ์ข ํฉ ๊ฐ์ด๋
CSS์ @apply
์ง์์ด๋ ๋ค๋ฅธ ๊ณณ์ ์ ์๋ ์คํ์ผ์ CSS ๊ท์น์ ์ ์ฉํ ์ ์๋ ๊ฐ๋ ฅํ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํฉ๋๋ค. ์ด๋ฅผ ํตํด CSS ์์ฑ์ "๋ฏน์ค์ธ"์ ํจ๊ณผ์ ์ผ๋ก ์์ฑํ๊ณ ์ฌ์ฌ์ฉํ์ฌ ์ฝ๋ ๊ตฌ์ฑ, ์ ์ง๋ณด์์ฑ์ ๊ฐ์ ํ๊ณ ์ค๋ณต์ ์ค์ผ ์ ์์ต๋๋ค. ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ด์ง๋ง, @apply
๋ ์ ์ฌ์ ์ธ ์ฑ๋ฅ ์ ํ๋ฅผ ํผํ๊ณ ๋ช
ํํ ์ฝ๋ ๊ตฌ์กฐ๋ฅผ ์ ์งํ๊ธฐ ์ํด ์ ์คํ ๊ณ ๋ ค๊ฐ ํ์ํฉ๋๋ค. ์ด ๊ฐ์ด๋์์๋ @apply
์ ์ด์ , ๋จ์ ๋ฐ ํจ๊ณผ์ ์ธ ์ฌ์ฉ์ ์ํ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ฌ๋ ์๊ฒ ํ๊ตฌํฉ๋๋ค.
CSS @apply๋ ๋ฌด์์ธ๊ฐ?
@apply
๋ ๋ค๋ฅธ ๊ณณ์ ์ ์๋ CSS ์์ฑ-๊ฐ ์์ ์งํฉ์ ์๋ก์ด CSS ๊ท์น์ ์ฝ์
ํ ์ ์๊ฒ ํด์ฃผ๋ CSS at-rule์
๋๋ค. ์ด "์งํฉ"์ ์ข
์ข
๋ฏน์ค์ธ ๋๋ ์ปดํฌ๋ํธ๋ผ๊ณ ๋ถ๋ฆฝ๋๋ค. ๋ฒํผ, ํผ ์์ ๋๋ ํ์ดํฌ๊ทธ๋ํผ์ ๊ณตํต์ผ๋ก ์ฌ์ฉ๋๋ ์คํ์ผ ๋ชจ์์ด ์๋ค๊ณ ์์ํด ๋ณด์ธ์. ๊ฐ ์์์ CSS ๊ท์น์์ ์ด๋ฌํ ์คํ์ผ์ ๋ฐ๋ณต์ ์ผ๋ก ์ ์ํ๋ ๋์ , ํ ๋ฒ๋ง ์ ์ํ ๋ค์ @apply
๋ฅผ ์ฌ์ฉํ์ฌ ํ์ํ ๊ณณ ์ด๋์์๋ ์ ์ฉํ ์ ์์ต๋๋ค.
๋ณธ์ง์ ์ผ๋ก, @apply
๋ ๋ฐ๋ณต์ ์ธ ์คํ์ผ๋ง ํจํด์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ปดํฌ๋ํธ๋ก ์ถ์ํํ ์ ์๊ฒ ํด์ค๋๋ค. ์ด๋ ์ฝ๋ ์ค๋ณต์ ์ค์ผ ๋ฟ๋ง ์๋๋ผ, ๋ฏน์ค์ธ์ ๋ณ๊ฒฝํ๋ฉด ์ด๋ฅผ ์ฌ์ฉํ๋ ๋ชจ๋ ์์์ ์๋์ผ๋ก ์ ํ๋๋ฏ๋ก CSS๋ฅผ ์ ์งํ๊ณ ์
๋ฐ์ดํธํ๊ธฐ๊ฐ ๋ ์ฌ์์ง๋๋ค.
๊ธฐ๋ณธ ๊ตฌ๋ฌธ ๋ฐ ์ฌ์ฉ๋ฒ
@apply
์ ๊ธฐ๋ณธ ๊ตฌ๋ฌธ์ ๊ฐ๋จํฉ๋๋ค:
.element {
@apply mixin-name;
}
์ฌ๊ธฐ์ .element
๋ mixin-name
์ ์คํ์ผ์ ์ ์ฉํ๋ ค๋ CSS ์ ํ์์
๋๋ค. mixin-name
์ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฌ์ฉํ๋ ค๋ ์คํ์ผ ๋ชจ์์ ๋ด๊ณ ์๋ CSS ํด๋์ค ์ด๋ฆ์
๋๋ค.
์์: ๋ฒํผ ๋ฏน์ค์ธ ์ ์ ๋ฐ ์ ์ฉ
์น์ฌ์ดํธ ์ ์ฒด์์ ์ฌ์ฌ์ฉํ๊ณ ์ถ์ ํ์ค ๋ฒํผ ์คํ์ผ์ด ์๋ค๊ณ ๊ฐ์ ํด ๋ด ์๋ค. ๋ค์๊ณผ ๊ฐ์ด ์ ์ํ ์ ์์ต๋๋ค:
.button-base {
padding: 10px 20px;
border: none;
border-radius: 5px;
font-size: 16px;
cursor: pointer;
}
.primary-button {
@apply button-base;
background-color: #007bff;
color: white;
}
.secondary-button {
@apply button-base;
background-color: #6c757d;
color: white;
}
์ด ์์์์ .button-base
๋ ๋ชจ๋ ๋ฒํผ์ ๊ณตํต ์คํ์ผ์ ์ ์ํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ .primary-button
๊ณผ .secondary-button
์ @apply
๋ฅผ ์ฌ์ฉํ์ฌ ์ด ๊ธฐ๋ณธ ์คํ์ผ์ ํ์ฅํ๊ณ ๊ฐ๊ฐ์ ํน์ ๋ฐฐ๊ฒฝ์์ ์ถ๊ฐํฉ๋๋ค.
@apply ์ฌ์ฉ์ ์ด์
- ์ฝ๋ ์ฌ์ฌ์ฉ์ฑ: ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฏน์ค์ธ์ ๋ง๋ค์ด CSS ์ฝ๋ ์ค๋ณต์ ํผํฉ๋๋ค.
- ์ ์ง๋ณด์์ฑ: ํ ๊ณณ(๋ฏน์ค์ธ)์์ ์คํ์ผ์ ์ ๋ฐ์ดํธํ๋ฉด ๋ชจ๋ ๊ณณ์ ๋ฐ์๋ฉ๋๋ค.
- ์กฐ์งํ: ๊ด๋ จ๋ ์คํ์ผ์ ๋ฏน์ค์ธ์ผ๋ก ๊ทธ๋ฃนํํ์ฌ CSS๋ฅผ ๋ ๋ ผ๋ฆฌ์ ์ผ๋ก ๊ตฌ์ฑํฉ๋๋ค.
- ๊ฐ๋ ์ฑ: ๋ณต์กํ ์คํ์ผ๋ง ํจํด์ ์ถ์ํํ์ฌ CSS๋ฅผ ๋ ์ฝ๊ธฐ ์ฝ๊ฒ ๋ง๋ญ๋๋ค.
- ํจ์จ์ฑ: ์ ์ฒด CSS ํ์ผ ํฌ๊ธฐ๋ฅผ ์ค์ฌ ํ์ด์ง ๋ก๋ ์๊ฐ์ ๋จ์ถํฉ๋๋ค.
CSS ๋ณ์(์ฌ์ฉ์ ์ง์ ์์ฑ)์ ํจ๊ป @apply ์ฌ์ฉํ๊ธฐ
@apply
๋ CSS ๋ณ์์ ์ํํ๊ฒ ์๋ํ์ฌ ํจ์ฌ ๋ ์ ์ฐํ๊ณ ์ฌ์ฉ์ ์ ์ ๊ฐ๋ฅํ ๋ฏน์ค์ธ์ ๋ง๋ค ์ ์์ต๋๋ค. CSS ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ์น์ฌ์ดํธ ์ ์ฒด์์ ์ฝ๊ฒ ๋ณ๊ฒฝํ ์ ์๋ ๊ฐ์ ์ ์ํ ์ ์์ต๋๋ค. CSS ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ฒํผ ์์์ ์ ์ํ๋ ์์๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค:
:root {
--primary-color: #007bff;
--secondary-color: #6c757d;
--button-text-color: white;
}
.button-base {
padding: 10px 20px;
border: none;
border-radius: 5px;
font-size: 16px;
cursor: pointer;
color: var(--button-text-color);
}
.primary-button {
@apply button-base;
background-color: var(--primary-color);
}
.secondary-button {
@apply button-base;
background-color: var(--secondary-color);
}
์ด์ CSS ๋ณ์ ๊ฐ์ ๋ณ๊ฒฝํ๋ฉด .button-base
๋ฏน์ค์ธ์ ์ฌ์ฉํ๋ ๋ชจ๋ ๋ฒํผ์ ์์์ด ์๋์ผ๋ก ์
๋ฐ์ดํธ๋ฉ๋๋ค.
๊ณ ๊ธ @apply ์ฌ์ฉ๋ฒ: ์ฌ๋ฌ ๋ฏน์ค์ธ ๊ฒฐํฉํ๊ธฐ
์ฌ๋ฌ ๋ฏน์ค์ธ์ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํ์ฌ ๋์ดํจ์ผ๋ก์จ ๋จ์ผ ์์์ ์ ์ฉํ ์ ์์ต๋๋ค:
.element {
@apply mixin-one mixin-two mixin-three;
}
์ด๋ mixin-one
, mixin-two
, mixin-three
์ ์คํ์ผ์ .element
์ ์ ์ฉํฉ๋๋ค. ๋ฏน์ค์ธ์ด ์ ์ฉ๋๋ ์์๊ฐ ์ค์ํ๋ฉฐ, ๋์ค์ ์ ์ฉ๋ ๋ฏน์ค์ธ์ด ์ด์ ์ ์ ์๋ ์คํ์ผ์ ํ์ค CSS ์บ์ค์ผ์ด๋์ ๋ฐ๋ผ ๋ฎ์ด์ธ ์ ์์ต๋๋ค.
์์: ํ์ดํฌ๊ทธ๋ํผ์ ๋ ์ด์์ ๋ฏน์ค์ธ ๊ฒฐํฉ
.typography {
font-family: Arial, sans-serif;
line-height: 1.5;
}
.container {
max-width: 960px;
margin: 0 auto;
padding: 20px;
}
.content {
@apply typography container;
}
์ด ์์์์ .content
์์๋ ํ์ดํฌ๊ทธ๋ํผ ์คํ์ผ๊ณผ ์ปจํ
์ด๋ ๋ ์ด์์์ ๋ชจ๋ ์์๋ฐ์ต๋๋ค.
CSS ํ๋ ์์ํฌ์์์ @apply: Tailwind CSS ์์
@apply
๋ Tailwind CSS์ ๊ฐ์ ์ ํธ๋ฆฌํฐ ์ฐ์ CSS ํ๋ ์์ํฌ์์ ๋ง์ด ์ฌ์ฉ๋ฉ๋๋ค. Tailwind CSS๋ HTML ์์๋ฅผ ์คํ์ผ๋งํ๊ธฐ ์ํด ๊ฒฐํฉํ ์ ์๋ ๋ฐฉ๋ํ ์ฌ์ ์ ์ ์ ํธ๋ฆฌํฐ ํด๋์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๊ณตํฉ๋๋ค. @apply
๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ฌํ ์ ํธ๋ฆฌํฐ ํด๋์ค๋ฅผ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ปดํฌ๋ํธ๋ก ์ถ์ถํ์ฌ ์ฝ๋๋ฅผ ๋ ์๋ฏธ ์๊ณ ์ ์ง๋ณด์ํ๊ธฐ ์ฝ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค.
์์: Tailwind CSS์์ ์ฌ์ฉ์ ์ง์ ๋ฒํผ ์ปดํฌ๋ํธ ๋ง๋ค๊ธฐ
.btn {
@apply py-2 px-4 font-semibold rounded-lg shadow-md;
@apply focus:outline-none focus:ring-2 focus:ring-purple-600 focus:ring-opacity-50;
}
.btn-primary {
@apply bg-purple-600 text-white hover:bg-purple-700;
}
์ฌ๊ธฐ์๋ Tailwind CSS์ ๊ณตํต ๋ฒํผ ์คํ์ผ์ ์ ์ฉํ๋ .btn
ํด๋์ค๋ฅผ ์ ์ํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ .btn-primary
ํด๋์ค๋ ํน์ ๋ฐฐ๊ฒฝ์๊ณผ ํธ๋ฒ ํจ๊ณผ๋ก ์ด ๊ธฐ๋ณธ ์คํ์ผ์ ํ์ฅํฉ๋๋ค.
@apply์ ํ๊ณ์ ์ ์ฌ์ ์ํ
@apply
๋ ์๋นํ ์ด์ ์ ์ ๊ณตํ์ง๋ง, ๊ทธ ํ๊ณ์ ์ ์ฌ์ ์ํ์ ์ธ์งํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค:
- ์ฑ๋ฅ ๊ณ ๋ ค์ฌํญ:
@apply
๋ฅผ ๊ณผ๋ํ๊ฒ ์ฌ์ฉํ๋ฉด CSS ๋ช ์๋๊ฐ ์ฆ๊ฐํ๊ณ ๋ ๋๋ง ์ฑ๋ฅ์ ์ ์ฌ์ ์ผ๋ก ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. ๋ธ๋ผ์ฐ์ ๊ฐ @apply ์ง์์ด๋ฅผ ๋ง๋๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก ๊ท์น์ ๊ทธ ์๋ฆฌ์ ๋ณต์ฌํ์ฌ ๋ถ์ฌ๋ฃ์ต๋๋ค. ์ด๋ ๋ ํฐ CSS ํ์ผ๋ก ์ด์ด์ง ์ ์์ต๋๋ค. ์ฑ๋ฅ์ด ์ ํ๋์ง ์๋๋ก ๋๋์ ๋ฐ์ดํฐ๋ก ํ ์คํธํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. - ๋ช
์๋ ๋ฌธ์ :
@apply
๋ ํนํ ๋ณต์กํ ๋ฏน์ค์ธ์ ๋ค๋ฃฐ ๋ CSS ๋ช ์๋๋ฅผ ์ถ๋ก ํ๊ธฐ ๋ ์ด๋ ต๊ฒ ๋ง๋ค ์ ์์ต๋๋ค. ๋ช ์๋ ์ถฉ๋๋ก ์ธํ ์๋ํ์ง ์์ ์คํ์ผ ๋ฎ์ด์ฐ๊ธฐ์ ์ฃผ์ํด์ผ ํฉ๋๋ค. - ์ ํ๋ ๋ฒ์: ๋ฏน์ค์ธ์ ํฌํจ๋ ์ ์๋ ์คํ์ผ์ ๋ฒ์๋ ์ ํ์ ์
๋๋ค. ๋ฏธ๋์ด ์ฟผ๋ฆฌ๋ ๋ค๋ฅธ at-rule์
@apply
์ง์์ด ๋ด์ ์ง์ ํฌํจํ ์ ์์ต๋๋ค. - ๋ธ๋ผ์ฐ์ ์ง์: ๋๋ถ๋ถ์ ์ต์ ๋ธ๋ผ์ฐ์ ๊ฐ
@apply
๋ฅผ ์ง์ํ์ง๋ง, ๊ตฌํ ๋ธ๋ผ์ฐ์ ์์ ํธํ์ฑ์ ํ์ธํ๊ณ ํ์ํ ๊ฒฝ์ฐ ์ ์ ํ ๋์ฒด ์๋จ์ ์ ๊ณตํ๋ ๊ฒ์ด ํ์์ ์ ๋๋ค. - ๋๋ฒ๊น
์ ์ด๋ ค์:
@apply
๋ฅผ ํตํด ์ ์ฉ๋ ์คํ์ผ์ ์ถ์ ํ๋ ๊ฒ์ ์คํ์ผ์ด ๋ค๋ฅธ ์์น์์ ์์๋๊ธฐ ๋๋ฌธ์ ๊ธฐ์กด CSS๋ณด๋ค ๋๋๋ก ๋ ์ด๋ ค์ธ ์ ์์ต๋๋ค.
@apply๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
@apply
์ ์ ์ฌ์ ๋จ์ ์ ์ํํ๋ฉด์ ์ด์ ์ ๊ทน๋ํํ๋ ค๋ฉด ๋ค์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด์ญ์์ค:
- ๋๋ฌผ๊ฒ ์ฌ์ฉํ๊ธฐ:
@apply
๋ฅผ ๋จ์ฉํ์ง ๋ง์ญ์์ค. ์ง์ ์ผ๋ก ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ปดํฌ๋ํธ์ ์คํ์ผ๋ง ํจํด์๋ง ์ฌ์ฉํ์ญ์์ค. - ๋ฏน์ค์ธ์ ์ง์คํ๊ธฐ: ๋ฏน์ค์ธ์ ์ง์ค์ ์ด๊ณ ๊ตฌ์ฒด์ ์ผ๋ก ์ค๊ณํ์ญ์์ค. ๋๋ฌด ๋ง์ ๊ด๋ จ ์๋ ์คํ์ผ์ ํฌํจํ๋ ์ง๋์น๊ฒ ๋ณต์กํ ๋ฏน์ค์ธ์ ๋ง๋ค์ง ๋ง์ญ์์ค.
- ๋ช ์๋ ๊ด๋ฆฌํ๊ธฐ: CSS ๋ช ์๋๋ฅผ ์ผ๋์ ๋๊ณ ์๋ํ์ง ์์ ์คํ์ผ ๋ฎ์ด์ฐ๊ธฐ๋ฅผ ์ ๋ฐํ๋ ๋ฏน์ค์ธ์ ๋ง๋ค์ง ์๋๋ก ์ฃผ์ํ์ญ์์ค. ๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ ๋๊ตฌ์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ช ์๋๋ฅผ ๊ฒ์ฌํ๊ณ ์ดํดํ์ญ์์ค.
- ๋ฏน์ค์ธ ๋ฌธ์ํํ๊ธฐ: ๋ฏน์ค์ธ์ ๋ชฉ์ ๊ณผ ์ฌ์ฉ๋ฒ์ ๋ช ํํ๊ฒ ๋ฌธ์ํํ์ฌ ์ดํดํ๊ณ ์ ์ง๋ณด์ํ๊ธฐ ์ฝ๊ฒ ๋ง๋์ญ์์ค.
- ์ฒ ์ ํ ํ
์คํธํ๊ธฐ: CSS๋ฅผ ์ฒ ์ ํ ํ
์คํธํ์ฌ
@apply
๊ฐ ์์๋๋ก ์๋ํ๋์ง, ์ฑ๋ฅ ๋ฌธ์ ๊ฐ ์๋์ง ํ์ธํ์ญ์์ค. - ๋์ ๊ณ ๋ คํ๊ธฐ:
@apply
๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ CSS ๋ณ์๋ ์ ์ฒ๋ฆฌ๊ธฐ ๋ฏน์ค์ธ๊ณผ ๊ฐ์ ๋ค๋ฅธ CSS ๊ธฐ๋ฅ์ด ํ์์ ๋ ์ ํฉํ ์ง ๊ณ ๋ คํ์ญ์์ค. - ์ฝ๋ ๋ฆฐํ
ํ๊ธฐ: Stylelint์ ๊ฐ์ ๋๊ตฌ๋ ์ฝ๋ฉ ํ์ค์ ๊ฐ์ ํ๊ณ
@apply
์ฌ์ฉ๊ณผ ๊ด๋ จ๋ ์ ์ฌ์ ๋ฌธ์ ๋ฅผ ์๋ณํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
๊ธ๋ก๋ฒ ๊ด์ : ๋ค์ํ ๊ฐ๋ฐ ํ๊ฒฝ์์์ @apply
๋ค๋ฅธ ์น ๊ฐ๋ฐ ๊ธฐ์ ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก @apply
์ ์ฌ์ฉ์ ์ง์ญ๋ณ ๊ฐ๋ฐ ๊ดํ ๋ฐ ์ ์ธ๊ณ ํ๋ก์ ํธ ์๊ตฌ ์ฌํญ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง ์ ์์ต๋๋ค. ํต์ฌ ์์น์ ๋์ผํ๊ฒ ์ ์ง๋์ง๋ง, ๊ทธ ์ ์ฉ์ ๋ค์๊ณผ ๊ฐ์ ์์ธ์ ์ํด ์ํฅ์ ๋ฐ์ ์ ์์ต๋๋ค:
- ํ๋ ์์ํฌ ์ฑํ: Tailwind CSS๊ฐ ๋งค์ฐ ์ธ๊ธฐ ์๋ ์ง์ญ(์: ๋ถ๋ฏธ ๋ฐ ์ ๋ฝ ์ผ๋ถ ์ง์ญ)์์๋
@apply
๊ฐ ์ปดํฌ๋ํธ ์ถ์ํ์ ๋ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค. ๋ค๋ฅธ ์ง์ญ์์๋ ๋ค๋ฅธ ํ๋ ์์ํฌ๊ฐ ์ ํธ๋์ด@apply
์ ์ง์ ์ ์ธ ์ฌ์ฉ์ด ์ ์ ์ ์์ต๋๋ค. - ํ๋ก์ ํธ ๊ท๋ชจ: ๋๊ท๋ชจ ์ํฐํ๋ผ์ด์ฆ๊ธ ํ๋ก์ ํธ๋
@apply
๊ฐ ์ ๊ณตํ๋ ์ ์ง๋ณด์์ฑ๊ณผ ์ฝ๋ ์ฌ์ฌ์ฉ์ฑ์ ์ด์ ์ ๋ ๋ง์ด ๋๋ฆด ์ ์์ด ๋ ๋๋ฆฌ ์ฑํ๋ฉ๋๋ค. ์๊ท๋ชจ ํ๋ก์ ํธ์์๋ ๊ทธ ํ์์ฑ์ด ๋ํ ์ ์์ต๋๋ค. - ํ ๊ท๋ชจ ๋ฐ ํ์
: ๋๊ท๋ชจ ํ์์๋
@apply
๊ฐ ๊ณต์ ๋ ๋ฏน์ค์ธ ์ธํธ๋ฅผ ์ ๊ณตํ์ฌ ์ผ๊ด๋ ์คํ์ผ๋ง์ ๊ฐ์ ํ๊ณ ํ์ ์ ๊ฐ์ ํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค. - ์ฑ๋ฅ ๊ณ ๋ ค์ฌํญ: ์ธํฐ๋ท ์๋๊ฐ ๋๋ฆฌ๊ฑฐ๋ ์ค๋๋ ์ฅ์น๋ฅผ ์ฌ์ฉํ๋ ์ง์ญ์ ๊ฐ๋ฐ์๋ค์ ์ฑ๋ฅ์ ๋ฏธ์น ์ ์๋ ์ ์ฌ์ ์ํฅ ๋๋ฌธ์
@apply
์ฌ์ฉ์ ๋ ์ ์คํ ์ ์์ต๋๋ค. - ์ฝ๋ฉ ์ปจ๋ฒค์
: ์ง์ญ๋ง๋ค
@apply
์ฌ์ฉ์ ๊ดํ ์ฝ๋ฉ ์ปจ๋ฒค์ ๊ณผ ์ ํธ๋๊ฐ ๋ค๋ฅผ ์ ์์ต๋๋ค. ์ผ๋ถ ํ์ CSS ์ ์ฒ๋ฆฌ๊ธฐ ๋ฏน์ค์ธ์ด๋ ๋ค๋ฅธ ๊ธฐ์ ์ ์ ํธํ ์ ์์ต๋๋ค.
์ด๋ฌํ ์ง์ญ์ ์ฐจ์ด๋ฅผ ์ธ์งํ๊ณ ํ๋ก์ ํธ ๋ฐ ํ์ ํน์ ๋งฅ๋ฝ์ ๋ฐ๋ผ @apply
์ ๋ํ ์ ๊ทผ ๋ฐฉ์์ ์กฐ์ ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
์ค์ ์ฌ๋ก: ๊ตญ์ ์ ์ฌ์ฉ ์ฌ๋ก
@apply
๊ฐ ๋ค์ํ ๊ตญ์ ์ ๋งฅ๋ฝ์์ ์ด๋ป๊ฒ ์ฌ์ฉ๋ ์ ์๋์ง ๋ช ๊ฐ์ง ์ค์ ์ฌ๋ก๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค:
- ์ ์์๊ฑฐ๋ ์น์ฌ์ดํธ(๊ธ๋ก๋ฒ ๋๋ฌ ๋ฒ์): ์ ์ธ๊ณ ๊ณ ๊ฐ์ ๋์์ผ๋ก ํ๋ ์ ์์๊ฑฐ๋ ์น์ฌ์ดํธ๋
@apply
๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ์ง์ญ๊ณผ ์ธ์ด์ ๊ฑธ์ณ ์ ํ ์นด๋์ ๋ํ ์ผ๊ด๋ ์คํ์ผ๋ง์ ๋ง๋ค ์ ์์ต๋๋ค. ๋ฏน์ค์ธ์ ์ด๋ฏธ์ง, ์ ๋ชฉ, ์ค๋ช , ๋ฒํผ์ ๋ํ ๊ณตํต ์คํ์ผ์ ์ ์ํ๊ณ , CSS ๋ณ์๋ ์ง์ญ์ ์ ํธ๋์ ๋ฐ๋ผ ์์๊ณผ ํ์ดํฌ๊ทธ๋ํผ๋ฅผ ์ฌ์ฉ์ ์ ์ํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค. - ๋ค๊ตญ์ด ๋ธ๋ก๊ทธ(๊ตญ์ ์ ๋
์): ๋ค๊ตญ์ด ๋ธ๋ก๊ทธ๋
@apply
๋ฅผ ์ฌ์ฉํ์ฌ ๊ธ๊ผด ๊ณ์ด, ์ค ๋์ด, ๊ธ๊ผด ํฌ๊ธฐ๋ฅผ ํฌํจํ๋ ๊ธฐ๋ณธ ํ์ดํฌ๊ทธ๋ํผ ๋ฏน์ค์ธ์ ์ ์ํ ์ ์์ต๋๋ค. ์ด ๋ฏน์ค์ธ์ ๋ค๋ฅธ ๋ฌธ์ ์ธํธ๋ฅผ ๊ฐ์ง ์ธ์ด์ ๋ํด ๋ค๋ฅธ ๊ธ๊ผด์ ์ ํํ๋ ๊ฒ๊ณผ ๊ฐ์ ์ธ์ด๋ณ ์คํ์ผ๋ก ํ์ฅ๋ ์ ์์ต๋๋ค. - ๋ชจ๋ฐ์ผ ์ฑ(ํ์งํ๋ ์ฝํ
์ธ ): ๋ชจ๋ฐ์ผ ์ฑ์
@apply
๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ํ๋ซํผ๊ณผ ์ฅ์น์ ๊ฑธ์ณ UI ์์์ ๋ํ ์ผ๊ด๋ ์คํ์ผ๋ง์ ๋ง๋ค ์ ์์ต๋๋ค. ๋ฏน์ค์ธ์ ๋ฒํผ, ํ ์คํธ ํ๋ ๋ฐ ๊ธฐํ ์ปจํธ๋กค์ ๋ํ ๊ณตํต ์คํ์ผ์ ์ ์ํ๊ณ , CSS ๋ณ์๋ ์ฌ์ฉ์์ ๋ก์ผ์ผ์ ๋ฐ๋ผ ์์๊ณผ ํ์ดํฌ๊ทธ๋ํผ๋ฅผ ์ฌ์ฉ์ ์ ์ํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค. - ์ ๋ถ ์น์ฌ์ดํธ(์ ๊ทผ์ฑ ์๊ตฌ์ฌํญ): ์ ๋ถ ์น์ฌ์ดํธ๋
@apply
๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ UI ์์๊ฐ ์ ๊ทผ์ฑ ํ์ค์ ์ถฉ์กฑํ๋๋ก ๋ณด์ฅํ ์ ์์ต๋๋ค. ๋ฏน์ค์ธ์ ์ถฉ๋ถํ ์์ ๋๋น, ์ ์ ํ ๊ธ๊ผด ํฌ๊ธฐ ๋ฐ ํค๋ณด๋ ํ์ ์ง์์ ์ ๊ณตํ๋ ์คํ์ผ์ ์ ์ํ ์ ์์ต๋๋ค.
@apply์ ๋์
@apply
๋ ์ ์ฉํ ๋๊ตฌ์ด์ง๋ง, ๋น์ทํ ๊ฒฐ๊ณผ๋ฅผ ์ป๊ธฐ ์ํ ๋์์ ์ธ ์ ๊ทผ ๋ฐฉ์์ด ์์ต๋๋ค. ์ด๋ฌํ ๋์์ ์ดํดํ๋ฉด ํน์ ์๊ตฌ์ ๊ฐ์ฅ ์ ํฉํ ์๋ฃจ์
์ ์ ํํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
- CSS ์ ์ฒ๋ฆฌ๊ธฐ ๋ฏน์ค์ธ (Sass, Less): Sass๋ Less์ ๊ฐ์ CSS ์ ์ฒ๋ฆฌ๊ธฐ๋
@apply
๋ณด๋ค ๋ ๊ฐ๋ ฅํ๊ณ ์ ์ฐํ ์ ์๋ ์์ฒด ๋ฏน์ค์ธ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์ ์ฒ๋ฆฌ๊ธฐ ๋ฏน์ค์ธ์ ์ฌ์ฉํ๋ฉด ์ธ์๋ฅผ ์ ๋ฌํ๊ณ , ์กฐ๊ฑด๋ถ ๋ก์ง์ ์ฌ์ฉํ๋ฉฐ, ๋ค๋ฅธ ๊ณ ๊ธ ์์ ์ ์ํํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋น๋ ํ๋ก์ธ์ค๊ฐ ํ์ํ๋ฉฐ ๋ชจ๋ ํ๋ก์ ํธ์ ์ ํฉํ์ง ์์ ์ ์์ต๋๋ค. - CSS ๋ณ์ (์ฌ์ฉ์ ์ง์ ์์ฑ): CSS ๋ณ์๋ CSS ์ ์ฒด์ ์ ์ฉํ ์ ์๋ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๊ฐ์ ์ ์ํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค. ํนํ ์์, ๊ธ๊ผด ๋ฐ ๊ธฐํ ๋์์ธ ํ ํฐ์ ๊ด๋ฆฌํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค. CSS ๋ณ์๋ ๊ธฐ์กด CSS ๊ท์น๊ณผ ๊ฒฐํฉํ์ฌ ์ ์ฐํ๊ณ ์ ์ง๋ณด์ ๊ฐ๋ฅํ ์คํ์ผ์ ๋ง๋ค ์ ์์ต๋๋ค.
- ์ ํธ๋ฆฌํฐ ์ฐ์ CSS ํ๋ ์์ํฌ (Tailwind CSS): ์ ํธ๋ฆฌํฐ ์ฐ์ CSS ํ๋ ์์ํฌ๋ HTML ์์๋ฅผ ์คํ์ผ๋งํ๊ธฐ ์ํด ๊ฒฐํฉํ ์ ์๋ ๋ฐฉ๋ํ ์ฌ์ ์ ์ ์ ํธ๋ฆฌํฐ ํด๋์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด๋ฌํ ํ๋ ์์ํฌ๋ ๊ฐ๋ฐ ์๋๋ฅผ ํฌ๊ฒ ๋์ด๊ณ ํ๋ก์ ํธ ์ ๋ฐ์ ๊ฑธ์ณ ์ผ๊ด์ฑ์ ๋ณด์ฅํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ฅํฉํ HTML๋ก ์ด์ด์ง ์ ์์ผ๋ฉฐ ๋ชจ๋ ๋์์ธ ์คํ์ผ์ ์ ํฉํ์ง ์์ ์ ์์ต๋๋ค.
- ์น ์ปดํฌ๋ํธ: ์น ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ฉด ์บก์ํ๋ ์คํ์ผ๋ง์ ๊ฐ์ง ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ UI ์์๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ์ด๋ ์น์ฌ์ดํธ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒด์์ ์ฝ๊ฒ ์ฌ์ฌ์ฉํ ์ ์๋ ๋ณต์กํ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋๋ ๊ฐ๋ ฅํ ๋ฐฉ๋ฒ์ด ๋ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์น ์ปดํฌ๋ํธ๋ ๋ ๋ง์ ์ค์ ์ด ํ์ํ๋ฉฐ ๊ฐ๋จํ ์คํ์ผ๋ง ์์ ์๋ ์ ํฉํ์ง ์์ ์ ์์ต๋๋ค.
๊ฒฐ๋ก
@apply
๋ CSS์์ ์ฝ๋ ์ฌ์ฌ์ฉ์ฑ, ์ ์ง๋ณด์์ฑ ๋ฐ ์กฐ์งํ๋ฅผ ๊ฐ์ ํ๋ ๋ฐ ์ ์ฉํ ๋๊ตฌ์
๋๋ค. ๊ทธ ์ด์ , ํ๊ณ ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ดํดํจ์ผ๋ก์จ @apply
๋ฅผ ํจ๊ณผ์ ์ผ๋ก ํ์ฉํ์ฌ ๋ ํจ์จ์ ์ด๊ณ ํ์ฅ ๊ฐ๋ฅํ CSS ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ @apply
๋ฅผ ์ ์คํ๊ฒ ์ฌ์ฉํ๊ณ ์ ์ ํ ๋ ๋์์ ์ธ ์ ๊ทผ ๋ฐฉ์์ ๊ณ ๋ คํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ํ์๋ฅผ ์ ์คํ๊ฒ ํ๊ฐํ๊ณ ์ฌ๋ฐ๋ฅธ ๋๊ตฌ๋ฅผ ์ ํํจ์ผ๋ก์จ ๊ฐ๋ ฅํ๊ณ ์ ์ง๋ณด์ ๊ฐ๋ฅํ CSS ์ํคํ
์ฒ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
ํญ์ ์ฑ๋ฅ์ ์ฐ์ ์ํ๊ณ CSS๋ฅผ ์ฒ ์ ํ ํ
์คํธํ์ฌ @apply
๊ฐ ์์๋๋ก ์๋ํ๊ณ ์๋ํ์ง ์์ ๊ฒฐ๊ณผ๊ฐ ์๋์ง ํ์ธํ๋ ๊ฒ์ ์์ง ๋ง์ญ์์ค. ์ด ๊ฐ์ด๋๋ผ์ธ์ ๋ฐ๋ฅด๋ฉด @apply
๋ฅผ ๋ง์คํฐํ๊ณ ์น ๊ฐ๋ฐ ํ๋ก์ ํธ์์ ๊ทธ ์ ์ฌ๋ ฅ์ ์ต๋ํ ๋ฐํํ ์ ์์ต๋๋ค.