module.css ๊ทธ๋ฆฌ๊ณ  styled-components

2025. 3. 26. 02:21ใ†Style/Styled Component

๋ฐ˜์‘ํ˜•

 

Next.js์™€ TypeScript๋ฅผ ์ฒ˜์Œ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๋ฉ”๋ชจ์žฅ์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งŒ๋“ค์–ด๋ณด์ž..

ํ•˜๋ฉด์„œ ChatGPT๋ฅผ ๋”ฐ๋ผ๊ฐ€๋‹ค๊ฐ€ ์ƒ๊ธด ์˜๋ฌธ์ !

  • module.css ์ด๊ฑฐ ๋ญ์ง€
  • (gpt ์„ค๋ช… ๋“ฃ๊ณ  ๋‚œ ํ›„) ์–ด ๊ทธ๋Ÿผ styled-components๋Š”..?

 

module.css

.module.css๋Š” CSS Modules ์„ ์‚ฌ์šฉํ•  ๋•Œ๋งŒ ๋ถ™์ด๋Š” ๊ฑฐ๋‹ค.

  ์ผ๋ฐ˜ CSS CSS ๋ชจ๋“ˆ
์ ์šฉ ๋ฐฉ์‹ className="memo-container" className={styles.memoContainer}
์ „์—ญ/๋กœ์ปฌ ๋ฒ”์œ„ ์ „์—ญ(Global) ๋กœ์ปฌ(Local)
์ถฉ๋Œ ๊ฐ€๋Šฅ์„ฑ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ์™€ ํด๋ž˜์Šค๋ช…์ด ๊ฒน์น  ์ˆ˜ ์žˆ์Œ ๊ฐ™์€ ํด๋ž˜์Šค๋ช…์ด ์žˆ์–ด๋„ ๋…๋ฆฝ์ ์œผ๋กœ ๊ด€๋ฆฌ
์‚ฌ์šฉ ์˜ˆ์‹œ import "./global.css"; import styles from "./Memo.module.css";

 

-> ๊ฐ ์ปดํฌ๋„ŒํŠธ๋ณ„๋กœ ๋…๋ฆฝ์ ์ธ ์Šคํƒ€์ผ์„ ์œ ์ง€ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹๋‹ค

-> ์ „์—ญ CSS๋Š” ๊ด€๋ฆฌ๊ฐ€ ์–ด๋ ต๊ณ  ์ถฉ๋Œ ์œ„ํ—˜์ด ์ปค์ง€๋ฏ€๋กœ ๊ฐ ์ปดํฌ๋„ŒํŠธ๋งˆ๋‹ค .module.css๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค

-> .css๋Š” body, html, button๊ณผ ๊ฐ™์€ ๊ธฐ๋ณธ ์š”์†Œ ์Šคํƒ€์ผ์„ ์ง€์ •ํ•  ๋•Œ๋‚˜ ๊ณตํ†ต ์Šคํƒ€์ผ์„ ๊ด€๋ฆฌํ•˜๊ณ  ์‹ถ์„ ๋•Œ(global.css์—์„œ ํฐํŠธ, ์ƒ‰์ƒ ๋“ฑ์˜ ๊ธฐ๋ณธ๋ ˆ์ด์•„์›ƒ ์ •์˜)์“ฐ๋ฉด ์ข‹๋‹ค

 

 

styled-components vs .module.css

  styled-components .module.css
