# [[CSS Modules|CSS Modules]] ## πŸ“Œ Brief Summary CSS ModulesλŠ” ν‘œμ€€ CSS 문법을 μ‚¬μš©ν•˜λ©΄μ„œλ„ λΉŒλ“œ λ‹¨κ³„μ—μ„œ 클래슀λͺ…을 κ³ μœ ν•˜κ²Œ λ³€ν™˜ν•˜μ—¬ μ»΄ν¬λ„ŒνŠΈ λ‹¨μœ„λ‘œ μŠ€νƒ€μΌμ„ μžλ™μœΌλ‘œ μŠ€μ½”ν•‘(scoping)ν•˜λŠ” CSS μ•„ν‚€ν…μ²˜ μ ‘κ·Όλ²•μž…λ‹ˆλ‹€ [1-3]. μ „μ—­ λ„€μž„μŠ€νŽ˜μ΄μŠ€ μΆ©λŒμ„ λ°©μ§€ν•˜κΈ° μœ„ν•΄ BEMκ³Ό 같은 μˆ˜λ™ κ·œμΉ™μ— μ˜μ‘΄ν•˜λŠ” λŒ€μ‹ , 도ꡬλ₯Ό 톡해 κ³ μœ ν•œ ν•΄μ‹œ 클래슀λͺ…을 μƒμ„±ν•¨μœΌλ‘œμ¨ μœ μ§€λ³΄μˆ˜μ„±μ„ κ·ΉλŒ€ν™”ν•©λ‹ˆλ‹€ [4, 5]. λŸ°νƒ€μž„ μ˜€λ²„ν—€λ“œκ°€ μ—†λŠ” 정적 CSSλ₯Ό μƒμ„±ν•˜λ―€λ‘œ μ„±λŠ₯이 λ›°μ–΄λ‚˜λ©°, React 및 [[Next.js|Next.js]]와 같은 μ΅œμ‹  ν”„λ ˆμž„μ›Œν¬ ν™˜κ²½μ—μ„œ μ „μ—­ μ˜€μ—Ό 없이 μ•ˆμ „ν•˜κ²Œ UIλ₯Ό ꡬ좕할 수 있게 ν•΄μ€λ‹ˆλ‹€ [6-8]. ## πŸ“– Core Content * **λ™μž‘ 방식 및 νŠΉμ§•:** CSS Modulesλ₯Ό μ‚¬μš©ν•˜λ©΄ κ°œλ°œμžλŠ” μ΅μˆ™ν•œ ν‘œμ€€ CSS 문법을 κ·ΈλŒ€λ‘œ μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [6, 9]. μž‘μ„±λœ CSS 파일(`.module.css`)을 [[JavaScript|JavaScript]] μ»΄ν¬λ„ŒνŠΈμ— μž„ν¬νŠΈν•˜λ©΄, λΉŒλ“œ 도ꡬ가 `.button`κ³Ό 같은 클래슀λͺ…을 `Button_button__x9KdL`κ³Ό 같은 κ³ μœ ν•œ μ‹λ³„μžλ‘œ μžλ™ λ³€ν™˜ν•©λ‹ˆλ‹€ [3, 9]. λ˜ν•œ, `composes` κΈ°λŠ₯을 톡해 κΈ°μ‘΄ μŠ€νƒ€μΌμ„ μ‰½κ²Œ ν™•μž₯ν•  수 있으며 [1], Sass([[SCSS|SCSS]])λ‚˜ PostCSS와 같은 κΈ°μ‘΄ CSS 도ꡬ와도 μ™„λ²½ν•˜κ²Œ ν†΅ν•©λ©λ‹ˆλ‹€ [1, 10]. * **μž₯점:** * **μ™„λ²½ν•œ μŠ€μ½”ν•‘ 및 좩돌 λ°©μ§€:** 클래슀λͺ…이 μžλ™μœΌλ‘œ μ»΄ν¬λ„ŒνŠΈμ— μŠ€μ½”ν•‘λ˜λ―€λ‘œ, μŠ€νƒ€μΌμ΄ μ˜λ„μΉ˜ μ•Šκ²Œ λ‹€λ₯Έ 곳에 영ν–₯을 λ―ΈμΉ˜λŠ” μ „μ—­ 좩돌(global namespace collision) 문제λ₯Ό μ›μ²œμ μœΌλ‘œ μ°¨λ‹¨ν•©λ‹ˆλ‹€ [5, 6, 9, 11]. * **제둜 λŸ°νƒ€μž„ μ˜€λ²„ν—€λ“œ (Zero Runtime Overhead):** μŠ€νƒ€μΌμ΄ λΉŒλ“œ νƒ€μž„μ— μ²˜λ¦¬λ˜μ–΄ 정적 CSS둜 좜λ ₯λ˜λ―€λ‘œ, λŸ°νƒ€μž„μ— μŠ€νƒ€μΌμ„ νŒŒμ‹±ν•˜λŠ” [[CSS-in-JS|CSS-in-JS]] 방식과 달리 λΈŒλΌμš°μ € μ„±λŠ₯에 μ•…μ˜ν–₯을 μ£Όμ§€ μ•ŠμœΌλ©° λΈŒλΌμš°μ € 캐싱을 μ΅œλŒ€ν•œ ν™œμš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [6, 7, 12]. * **κΈ°μ‘΄ CSS μƒνƒœκ³„ 및 μœ μ—°μ„± ν™œμš©:** λ³΅μž‘ν•œ μ• λ‹ˆλ©”μ΄μ…˜, λ―Έλ””μ–΄ 쿼리, 가상 μš”μ†Œ(pseudo-elements) 및 λ³΅μž‘ν•œ μ„ νƒμž λ“± CSS의 λͺ¨λ“  κΈ°λŠ₯을 μ œν•œ 없이 μžμ—°μŠ€λŸ½κ²Œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [7, 9]. νŠΉμ • ν”„λ ˆμž„μ›Œν¬μ— μ’…μ†λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ [7]. * **개발자 κ²½ν—˜ ν–₯상:** TypeScript와 κ²°ν•©ν•˜μ—¬ λͺ¨λ“ˆ 클래슀λͺ…에 λŒ€ν•œ 타이핑을 μƒμ„±ν•¨μœΌλ‘œμ¨ μ˜€νƒ€λ₯Ό λΉŒλ“œ νƒ€μž„μ— μž‘μ•„λ‚Ό 수 μžˆμŠ΅λ‹ˆλ‹€ [13]. * **단점 및 ν•œκ³„:** * **파일 μ „ν™˜ (Context Switching):** μŠ€νƒ€μΌμ„ μˆ˜μ •ν•  λ•Œ JavaScript/JSX 파일과 `.module.css` νŒŒμΌμ„ λ²ˆκ°ˆμ•„ κ°€λ©° μž‘μ—…ν•΄μ•Ό ν•˜λŠ” λ²ˆκ±°λ‘œμ›€μ΄ μžˆμŠ΅λ‹ˆλ‹€ [7]. * **동적 μŠ€νƒ€μΌλ§μ˜ 어렀움:** CSS-in-JS와 달리 CSS와 JavaScript 간에 데이터λ₯Ό κ³΅μœ ν•˜κ±°λ‚˜ μ»΄ν¬λ„ŒνŠΈ μƒνƒœ(Props)에 λ”°λ₯Έ 동적인 μŠ€νƒ€μΌμ„ 직접 λΆ€μ—¬ν•˜λŠ” 과정이 κΉŒλ‹€λ‘œμš°λ©°, 이λ₯Ό μœ„ν•΄ 쑰건뢀 λ¬Έμžμ—΄ μ—°κ²°(string concatenation) μž‘μ—…μ΄ ν•„μš”ν•©λ‹ˆλ‹€ [1, 7, 10]. * **넀이밍 ν”Όλ‘œ (Naming Fatigue):** μœ ν‹Έλ¦¬ν‹° 클래슀λ₯Ό μ œκ³΅ν•˜λŠ” [[Tailwind CSS|Tailwind CSS]]와 달리 κ°œλ°œμžκ°€ μ—¬μ „νžˆ μš”μ†Œλ§ˆλ‹€ 의미 μžˆλŠ” 클래슀 이름을 κ³ λ―Όν•˜κ³  μ§€μ–΄μ£Όμ–΄μ•Ό ν•©λ‹ˆλ‹€ [14]. * **싀무 ν™œμš© μ „λž΅:** CSS ModulesλŠ” νƒ„νƒ„ν•œ CSS μ—­λŸ‰μ„ κ°–μΆ˜ νŒ€μ΄λ‚˜, λ³΅μž‘ν•œ μ• λ‹ˆλ©”μ΄μ…˜ 및 μ„Έλ°€ν•œ CSS μ œμ–΄κ°€ ν•„μš”ν•œ ν”„λ‘œμ νŠΈμ— κ°€μž₯ μ ν•©ν•©λ‹ˆλ‹€ [14]. 특히 2025λ…„ κΈ°μ€€ [[Next.js App Router|Next.js App Router]]와 같은 [[React Server Components|React Server Components]](RSC) ν™˜κ²½μ—μ„œλŠ” λŸ°νƒ€μž„ CSS-in-JS 라이브러리의 ν˜Έν™˜μ„± 문제둜 인해 Tailwind CSSλ‚˜ CSS Modulesλ₯Ό μ‚¬μš©ν•˜λŠ” 것이 κ°•λ ₯히 ꢌμž₯λ©λ‹ˆλ‹€ [8, 15]. λŒ€κ·œλͺ¨ ν”„λ‘œμ νŠΈμ˜ μ‹€λ¬΄μ—μ„œλŠ” λ ˆμ΄μ•„μ›ƒκ³Ό κ°„κ²©μ—λŠ” λΉ λ₯΄κ³  μΌκ΄€λœ Tailwind CSSλ₯Ό μ‚¬μš©ν•˜κ³ , λ³΅μž‘ν•œ μ»€μŠ€ν…€ λ‘œμ§μ΄λ‚˜ μ• λ‹ˆλ©”μ΄μ…˜μ΄ ν•„μš”ν•œ μ»΄ν¬λ„ŒνŠΈ μŠ€νƒ€μΌμ—λŠ” CSS Modulesλ₯Ό μ‚¬μš©ν•˜λŠ” λ°©μ‹μœΌλ‘œ 두 기술의 μž₯점을 κ²°ν•©ν•œ ν•˜μ΄λΈŒλ¦¬λ“œ μ•„ν‚€ν…μ²˜λ₯Ό μ±„νƒν•˜κΈ°λ„ ν•©λ‹ˆλ‹€ [16-18]. ## πŸ”— Knowledge Connections - **Related Topics:** [[BEM|BEM]], Tailwind CSS, CSS-in-JS, [[SCSS|SCSS]] - **Projects/Contexts:** [[ᄏα…₯α†·α„‘α…©α„‚α…₯ᆫ트 가ᄇᅑᆫ α„‹α…‘α„α…΅α„α…¦α†¨α„Žα…₯|μ»΄ν¬λ„ŒνŠΈ 기반 μ•„ν‚€ν…μ²˜]], React Server Components, [[Next.js App Router|Next.js App Router]] - **Contradictions/Notes:** μ†ŒμŠ€ λ¬Έν—Œλ“€μ€ BEM이 개발자의 μˆ˜λ™μ μΈ λͺ…λͺ… κ·œμΉ™ μ€€μˆ˜μ— μ˜μ‘΄ν•΄ 휴먼 μ—λŸ¬κ°€ λ°œμƒν•˜κΈ° μ‰¬μš΄ 반면, CSS ModulesλŠ” λΉŒλ“œ 도ꡬλ₯Ό 톡해 "μžλ™ν™”λœ μΊ‘μŠν™”"λ₯Ό μ œκ³΅ν•˜μ—¬ BEM이 ν’€κ³ μž ν–ˆλ˜ 문제λ₯Ό 더 κΉ”λ”ν•˜κ²Œ ν•΄κ²°ν•œλ‹€κ³  λΉ„κ΅ν•©λ‹ˆλ‹€ [4, 5, 11, 13]. λ˜ν•œ, Tailwind CSSλŠ” 클래슀λͺ…을 μ§“λŠ” μˆ˜κ³ μ™€ 파일 μ „ν™˜μ˜ ν”Όλ‘œλ₯Ό μ—†μ• μ£Όμ§€λ§Œ λ§ˆν¬μ—… μ½”λ“œκ°€ κΈΈμ–΄μ§€κ³  자의적인 값이 μŒ“μΌ 수 μžˆλŠ” 반면, CSS ModulesλŠ” κΉ”λ”ν•œ HTML을 μœ μ§€ν•˜μ§€λ§Œ 파일 μ „ν™˜κ³Ό 넀이밍 ν”Όλ‘œκ°€ μ‘΄μž¬ν•œλ‹€λŠ” νŠΈλ ˆμ΄λ“œμ˜€ν”„ 관계λ₯Ό κ°€μ§‘λ‹ˆλ‹€ [7, 14, 19, 20]. --- *Last updated: 2026-04-26*