CSS Modules์ Styled Components์ ๊ธฐ๋ฅ, ์ฅ๋จ์ , ์ฌ์ฉ ์ฌ๋ก๋ฅผ ํ์ํ์ฌ ์ต์ ์ ์คํ์ผ๋ง ์๋ฃจ์ ์ ์ ํํ๋๋ก ๋๋ ์์ธ ๋น๊ต ๋ถ์์ ๋๋ค.
CSS Modules vs. Styled Components: ์ข ํฉ ๋น๊ต ๋ถ์
๋์์์ด ์งํํ๋ ํ๋ก ํธ์๋ ๊ฐ๋ฐ ํ๊ฒฝ์์ ์คํ์ผ๋ง์ ์๊ฐ์ ์ผ๋ก ๋งค๋ ฅ์ ์ด๊ณ ์ฌ์ฉ์ ์นํ์ ์ธ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋๋ ๋ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค. ์ฌ๋ฐ๋ฅธ ์คํ์ผ๋ง ์๋ฃจ์ ์ ์ ํํ๋ ๊ฒ์ ํ๋ก์ ํธ์ ์ ์ง๋ณด์์ฑ, ํ์ฅ์ฑ, ์ฑ๋ฅ์ ์๋นํ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. ๋๋ฆฌ ์ฌ์ฉ๋๋ ๋ ๊ฐ์ง ์ ๊ทผ ๋ฐฉ์์ผ๋ก๋ CSS Modules์ Styled Components๊ฐ ์์ผ๋ฉฐ, ๊ฐ๊ฐ ๋๋ ทํ ์ฅ๋จ์ ์ ์ ๊ณตํฉ๋๋ค. ์ด ๊ธ์ ์ฌ๋ฌ๋ถ์ด ์ ๋ณด์ ์ ๊ฐํ ๊ฒฐ์ ์ ๋ด๋ฆด ์ ์๋๋ก ์ข ํฉ์ ์ธ ๋น๊ต ๋ถ์์ ์ ๊ณตํฉ๋๋ค.
CSS Modules๋ ๋ฌด์์ธ๊ฐ?
CSS Modules๋ ๋น๋ ์์ ์ CSS ์คํ์ผ์ ๋ํ ๊ณ ์ ํ ํด๋์ค ์ด๋ฆ์ ์์ฑํ๋ ์์คํ ์ ๋๋ค. ์ด๋ฅผ ํตํด ์คํ์ผ์ด ์ ์๋ ์ปดํฌ๋ํธ๋ก ๋ก์ปฌ ๋ฒ์๊ฐ ์ง์ ๋์ด ์ด๋ฆ ์ถฉ๋ ๋ฐ ์๋ํ์ง ์์ ์คํ์ผ ๋ฎ์ด์ฐ๊ธฐ๋ฅผ ๋ฐฉ์งํฉ๋๋ค. ํต์ฌ ์์ด๋์ด๋ ํ์์ฒ๋ผ CSS๋ฅผ ์์ฑํ๋, ์คํ์ผ์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค๋ฅธ ๋ถ๋ถ์ผ๋ก ์ ์ถ๋์ง ์๋๋ค๋ ๊ฒ์ ๋ณด์ฅํ๋ ๊ฒ์ ๋๋ค.
CSS Modules์ ์ฃผ์ ํน์ง:
- ๋ก์ปฌ ์ค์ฝํ(Local Scoping): ๊ณ ์ ํ ํด๋์ค ์ด๋ฆ์ ์๋์ผ๋ก ์์ฑํ์ฌ ์ด๋ฆ ์ถฉ๋์ ๋ฐฉ์งํฉ๋๋ค.
- ์์ธก ๊ฐ๋ฅํ ์คํ์ผ๋ง(Predictable Styling): ์คํ์ผ์ด ์ ์๋ ์ปดํฌ๋ํธ์ ๊ฒฉ๋ฆฌ๋์ด ๋ ์์ธก ๊ฐ๋ฅํ๊ณ ์ ์ง๋ณด์ํ๊ธฐ ์ฌ์ด ์ฝ๋๋ก ์ด์ด์ง๋๋ค.
- CSS ํธํ์ฑ(CSS Compatibility): ๊ธฐ์กด ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ํ์ค CSS ๋๋ ์ ์ฒ๋ฆฌ๊ธฐ CSS(์: Sass, Less)๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
- ๋น๋ ์์ ์ฒ๋ฆฌ(Build-time Processing): ํด๋์ค ์ด๋ฆ ๋ณํ์ ๋น๋ ๊ณผ์ ์์ ๋ฐ์ํ๋ฏ๋ก ๋ฐํ์ ์ค๋ฒํค๋๊ฐ ์ต์ํ๋ฉ๋๋ค.
CSS Modules ์์ :
๊ฐ๋จํ ๋ฒํผ ์ปดํฌ๋ํธ๋ฅผ ์๊ฐํด ๋ด ์๋ค. CSS Modules๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ CSS ํ์ผ์ ๊ฐ์ง ์ ์์ต๋๋ค:
.button {
background-color: #4CAF50; /* Green */
border: none;
color: white;
padding: 15px 32px;
text-align: center;
text-decoration: none;
display: inline-block;
font-size: 16px;
cursor: pointer;
}
.button:hover {
background-color: #3e8e41;
}
๊ทธ๋ฆฌ๊ณ JavaScript ์ปดํฌ๋ํธ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
import styles from './Button.module.css';
function Button() {
return (
);
}
export default Button;
๋น๋ ๊ณผ์ ์์ CSS Modules๋ `Button.module.css`์ `button` ํด๋์ค ์ด๋ฆ์ `Button_button__HASH`์ ๊ฐ์ด ๋ณํํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ๋ด์์ ๊ณ ์ ํ๋๋ก ๋ณด์ฅํฉ๋๋ค.
Styled Components๋ ๋ฌด์์ธ๊ฐ?
Styled Components๋ JavaScript ์ปดํฌ๋ํธ ๋ด์์ ์ง์ CSS๋ฅผ ์์ฑํ ์ ์๊ฒ ํด์ฃผ๋ CSS-in-JS ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. ํ๊ทธ๋ ํ ํ๋ฆฟ ๋ฆฌํฐ๋ด(tagged template literals)์ ํ์ฉํ์ฌ ์คํ์ผ์ JavaScript ํจ์๋ก ์ ์ํ๋ฏ๋ก ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ๊ณ ์กฐํฉ ๊ฐ๋ฅํ ์คํ์ผ๋ง ๋จ์๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
Styled Components์ ์ฃผ์ ํน์ง:
- CSS-in-JS: JavaScript ์ปดํฌ๋ํธ ๋ด์์ ์ง์ CSS๋ฅผ ์์ฑํฉ๋๋ค.
- ์ปดํฌ๋ํธ ๊ธฐ๋ฐ ์คํ์ผ๋ง(Component-Based Styling): ์คํ์ผ์ด ํน์ ์ปดํฌ๋ํธ์ ์ฐ๊ฒฐ๋์ด ์ฌ์ฌ์ฉ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ํฅ์์ํต๋๋ค.
- ๋์ ์คํ์ผ๋ง(Dynamic Styling): styled component์ props๋ฅผ ์ฝ๊ฒ ์ ๋ฌํ์ฌ ์ปดํฌ๋ํธ ์ํ๋ props์ ๋ฐ๋ผ ์คํ์ผ์ ๋์ ์ผ๋ก ์กฐ์ ํ ์ ์์ต๋๋ค.
- ์๋ ๋ฒค๋ ํ๋ฆฌํฝ์ค(Automatic Vendor Prefixes): ํฌ๋ก์ค ๋ธ๋ผ์ฐ์ ํธํ์ฑ์ ์ํด ๋ฒค๋ ํ๋ฆฌํฝ์ค๋ฅผ ์๋์ผ๋ก ์ถ๊ฐํฉ๋๋ค.
- ํ ๋ง ์ง์(Theming Support): ํ ๋ง๋ฅผ ์ํ ๋ด์ฅ ์ง์์ ์ ๊ณตํ์ฌ ๋ค์ํ ์๊ฐ์ ์คํ์ผ ๊ฐ์ ์ฝ๊ฒ ์ ํํ ์ ์์ต๋๋ค.
Styled Components ์์ :
๋์ผํ ๋ฒํผ ์์ ๋ฅผ Styled Components๋ก ๋ง๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ ์์ต๋๋ค:
import styled from 'styled-components';
const StyledButton = styled.button`
background-color: #4CAF50; /* Green */
border: none;
color: white;
padding: 15px 32px;
text-align: center;
text-decoration: none;
display: inline-block;
font-size: 16px;
cursor: pointer;
&:hover {
background-color: #3e8e41;
}
`;
function Button() {
return Click Me ;
}
export default Button;
์ด ์์ ์์ `StyledButton`์ ์ง์ ๋ ์คํ์ผ๋ก ๋ฒํผ์ ๋ ๋๋งํ๋ React ์ปดํฌ๋ํธ์ ๋๋ค. Styled Components๋ ๊ณ ์ ํ ํด๋์ค ์ด๋ฆ์ ์๋์ผ๋ก ์์ฑํ๊ณ CSS๋ฅผ ํ์ด์ง์ ์ฃผ์ ํฉ๋๋ค.
CSS Modules vs. Styled Components: ์์ธ ๋น๊ต
์ด์ ๋ค์ํ ์ธก๋ฉด์์ CSS Modules์ Styled Components๋ฅผ ์์ธํ๊ฒ ๋น๊ตํด ๋ณด๊ฒ ์ต๋๋ค.
1. ๋ฌธ๋ฒ ๋ฐ ์คํ์ผ๋ง ์ ๊ทผ ๋ฐฉ์:
- CSS Modules: ๋ณ๋์ ํ์ผ์์ ํ์ค CSS ๋๋ ์ ์ฒ๋ฆฌ๊ธฐ CSS ๋ฌธ๋ฒ์ ์ฌ์ฉํฉ๋๋ค. ํด๋์ค ์ด๋ฆ ๋งคํ์ ์์กดํ์ฌ ์ปดํฌ๋ํธ์ ์คํ์ผ์ ์ ์ฉํฉ๋๋ค.
- Styled Components: JavaScript ์ปดํฌ๋ํธ ๋ด์์ CSS-in-JS ๋ฌธ๋ฒ์ ์ฌ์ฉํฉ๋๋ค. ํ๊ทธ๋ ํ ํ๋ฆฟ ๋ฆฌํฐ๋ด์ ํ์ฉํ์ฌ ์คํ์ผ์ JavaScript ํจ์๋ก ์ ์ํฉ๋๋ค.
์์ :
CSS Modules (Button.module.css):
.button {
background-color: #4CAF50;
color: white;
}
CSS Modules (Button.js):
import styles from './Button.module.css';
function Button() {
return ;
}
Styled Components:
import styled from 'styled-components';
const StyledButton = styled.button`
background-color: #4CAF50;
color: white;
`;
function Button() {
return Click Me ;
}
2. ์ค์ฝํ ๋ฐ ์ด๋ฆ ์ถฉ๋:
- CSS Modules: ๋น๋ ์์ ์ ๊ณ ์ ํ ํด๋์ค ์ด๋ฆ์ ์๋์ผ๋ก ์์ฑํ์ฌ ์ด๋ฆ ์ถฉ๋์ ์ ๊ฑฐํ๊ณ ๋ก์ปฌ ์ค์ฝํ์ ๋ณด์ฅํฉ๋๋ค.
- Styled Components: ๊ณ ์ ํ ํด๋์ค ์ด๋ฆ์ ๋์ ์ผ๋ก ์์ฑํ์ฌ ์๋ ์ค์ฝํ์ ์ ๊ณตํ๊ณ ์คํ์ผ ์ถฉ๋์ ๋ฐฉ์งํฉ๋๋ค.
๋ ์ ๊ทผ ๋ฐฉ์ ๋ชจ๋ ๋๊ท๋ชจ CSS ์ฝ๋๋ฒ ์ด์ค์์ ํฐ ๊ณจ์นซ๊ฑฐ๋ฆฌ๊ฐ ๋ ์ ์๋ CSS ๋ช ์์ฑ๊ณผ ์ด๋ฆ ์ถฉ๋ ๋ฌธ์ ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ํด๊ฒฐํฉ๋๋ค. ๋ ๊ธฐ์ ์ด ์ ๊ณตํ๋ ์๋ ์ค์ฝํ์ ์ ํต์ ์ธ CSS์ ๋นํด ์๋นํ ์ด์ ์ ๋๋ค.
3. ๋์ ์คํ์ผ๋ง:
- CSS Modules: ์ปดํฌ๋ํธ ์ํ๋ props์ ๋ฐ๋ผ ์คํ์ผ์ ๋์ ์ผ๋ก ์ ์ฉํ๊ธฐ ์ํด ์ถ๊ฐ์ ์ธ ๋ก์ง์ด ํ์ํฉ๋๋ค. ์ข ์ข ์กฐ๊ฑด๋ถ ํด๋์ค ์ด๋ฆ์ด๋ ์ธ๋ผ์ธ ์คํ์ผ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
- Styled Components: styled component ์ ์ ๋ด์์ ์ปดํฌ๋ํธ props์ ์ง์ ์ ๊ทผํ ์ ์์ด ๋์ ์คํ์ผ๋ง์ ๋ ๊ฐ๋จํ๊ณ ๊ฐ๊ฒฐํ๊ฒ ๋ง๋ญ๋๋ค.
์์ (Styled Components๋ฅผ ์ฌ์ฉํ ๋์ ์คํ์ผ๋ง):
const StyledButton = styled.button`
background-color: ${props => props.primary ? '#007bff' : '#6c757d'};
color: white;
padding: 10px 20px;
border: none;
cursor: pointer;
`;
function Button({ primary, children }) {
return {children} ;
}
4. ์ฑ๋ฅ:
- CSS Modules: ํด๋์ค ์ด๋ฆ ๋ณํ์ ๋น๋ ๊ณผ์ ์์ ๋ฐ์ํ๋ฏ๋ก ๋ฐํ์ ์ค๋ฒํค๋๊ฐ ์ต์ํ๋ฉ๋๋ค. ์คํ์ผ์ ํ์ค CSS ํด๋์ค ์ด๋ฆ์ ์ฌ์ฉํ์ฌ ์ ์ฉ๋ฉ๋๋ค.
- Styled Components: ๋ฐํ์์ CSS ์คํ์ผ์ ๋์ ์ผ๋ก ์ฃผ์ ํฉ๋๋ค. ํนํ ๋ณต์กํ ์คํ์ผ๋ง ๋ก์ง์์๋ ์ฝ๊ฐ์ ์ฑ๋ฅ ์ค๋ฒํค๋๋ฅผ ์ ๋ฐํ ์ ์์ต๋๋ค. ํ์ง๋ง ์ด๋ ์ค์ ๋ก๋ ๋ฌด์ํ ์ ์๋ ์์ค์ธ ๊ฒฝ์ฐ๊ฐ ๋ง์ผ๋ฉฐ, transient props์ ๊ฐ์ ์ต์ ํ๊ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
CSS Modules๋ ๋น๋ ์์ ์ฒ๋ฆฌ ๋๋ถ์ ์ผ๋ฐ์ ์ผ๋ก ์ฝ๊ฐ์ ์ฑ๋ฅ ์ด์ ์ ๊ฐ์ง๋๋ค. ๊ทธ๋ฌ๋ Styled Components์ ์ฑ๋ฅ์ ๋๋ถ๋ถ์ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์์ฉ ๊ฐ๋ฅํ ์์ค์ด๋ฉฐ, ๊ฐ๋ฐ์ ๊ฒฝํ์์ ์ด์ ์ด ์ ์ฌ์ ์ธ ์ฑ๋ฅ ๋น์ฉ์ ์์ํ ์ ์์ต๋๋ค.
5. ๋๊ตฌ ๋ฐ ์ํ๊ณ:
- CSS Modules: ๊ธฐ์กด CSS ๋๊ตฌ ๋ฐ ๋น๋ ํ๋ก์ธ์ค(์: Webpack, Parcel, Rollup)์ ์ ํตํฉ๋ฉ๋๋ค. Sass, Less์ ๊ฐ์ CSS ์ ์ฒ๋ฆฌ๊ธฐ์ ํจ๊ป ์ฌ์ฉํ ์ ์์ต๋๋ค.
- Styled Components: CSS-in-JS ๋ผ์ด๋ธ๋ฌ๋ฆฌ(styled-components)๊ฐ ํ์ํฉ๋๋ค. ํ ๋ง ์ ๊ณต์ ๋ฐ ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง ์ง์๊ณผ ๊ฐ์ ์์ฒด ๋๊ตฌ ๋ฐ ํ์ฅ ๊ธฐ๋ฅ ์ํ๊ณ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
CSS Modules๋ ๊ธฐ์กด CSS ์ํฌํ๋ก์ฐ์ ํตํฉ๋ ์ ์์ด ๋๊ตฌ ์ธก๋ฉด์์ ๋ ์ ์ฐํฉ๋๋ค. Styled Components๋ CSS-in-JS ์ ๊ทผ ๋ฐฉ์์ ์ฑํํด์ผ ํ๋ฏ๋ก ๋น๋ ํ๋ก์ธ์ค ๋ฐ ๋๊ตฌ์ ์กฐ์ ์ด ํ์ํ ์ ์์ต๋๋ค.
6. ํ์ต ๊ณก์ :
- CSS Modules: CSS์ ์ต์ํ ๊ฐ๋ฐ์์๊ฒ๋ ๋ฐฐ์ฐ๊ธฐ ๋น๊ต์ ์ฝ์ต๋๋ค. ํต์ฌ ๊ฐ๋ ์ ๊ฐ๋จํฉ๋๋ค. ํ์์ฒ๋ผ CSS๋ฅผ ์์ฑํ๋ ๋ก์ปฌ ์ค์ฝํ์ ์ด์ ์ ๋๋ฆฌ๋ ๊ฒ์ ๋๋ค.
- Styled Components: CSS-in-JS ๋ฌธ๋ฒ๊ณผ ๊ฐ๋ ์ ๋ฐฐ์์ผ ํฉ๋๋ค. JavaScript ์ปดํฌ๋ํธ ๋ด์์ CSS๋ฅผ ์์ฑํ๋ ๋ฐ ์ต์ํด์ง๋ ค๋ฉด ์๊ฐ์ด ๊ฑธ๋ฆด ์ ์์ต๋๋ค.
CSS Modules๋ ํนํ CSS ๊ธฐ์ ์ด ๋ฐ์ด๋ ๊ฐ๋ฐ์์๊ฒ ๋ ์๋งํ ํ์ต ๊ณก์ ์ ๊ฐ์ง๋๋ค. Styled Components๋ ์ฌ๊ณ ๋ฐฉ์์ ์ ํ๊ณผ CSS-in-JS ํจ๋ฌ๋ค์์ ์์ฉํ๋ ค๋ ์์ง๊ฐ ํ์ํฉ๋๋ค.
7. ํ ๋ง:
- CSS Modules: CSS ๋ณ์๋ ๋ค๋ฅธ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ํ ๋ง๋ฅผ ์๋์ผ๋ก ๊ตฌํํด์ผ ํฉ๋๋ค.
- Styled Components: `ThemeProvider` ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ด์ฅ๋ ํ ๋ง ์ง์์ ์ ๊ณตํฉ๋๋ค. ํ ๋ง ๊ฐ์ฒด๋ฅผ ์ ๊ณตํ์ฌ ๋ค๋ฅธ ํ ๋ง ๊ฐ์ ์ฝ๊ฒ ์ ํํ ์ ์์ต๋๋ค.
์์ (Styled Components๋ฅผ ์ฌ์ฉํ ํ ๋ง):
import styled, { ThemeProvider } from 'styled-components';
const theme = {
primaryColor: '#007bff',
secondaryColor: '#6c757d',
};
const StyledButton = styled.button`
background-color: ${props => props.theme.primaryColor};
color: white;
padding: 10px 20px;
border: none;
cursor: pointer;
`;
function Button() {
return Click Me ;
}
function App() {
return (
);
}
8. ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง (SSR):
- CSS Modules: CSS๊ฐ ๋น๋ ๊ณผ์ ์์ ์ถ์ถ๋์ด HTML์ ์ฃผ์ ๋๋ฏ๋ก ์ผ๋ฐ์ ์ผ๋ก SSR๊ณผ ํจ๊ป ๊ตฌํํ๊ธฐ๊ฐ ๊ฐ๋จํฉ๋๋ค.
- Styled Components: ์๋ฒ์์ ์คํ์ผ์ด HTML์ ์ฌ๋ฐ๋ฅด๊ฒ ์ฃผ์ ๋๋๋ก SSR์ ๋ํ ์ถ๊ฐ ๊ตฌ์ฑ์ด ํ์ํฉ๋๋ค. Styled Components๋ SSR์ ์ฉ์ดํ๊ฒ ํ๋ ์ ํธ๋ฆฌํฐ์ ๋ฌธ์๋ฅผ ์ ๊ณตํฉ๋๋ค.
CSS Modules์ Styled Components ๋ชจ๋ Next.js๋ Gatsby์ ๊ฐ์ SSR ํ๋ ์์ํฌ์ ํจ๊ป ์ฌ์ฉํ ์ ์์ต๋๋ค. ํ์ง๋ง Styled Components๋ ์๋ฒ์์ ์ฌ๋ฐ๋ฅธ ์คํ์ผ๋ง์ ๋ณด์ฅํ๊ธฐ ์ํด ๋ช ๊ฐ์ง ์ถ๊ฐ ๋จ๊ณ๊ฐ ํ์ํฉ๋๋ค.
CSS Modules์ ์ฅ๋จ์
์ฅ์ :
- ์น์ํ ๋ฌธ๋ฒ: ํ์ค CSS ๋๋ ์ ์ฒ๋ฆฌ๊ธฐ CSS ๋ฌธ๋ฒ์ ์ฌ์ฉํฉ๋๋ค.
- ์ต์ํ์ ๋ฐํ์ ์ค๋ฒํค๋: ํด๋์ค ์ด๋ฆ ๋ณํ์ด ๋น๋ ๊ณผ์ ์์ ๋ฐ์ํฉ๋๋ค.
- ๋๊ตฌ ํธํ์ฑ: ๊ธฐ์กด CSS ๋๊ตฌ ๋ฐ ๋น๋ ํ๋ก์ธ์ค์ ์ ํตํฉ๋ฉ๋๋ค.
- ์ฌ์ด ํ์ต: CSS์ ์ต์ํ ๊ฐ๋ฐ์์๊ฒ๋ ๋ฐฐ์ฐ๊ธฐ ๋น๊ต์ ์ฝ์ต๋๋ค.
๋จ์ :
- ์๋ ๋์ ์คํ์ผ๋ง: ๋์ ์คํ์ผ๋ง์ ์ํด ์ถ๊ฐ์ ์ธ ๋ก์ง์ด ํ์ํฉ๋๋ค.
- ์๋ ํ ๋ง ๊ตฌํ: ํ ๋ง๋ฅผ ์๋์ผ๋ก ๊ตฌํํด์ผ ํฉ๋๋ค.
Styled Components์ ์ฅ๋จ์
์ฅ์ :
- ์ปดํฌ๋ํธ ๊ธฐ๋ฐ ์คํ์ผ๋ง: ์คํ์ผ์ด ํน์ ์ปดํฌ๋ํธ์ ์ฐ๊ฒฐ๋ฉ๋๋ค.
- ๋์ ์คํ์ผ๋ง: ์ปดํฌ๋ํธ ์ํ๋ props์ ๋ฐ๋ผ ์คํ์ผ์ ์ฝ๊ฒ ๋์ ์ผ๋ก ์กฐ์ ํ ์ ์์ต๋๋ค.
- ์๋ ๋ฒค๋ ํ๋ฆฌํฝ์ค: ํฌ๋ก์ค ๋ธ๋ผ์ฐ์ ํธํ์ฑ์ ์ํด ๋ฒค๋ ํ๋ฆฌํฝ์ค๋ฅผ ์๋์ผ๋ก ์ถ๊ฐํฉ๋๋ค.
- ํ ๋ง ์ง์: ํ ๋ง๋ฅผ ์ํ ๋ด์ฅ ์ง์์ด ์์ต๋๋ค.
๋จ์ :
- CSS-in-JS: CSS-in-JS ๋ฌธ๋ฒ๊ณผ ๊ฐ๋ ์ ๋ฐฐ์์ผ ํฉ๋๋ค.
- ๋ฐํ์ ์ค๋ฒํค๋: ๋ฐํ์์ CSS ์คํ์ผ์ ๋์ ์ผ๋ก ์ฃผ์ ํฉ๋๋ค (์ข ์ข ๋ฌด์ํ ์ ์๋ ์์ค).
- ๋๊ตฌ ์กฐ์ : ๋น๋ ํ๋ก์ธ์ค์ ๋๊ตฌ์ ์กฐ์ ์ด ํ์ํ ์ ์์ต๋๋ค.
์ฌ์ฉ ์ฌ๋ก ๋ฐ ๊ถ์ฅ ์ฌํญ
CSS Modules์ Styled Components ์ฌ์ด์ ์ ํ์ ํ๋ก์ ํธ์ ํน์ ์๊ตฌ ์ฌํญ๊ณผ ํ์ ์ ํธ๋์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค. ๋ค์์ ๋ช ๊ฐ์ง ์ผ๋ฐ์ ์ธ ๊ถ์ฅ ์ฌํญ์ ๋๋ค:
๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ CSS Modules๋ฅผ ์ ํํ์ธ์:
- ํ์ค CSS ๋๋ ์ ์ฒ๋ฆฌ๊ธฐ CSS ์์ฑ์ ์ ํธํ๋ ๊ฒฝ์ฐ.
- ๋ฐํ์ ์ค๋ฒํค๋๋ฅผ ์ต์ํํ๊ณ ์ถ์ ๊ฒฝ์ฐ.
- ๊ธฐ์กด CSS ์ฝ๋๋ฒ ์ด์ค๊ฐ ์๊ณ ์ ์ง์ ์ผ๋ก ๋ชจ๋์ ์คํ์ผ๋ง์ ๋์ ํ๊ณ ์ถ์ ๊ฒฝ์ฐ.
- ํ์ด ์ด๋ฏธ CSS ๋๊ตฌ ๋ฐ ๋น๋ ํ๋ก์ธ์ค์ ์ต์ํ ๊ฒฝ์ฐ.
- ๋๊ตฌ ๋ฐ ๋น๋ ๊ตฌ์ฑ ์ธก๋ฉด์์ ์ต๋ํ์ ์ ์ฐ์ฑ์ด ํ์ํ ๊ฒฝ์ฐ.
๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ Styled Components๋ฅผ ์ ํํ์ธ์:
- JavaScript ์ปดํฌ๋ํธ ๋ด์์ CSS ์์ฑ์ ์ ํธํ๋ ๊ฒฝ์ฐ.
- ๋์ ์คํ์ผ๋ง ๊ธฐ๋ฅ์ด ํ์ํ ๊ฒฝ์ฐ.
- ๋ด์ฅ๋ ํ ๋ง ์ง์์ ์ํ๋ ๊ฒฝ์ฐ.
- ์๋ก์ด ํ๋ก์ ํธ๋ฅผ ์์ํ๊ณ ์ปดํฌ๋ํธ ๊ธฐ๋ฐ ์คํ์ผ๋ง ์ ๊ทผ ๋ฐฉ์์ ์ฑํํ๊ณ ์ถ์ ๊ฒฝ์ฐ.
- ํ์ด CSS-in-JS ํจ๋ฌ๋ค์์ ์ต์ํ ๊ฒฝ์ฐ.
์ฌ์ฉ ์ฌ๋ก ์์:
- ๊ธ๋ก๋ฒ ๊ณ ๊ฐ์ ๋์์ผ๋ก ํ๋ ์ด์ปค๋จธ์ค ํ๋ซํผ (์: ๊ตญ์ ์ ์ผ๋ก ์ ํ ํ๋งค): Styled Components์ ํ ๋ง ๊ธฐ๋ฅ์ ๋ค๋ฅธ ์ง์ญ์ด๋ ๋ธ๋๋์ ๋ง๊ฒ ์น์ฌ์ดํธ์ ๋ชจ์๊ณผ ๋๋์ ์ฝ๊ฒ ์กฐ์ ํ๋ ๋ฐ ์ ์ฉํ ๊ฒ์ ๋๋ค. ๋์ ์คํ์ผ๋ง์ ์ฌ์ฉ์ ์์น๋ ๊ฒ์ ๊ธฐ๋ก์ ๊ธฐ๋ฐ์ผ๋ก ํน์ ํ๋ก๋ชจ์ ์ด๋ ์ ํ ์นดํ ๊ณ ๋ฆฌ๋ฅผ ๊ฐ์กฐํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
- ๋ค์ํ ๋ฌธํ์ ๋ฐฐ๊ฒฝ์ ๋์์ผ๋ก ํ๋ ๋ด์ค ์น์ฌ์ดํธ: ๊ธฐ์กด ์น์ฌ์ดํธ๊ฐ ์ด๋ฏธ ์ ์ ๋ฆฝ๋ CSS ์ํคํ ์ฒ๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค๋ฉด CSS Modules๊ฐ ์ข์ ์ ํ์ด ๋ ์ ์์ต๋๋ค. CSS Modules๊ฐ ์ ๊ณตํ๋ ๋ก์ปฌ ์ค์ฝํ์ ์๋ก์ด ๊ธฐ๋ฅ์ด๋ ์ฝํ ์ธ ์น์ ์ ์ถ๊ฐํ ๋ ์คํ์ผ ์ถฉ๋์ ๋ฐฉ์งํ ๊ฒ์ ๋๋ค.
- ๋ณต์กํ UI ์ปดํฌ๋ํธ๋ฅผ ๊ฐ์ง SaaS ์ ํ๋ฆฌ์ผ์ด์ : Styled Components๋ ์ฌ์ฉ์ ์ญํ ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ํ์ ๋ฐ๋ผ ๋์ ์คํ์ผ๋ง์ด ์ ์ฉ๋ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ๊ณ ์กฐํฉ ๊ฐ๋ฅํ UI ์ปดํฌ๋ํธ๋ฅผ ๋ง๋๋ ๋ฐ ์ ์ฉํ ๊ฒ์ ๋๋ค. ํ ๋ง ์ง์์ ๋ค๋ฅธ ํด๋ผ์ด์ธํธ์๊ฒ ๋ค๋ฅธ ์์ ๊ตฌ์ฑํ๋ ๋ธ๋๋ฉ ์ต์ ์ ์ ๊ณตํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
๊ฒฐ๋ก
CSS Modules์ Styled Components๋ ๋ชจ๋ ํ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํ์ผ๋งํ๊ธฐ ์ํ ํ๋ฅญํ ์๋ฃจ์ ์ ๋๋ค. CSS Modules๋ ์น์ํ CSS ๋ฌธ๋ฒ๊ณผ ์ต์ํ์ ๋ฐํ์ ์ค๋ฒํค๋๋ก ๋ ์ ํต์ ์ธ ์ ๊ทผ ๋ฐฉ์์ ์ ๊ณตํ๋ ๋ฐ๋ฉด, Styled Components๋ ๊ฐ๋ ฅํ ๋์ ์คํ์ผ๋ง ๋ฐ ํ ๋ง ๊ธฐ๋ฅ์ ๊ฐ์ถ ๋ ์ปดํฌ๋ํธ ์ค์ฌ์ ์ธ ์ ๊ทผ ๋ฐฉ์์ ์ ๊ณตํฉ๋๋ค. ํ๋ก์ ํธ์ ์๊ตฌ ์ฌํญ๊ณผ ํ์ ์ ํธ๋๋ฅผ ์ ์คํ๊ฒ ๊ณ ๋ คํจ์ผ๋ก์จ, ํ์์ ๊ฐ์ฅ ์ ํฉํ๊ณ ์ ์ง๋ณด์ ๊ฐ๋ฅํ๋ฉฐ ํ์ฅ ๊ฐ๋ฅํ๊ณ ์๊ฐ์ ์ผ๋ก ๋งค๋ ฅ์ ์ธ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋๋ ๋ฐ ๋์์ด ๋๋ ์คํ์ผ๋ง ์๋ฃจ์ ์ ์ ํํ ์ ์์ต๋๋ค.
๊ถ๊ทน์ ์ผ๋ก "์ต๊ณ ์" ์ ํ์ ํ๋ก์ ํธ์ ํน์ ๋งฅ๋ฝ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค. ๋ ์ ๊ทผ ๋ฐฉ์์ ๋ชจ๋ ์คํํ์ฌ ์ด๋ค ๊ฒ์ด ์์ ์ ์ํฌํ๋ก์ฐ์ ์ฝ๋ฉ ์คํ์ผ์ ๋ ์ ๋ง๋์ง ํ์ธํด ๋ณด์ธ์. ์๋ก์ด ๊ฒ์ ์๋ํ๊ณ ํ๋ก์ ํธ๊ฐ ๋ฐ์ ํจ์ ๋ฐ๋ผ ์์ ์ ์ ํ์ ์ง์์ ์ผ๋ก ํ๊ฐํ๋ ๊ฒ์ ๋๋ ค์ํ์ง ๋ง์ญ์์ค.