์Šคํƒ€์ผ ์ ์šฉ ๋ฐฉ์‹ JS/TS์—์„œ ์ง์ ‘ ์Šคํƒ€์ผ๋ง ๋ณ„๋„์˜ .module.css ํŒŒ์ผ์—์„œ ์Šคํƒ€์ผ ๊ด€๋ฆฌ
CSS ๋ฒ”์œ„ ์ž๋™์œผ๋กœ ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„๋กœ ์บก์Аํ™” ๋กœ์ปฌ ๋ฒ”์œ„๋กœ๋งŒ ์ ์šฉ(๋˜์ด๋˜์ด)
๋™์  ์Šคํƒ€์ผ props๋ฅผ ํ™œ์šฉํ•œ ๋™์  ์Šคํƒ€์ผ ์ ์šฉ ๊ฐ€๋Šฅ ๊ธฐ๋ณธ์ ์œผ๋กœ๋Š” ์–ด๋ ค์›€(className์œผ๋กœ ์ œ์–ด)
์„ฑ๋Šฅ SSR ์‹œ ์„ฑ๋Šฅ ์ด์Šˆ ๋ฐœ์ƒ Next.js ๊ธฐ๋ณธ ์ง€์› ๋ฐฉ์‹์œผ๋กœ ์„ฑ๋Šฅ ์ตœ์ ํ™”
์ „์—ญ ์Šคํƒ€์ผ ์ ์šฉ createGlobalStyle ์‚ฌ์šฉ global.css์™€ ๊ฐ™์€ ํŒŒ์ผ์„ ๋”ฐ๋กœ ์ƒ์„ฑ

 

 

Next.js์—์„œ styled-components๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ ์ข‹์€ ์ƒํ™ฉ

  • ๋™์ ์ธ ์Šคํƒ€์ผ ๋ณ€๊ฒฝ(props์— ๋”ฐ๋ฅธ ์ƒ‰์ƒ ๋ณ€๊ฒฝ ๋“ฑ)์ด ๋งŽ์„ ๊ฒฝ์šฐ
  • CSS-in-JS ์Šคํƒ€์ผ๋ง์„ ์„ ํ˜ธํ•จ
  • ๋””์ž์ธ ์‹œ์Šคํ…œ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ(ex. styled-components+ThemProvider)

๊ทผ๋ฐ Next.js์—์„œ๋Š” SSR ์ง€์›์„ ์œ„ํ•œ ์ถ”๊ฐ€ ์„ค์ •์ด ํ•„์š”ํ•˜๋‹ค

  • "npm install styled-components"
  • _document.tsx ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜์—ฌ SSR ์ง€์› ์ถ”๊ฐ€

 

Next.js์—์„œ .module.css๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ ์ข‹์€ ์ƒํ™ฉ

  • Next.js์—์„œ ๊ธฐ๋ณธ ์ง€์›๋˜๋ฏ€๋กœ ์ถ”๊ฐ€ ์„ค์ •x
  • ์ปดํฌ๋„ŒํŠธ๋ณ„๋กœ ์Šคํƒ€์ผ์„ ๋ถ„๋ฆฌํ•˜๊ณ  ์‹ถ์„ ๋•Œ
  • SSR ์„ฑ๋Šฅ์„ ๊ณ ๋ คํ•œ๋‹ค๋ฉด
  • ์ „ํ†ต์ ์ธ CSS ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•  ๊ฑฐ๋ผ๋ฉด

 

 

 

 

 

๊ทธ๋Ÿฌ๋ฏ€๋กœ ํ”„๋กœ์ ํŠธ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒ ์ง€๋งŒ...

 

  • .module.css(๊ธฐ๋ณธ ์Šคํƒ€์ผ) + styled-components(๋™์  ์Šคํƒ€์ผ) + css(๊ธฐ๋ณธ ์Šคํƒ€์ผ)
  • styled-components(์บก์Аํ™”) + css(๊ธฐ๋ณธ ์Šคํƒ€์ผ)

 

์ด๋Ÿฐ์‹์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉด ๋˜์ง€ ์•Š์„๊นŒ ์‹ถ๋‹ค.

์ด๊ฑด ๋” ์ฐพ์•„๋ณด๋ฉด์„œ ์–ด๋–ค ์‹์œผ๋กœ ์ž‘์„ฑํ•˜๋Š” ๊ฒŒ ์ข‹์„์ง€ ์•Œ์•„๋ด์•ผ๊ฒ ๋‹ค.

๋ฐ˜์‘ํ˜•

'Style > Styled Component' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Styled Components : ์ „์—ญ ์Šคํƒ€์ผ๋ง  (1) 2025.02.15
Styled Components  (0) 2025.02.15