--- id: wiki-2026-0508-css-modules title: CSS Modules category: 10_Wiki/Topics status: needs_review canonical_id: self aliases: [] duplicate_of: none source_trust_level: A confidence_score: 0.92 tags: [uncategorized] raw_sources: [] last_reinforced: 2026-05-08 github_commit: pending inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08) tech_stack: language: unspecified framework: unspecified --- # [[CSS Modules|CSS Modules]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) CSS ModulesλŠ” ν‘œμ€€ CSS 문법을 μ‚¬μš©ν•˜λ©΄μ„œλ„ λΉŒλ“œ λ‹¨κ³„μ—μ„œ 클래슀λͺ…을 κ³ μœ ν•˜κ²Œ λ³€ν™˜ν•˜μ—¬ μ»΄ν¬λ„ŒνŠΈ λ‹¨μœ„λ‘œ μŠ€νƒ€μΌμ„ μžλ™μœΌλ‘œ μŠ€μ½”ν•‘(scoping)ν•˜λŠ” CSS μ•„ν‚€ν…μ²˜ μ ‘κ·Όλ²•μž…λ‹ˆλ‹€ [1-3]. μ „μ—­ λ„€μž„μŠ€νŽ˜μ΄μŠ€ μΆ©λŒμ„ λ°©μ§€ν•˜κΈ° μœ„ν•΄ BEMκ³Ό 같은 μˆ˜λ™ κ·œμΉ™μ— μ˜μ‘΄ν•˜λŠ” λŒ€μ‹ , 도ꡬλ₯Ό 톡해 κ³ μœ ν•œ ν•΄μ‹œ 클래슀λͺ…을 μƒμ„±ν•¨μœΌλ‘œμ¨ μœ μ§€λ³΄μˆ˜μ„±μ„ κ·ΉλŒ€ν™”ν•©λ‹ˆλ‹€ [4, 5]. λŸ°νƒ€μž„ μ˜€λ²„ν—€λ“œκ°€ μ—†λŠ” 정적 CSSλ₯Ό μƒμ„±ν•˜λ―€λ‘œ μ„±λŠ₯이 λ›°μ–΄λ‚˜λ©°, React 및 [[Next.js|Next.js]]와 같은 μ΅œμ‹  ν”„λ ˆμž„μ›Œν¬ ν™˜κ²½μ—μ„œ μ „μ—­ μ˜€μ—Ό 없이 μ•ˆμ „ν•˜κ²Œ UIλ₯Ό ꡬ좕할 수 있게 ν•΄μ€λ‹ˆλ‹€ [6-8]. ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized 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]. ## πŸ”— 지식 μ—°κ²° (Graph) - **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* ## πŸ€– LLM ν™œμš© 힌트 (How to Use This Knowledge) **μ–Έμ œ 이 지식을 μ“°λŠ”κ°€:** - *(TODO)* **μ–Έμ œ μ“°λ©΄ μ•ˆ λ˜λŠ”κ°€:** - *(TODO)* ## πŸ§ͺ 검증 μƒνƒœ (Validation) - **정보 μƒνƒœ:** needs_review - **좜처 신뒰도:** A - **κ²€ν†  이유:** *(P-Reinforce Phase 1 μžλ™ μ •κ·œν™”. λ³Έλ¬Έ 검증 ν•„μš”.)* ## 🧬 쀑볡 검사 (Duplicate Check) - **κΈ°μ‘΄ μœ μ‚¬ λ¬Έμ„œ:** *(TODO: μΈλ±μ„œ ν΄λŸ¬μŠ€ν„° 리포트 μ°Έμ‘°)* - **처리 방식:** UPDATE (μžλ™ μ •κ·œν™”) - **처리 이유:** Phase 1 μ •κ·œν™” β€” μ˜› ν…œν”Œλ¦Ώ/λˆ„λ½ ν•„λ“œ 보강. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & Updates) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μ—†μŒ - **μ •μ±… λ³€ν™”:** μ—†μŒ ## πŸ•“ λ³€κ²½ 이λ ₯ (Changelog) | λ‚ μ§œ | λ³€κ²½ λ‚΄μš© | 처리 방식 | 신뒰도 | |------|-----------|-----------|--------| | 2026-05-08 | P-Reinforce Phase 1 μ •κ·œν™” (frontmatter + 헀더 ν‘œμ€€ν™”) | UPDATE | A | ## πŸ’» μ½”λ“œ νŒ¨ν„΄ (Code Patterns) **νŒ¨ν„΄ 1:** *(TODO: 이 ν”„λ‘œμ νŠΈ μ»¨λ²€μ…˜ λ°˜μ˜ν•œ ꡬ쑰 μŠ€μΌˆλ ˆν†€)* ```text # TODO ``` ## πŸ€” μ˜μ‚¬κ²°μ • κΈ°μ€€ (Decision Criteria) **선택 Aλ₯Ό 써야 ν•  λ•Œ:** - *(TODO)* **선택 Bλ₯Ό 써야 ν•  λ•Œ:** - *(TODO)* **κΈ°λ³Έκ°’:** > *(TODO)* ## ❌ μ•ˆν‹°νŒ¨ν„΄ (Anti-Patterns) - **[μ•ˆν‹°νŒ¨ν„΄]:** *(TODO: 무엇을 ν•˜λ©΄ μ•ˆ λ˜λŠ”κ°€ + 이유 + λŒ€μ‹  무엇을)*