# [[Large Frontend Projects|Large Frontend Projects]] ## ๐Ÿ“ŒBrief ๋Œ€์š” ๋Œ€๊ทœ๋ชจ ํ”„๋ก ํŠธ์—”๋“œ ํ”„๋กœ์ ํŠธ(Large Frontend Projects)๋ž€ ์ˆ˜๋ฐฑ ๊ฐœ์˜ ์ปดํฌ๋„ŒํŠธ, ๋™์ ์ธ ์ƒํƒœ ๊ด€๋ฆฌ, ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋””์ž์ธ ์‹œ์Šคํ…œ์„ ํฌํ•จํ•˜๋ฉฐ ๋‹ค์ˆ˜์˜ ๊ฐœ๋ฐœ ํŒ€์ด ๋™์‹œ์— ์ฐธ์—ฌํ•˜๋Š” ๋ณต์žกํ•œ ๊ทœ๋ชจ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค [1]. ์ด๋Ÿฌํ•œ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” UI๋ฅผ ๋‹จ์ˆœํžˆ "์˜ˆ์˜๊ฒŒ" ๋ Œ๋”๋งํ•˜๋Š” ๊ฒƒ์„ ๋„˜์–ด, ๋‹ค์ˆ˜ ๊ฐœ๋ฐœ์ž์˜ ํ˜‘์—…๊ณผ ์ง€์†์ ์ธ ๋ฐ˜๋ณต ์ž‘์—…, ๊ธฐ์ˆ  ๋ถ€์ฑ„์˜ ์ถ•์ ์„ ๊ฒฌ๋ŽŒ๋‚ผ ์ˆ˜ ์žˆ๋Š” ๊ฒฌ๊ณ ํ•œ ์•„ํ‚คํ…์ฒ˜์  ๋ฌด๊ฒฐ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์ด ํ•ต์‹ฌ ๋ชฉํ‘œ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค [2]. ๋”ฐ๋ผ์„œ ์ „์—ญ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์ถฉ๋Œ์ด๋‚˜ '์ŠคํŒŒ๊ฒŒํ‹ฐ ์Šคํƒ€์ผ(spaghetti styles)'๊ณผ ๊ฐ™์€ CSS ๋น„๋Œ€ํ™”(CSS bloat) ํ˜„์ƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด BEM, [[CSS Modules|CSS Modules]], [[Tailwind CSS|Tailwind CSS]] ๋“ฑ๊ณผ ๊ฐ™์€ ์ฒด๊ณ„์ ์ธ CSS ์•„ํ‚คํ…์ฒ˜์™€ ๋ช…ํ™•ํ•œ ํด๋” ๊ตฌ์กฐ ์„ค๊ณ„๊ฐ€ ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค [1-4]. ## ๐Ÿ“– Core Content * **๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ์˜ CSS ์—”์ง€๋‹ˆ์–ด๋ง ๋ฌธ์ œ** ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ์—์„œ๋Š” CSS๊ฐ€ ์ „์—ญ์ ์œผ๋กœ ์ ์šฉ๋œ๋‹ค๋Š” ํŠน์„ฑ ๋•Œ๋ฌธ์— ์˜ˆ๊ธฐ์น˜ ์•Š์€ ์Šคํƒ€์ผ ๋ฎ์–ด์“ฐ๊ธฐ(Overrides), ์„ ํƒ์ž ํŠน์ด์„ฑ(Specificity) ์ถฉ๋Œ, ์ค‘๋ณต ์Šคํƒ€์ผ, ๊ทธ๋ฆฌ๊ณ  ์ƒˆ๋กœ์šด ๊ฐœ๋ฐœ์ž์˜ ์˜จ๋ณด๋”ฉ ์ง€์—ฐ ๋“ฑ์˜ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค [1, 5]. ์ด๋Š” ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ๊ณผ ์žฅ๊ธฐ์ ์ธ ํ™•์žฅ์„ฑ์— ์ง์ ‘์ ์ธ ์•…์˜ํ–ฅ์„ ๋ฏธ์น˜๋ฏ€๋กœ, CSS๋ฅผ ๋‹จ์ˆœํ•œ ๋ฐ์ฝ”๋ ˆ์ด์…˜ ๋ ˆ์ด์–ด๊ฐ€ ์•„๋‹Œ ์—„๊ฒฉํ•œ ์—”์ง€๋‹ˆ์–ด๋ง ๊ทœ์œจ๋กœ ์ ‘๊ทผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [2, 5]. * **ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ํด๋” ๊ตฌ์กฐ ๋ฐ ์•„ํ‚คํ…์ฒ˜ ([[Feature-Sliced Design|Feature-Sliced Design]])** ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ๊ฐ€ ํ†ต์ œ ๋ถˆ๋Šฅ ์ƒํƒœ๊ฐ€ ๋˜๋Š” ๊ฒƒ์„ ๋ง‰๊ธฐ ์œ„ํ•ด ๋ช…ํ™•ํ•œ ํด๋” ๊ตฌ์กฐ(์˜ˆ: API, Components, Context, Hooks, Pages, Services ๋“ฑ ์—ญํ• ๋ณ„ ๋ถ„๋ฆฌ)๊ฐ€ ์š”๊ตฌ๋ฉ๋‹ˆ๋‹ค [6-11]. ๋” ๋‚˜์•„๊ฐ€ **[[Feature-Sliced Design (FSD)|Feature-Sliced Design (FSD]]** ๊ฐ™์€ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋„์ž…ํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์—ฌ๋Ÿฌ ๊ณ„์ธต์œผ๋กœ ๋‚˜๋ˆ„๊ณ  ๊ฐ ๊ณ„์ธต์— ์—„๊ฒฉํ•œ ์˜์กด์„ฑ ๊ทœ์น™์„ ์ ์šฉํ•ด ๋ชจ๋“ˆ ๊ฐ„ ๊ฒฝ๊ณ„๋ฅผ ๋ช…ํ™•ํžˆ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค [12]. ๊ด€๋ จ ๋กœ์ง๊ณผ CSS ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ธฐ๋Šฅ(Feature) ๊ธฐ๋ฐ˜ ๋””๋ ‰ํ† ๋ฆฌ์— ํ•จ๊ป˜ ๋ฐฐ์น˜ํ•˜๋ฉด, ํŠน์ • ๊ธฐ๋Šฅ์„ ์ œ๊ฑฐํ•  ๋•Œ ๊ด€๋ จ ์Šคํƒ€์ผ๋„ ์ž๋™์œผ๋กœ ์ œ๊ฑฐ๋˜์–ด ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ(Ghost styles)๊ฐ€ ์Œ“์ด๋Š” ๊ฒƒ์„ ๋ง‰์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [13]. * **์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ์œ„ํ•œ CSS ๊ตฌ์กฐ ์„ค๊ณ„ ๋ฐฉ์‹** ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์Šคํƒ€์ผ์— ์บก์Аํ™”๋ฅผ ์ œ๊ณตํ•˜์—ฌ ์ „์—ญ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•˜๋Š” ์ „๋žต์ด ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค [2]. * **[[BEM (Block Element Modifier)|BEM (Block Element Modifier]]:** ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋…๋ฆฝ์ ์ธ ๋ธ”๋ก(Block), ํ•˜์œ„ ์š”์†Œ(Element), ์ƒํƒœ(Modifier)๋กœ ๋‚˜๋ˆ„์–ด ์ง๊ด€์ ์ด๊ณ  ํ‰๋ฉด์ ์ธ(Flat) ํด๋ž˜์Šค ๋ช…๋ช… ๊ทœ์น™์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค [5, 14-16]. ๊นŠ์€ DOM ์ค‘์ฒฉ์— ์˜์กดํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๊ฒฐํ•ฉ๋„๊ฐ€ ๋‚ฎ๊ณ  ์ปดํฌ๋„ŒํŠธ ์‘์ง‘๋„๋ฅผ ๋†’์—ฌ์ฃผ์ง€๋งŒ, ์‚ฌ๋žŒ์˜ ์ˆ˜๋™ ๊ด€๋ฆฌ์— ์˜์กดํ•˜๋ฏ€๋กœ ์‹ค์ˆ˜๋กœ ์ธํ•œ ์ถฉ๋Œ ์œ„ํ—˜์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค [17, 18]. * **CSS Modules:** ๋นŒ๋“œ ํƒ€์ž„์— ๊ณ ์œ ํ•œ ํ•ด์‹œ(Hashed) ํด๋ž˜์Šค๋ช…์„ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜์—ฌ ์™„์ „ํ•œ ๋กœ์ปฌ ์Šค์ฝ”ํ•‘(Local scoping)์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค [19-22]. ํ‘œ์ค€ CSS ๋ฌธ๋ฒ•์˜ ์žฅ์ ์„ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•˜๋ฉด์„œ๋„ ๊ฐœ๋ฐœ์ž์˜ ๋ช…๋ช… ๊ทœ์น™ ๊ธฐ์–ต ๋ถ€๋‹ด์„ ๋œ์–ด์ฃผ์–ด ๋Œ€๊ทœ๋ชจ ํ˜‘์—…์— ์œ ๋ฆฌํ•ฉ๋‹ˆ๋‹ค [19, 21]. * **Tailwind CSS (Utility-First):** ์œ ํ‹ธ๋ฆฌํ‹ฐ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ผ๊ด€๋œ ๋””์ž์ธ ์‹œ์Šคํ…œ์„ ๊ฐ•์ œํ•˜๊ณ , ์‚ฌ์šฉ๋œ ํด๋ž˜์Šค๋งŒ ๋นŒ๋“œ์— ํฌํ•จ์‹œ์ผœ ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ๋„ CSS ํŒŒ์ผ ํฌ๊ธฐ๊ฐ€ ์ผ์ • ์ˆ˜์ค€์—์„œ ์œ ์ง€๋˜๋„๋ก(Plateau) ๋•์Šต๋‹ˆ๋‹ค [23, 24]. ๋‹ค๋งŒ HTML ์ฝ”๋“œ๊ฐ€ ๊ธธ์–ด์ง€๋Š” ๋‹จ์ ์ด ์žˆ์–ด, ์ตœ๊ทผ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ํŒ€๋“ค์€ **๋ ˆ์ด์•„์›ƒ๊ณผ ๊ฐ„๊ฒฉ์—๋Š” Tailwind๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋ณต์žกํ•œ ๊ฐœ๋ณ„ ์ปดํฌ๋„ŒํŠธ์—๋Š” CSS Modules๋‚˜ [[SCSS|SCSS]]๋ฅผ ๊ฒฐํ•ฉํ•˜๋Š” ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ์ „๋žต**์„ ๋งŽ์ด ์ฑ„ํƒํ•ฉ๋‹ˆ๋‹ค [25-27]. * **์„ฑ๋Šฅ ์ตœ์ ํ™” ๋ฐ ๋ ˆ์ด์•„์›ƒ ๊ด€๋ฆฌ (Performance & Layout)** ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ์—์„œ๋Š” ๋ Œ๋”๋ง ํŒŒ์ดํ”„๋ผ์ธ ์ตœ์ ํ™”๊ฐ€ ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค. ๋ ˆ์ด์•„์›ƒ ๋ฆฌํ”Œ๋กœ์šฐ(Reflows)์™€ ๋ฆฌํŽ˜์ธํŠธ(Repaints)๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด DOM ์กฐ์ž‘์„ ์ผ๊ด„ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜ ์œ„์น˜/ํฌ๊ธฐ ๋ณ€๊ฒฝ ๋Œ€์‹  GPU ๊ฐ€์†์ด ๊ฐ€๋Šฅํ•œ `transform`์ด๋‚˜ `opacity` ์œ„์ฃผ๋กœ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [28-32]. ๋˜ํ•œ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ UI ๊ตฌ์กฐ๋ฅผ ์žก๊ธฐ ์œ„ํ•ด ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€ ์ •๋ ฌ์—๋Š” **[[Flexbox|Flexbox]](1์ฐจ์›)**๋ฅผ, ์ „์ฒด ํŽ˜์ด์ง€ ๋ผˆ๋Œ€ ๋ฐ ๊ตฌ์กฐ์—๋Š” **[[CSS Grid|CSS Grid]](2์ฐจ์›)**๋ฅผ ์กฐํ•ฉํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ๋ž˜ํผ(Wrapper) ์š”์†Œ ์ค‘์ฒฉ์„ ์ค„์ž…๋‹ˆ๋‹ค [33-35]. ## ๐Ÿ”— Knowledge Connections - **Related Topics:** [[CSS แ„€แ…ฎแ„Œแ…ฉ แ„‰แ…ฅแ†ฏแ„€แ…จ แ„‡แ…กแ†ผแ„‰แ…ตแ†จ|CSS ๊ตฌ์กฐ ์„ค๊ณ„ ๋ฐฉ์‹]], BEM, CSS Modules, Tailwind ์ „๋žต, [[แ„ƒแ…ตแ„Œแ…กแ„‹แ…ตแ†ซ แ„‰แ…ตแ„‰แ…ณแ„แ…ฆแ†ท แ„€แ…ขแ„‚แ…งแ†ท|๋””์ž์ธ ์‹œ์Šคํ…œ ๊ฐœ๋…]], [[Feature-Sliced Design|Feature-Sliced Design]] - **Projects/Contexts:** ๋Œ€๊ทœ๋ชจ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ํ”Œ๋žซํผ ๊ฐœ๋ฐœ, ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ํ”„๋ ˆ์ž„์›Œํฌ(React, Vue ๋“ฑ) ํ™˜๊ฒฝ์˜ ํ˜‘์—… - **Contradictions/Notes:** Tailwind CSS์˜ ์œ ํ‹ธ๋ฆฌํ‹ฐ ํด๋ž˜์Šค ๋ฐฉ์‹์€ ๋นŒ๋“œ ํฌ๊ธฐ๋ฅผ ์ตœ์ ํ™”ํ•˜๊ณ  ์ผ๊ด€๋œ ๋””์ž์ธ ์‹œ์Šคํ…œ ์ ์šฉ์— ๋›ฐ์–ด๋‚˜ ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์— ์ด์ƒ์ ์ด๋ผ๋Š” ์ฃผ์žฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค [23, 24]. ๊ทธ๋Ÿฌ๋‚˜ ๊ณผ๋„ํ•˜๊ฒŒ ๊ธธ์–ด์ง€๋Š” ํด๋ž˜์Šค๋ช…์œผ๋กœ ์ธํ•ด HTML ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง€๊ณ  ์ปดํฌ๋„ŒํŠธ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ํž˜๋“ค์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค๋Š” ๋ฐ˜๋ก ๋„ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค [36, 37]. ์ด ๋•Œ๋ฌธ์— ๋Œ€๊ทœ๋ชจ ํ™˜๊ฒฝ์—์„œ๋Š” ์ „์—ญ ๋ ˆ์ด์•„์›ƒ ๋ฐ ๋””์ž์ธ ํ† ํฐ์—๋Š” Tailwind๋ฅผ, ์„ธ๋ฐ€ํ•˜๊ณ  ๋ณต์žกํ•œ ์Šคํƒ€์ผ ์ œ์–ด์—๋Š” CSS Modules ๋˜๋Š” SCSS๋ฅผ ๊ฒฐํ•ฉํ•˜๋Š” ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๋ฐฉ์‹์ด ์‹ค๋ฌด์  ํƒ€ํ˜‘์•ˆ์œผ๋กœ ์ œ์‹œ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค [26, 27, 38]. BEM ์—ญ์‹œ ์œ ์šฉํ•˜๋‚˜ ์ธ์  ์˜ค๋ฅ˜๋กœ ์ธํ•œ ํ•œ๊ณ„ ๋•Œ๋ฌธ์— ์ ์ฐจ CSS Modules๋‚˜ Zero-runtime [[CSS-in-JS|CSS-in-JS]] ๊ฐ™์€ ์ž๋™ํ™” ์บก์Аํ™” ํˆด๋กœ ๋Œ€์ฒด๋˜๋Š” ๊ฒฝํ–ฅ์„ ๋ณด์ž…๋‹ˆ๋‹ค [18, 21, 39]. --- *Last updated: 2026-04-26*