# [[Scalable Frontend Systems]]

## 📌 Brief Summary
확장 가능한 프론트엔드 시스템(Scalable Frontend Systems)은 대규모 애플리케이션 및 팀 환경에서 일관성, 성능, 유지보수성을 보장하기 위해 고안된 아키텍처와 스타일링 패러다임의 총체입니다 [1]. 이는 아토믹 디자인과 컴파운드 컴포넌트 같은 재사용 및 확장이 용이한 UI 컴포넌트 패턴을 채택하고, 모노레포와 기능 분할 설계(Feature-Sliced Design)를 통해 코드베이스의 의존성을 엄격히 관리합니다 [2-5]. 또한 디자인 토큰을 활용한 체계적인 테마 관리와 Tailwind CSS와 같은 빌드 타임 기반의 유틸리티 우선 스타일링을 결합하여 뛰어난 런타임 성능과 접근성을 제공하는 것을 목표로 합니다 [6, 7].

## 📖 Core Content
*   **컴포넌트 설계 패러다임 및 재사용성 패턴**
    *   **아토믹 디자인 (Atomic Design):** 브래드 프로스트(Brad Frost)가 제안한 방법론으로, UI를 원자(Atoms), 분자(Molecules), 유기체(Organisms), 템플릿(Templates), 페이지(Pages)의 계층으로 세분화하여 일관된 디자인 시스템의 재사용성을 높입니다 [2, 8, 9]. 
    *   **컴파운드 컴포넌트 (Compound Components):** 아코디언이나 탭과 같은 복잡한 UI에서 다수의 자식 컴포넌트들이 React Context를 통해 상태를 암묵적으로 공유하는 패턴입니다 [3, 10, 11]. 이는 과도한 Prop-drilling을 방지하고 레이아웃 및 구성의 유연성을 사용자가 제어할 수 있게 합니다 [12, 13].
    *   **헤드리스 컴포넌트 (Headless Components):** 상태 관리, 비즈니스 로직, 접근성(A11y) 기능만 캡슐화하고 시각적 마크업과 스타일링은 개발자에게 완전히 위임하여 특정 디자인 시스템에 구애받지 않는 고도의 유연성을 제공합니다 [14-16].
    *   **오버라이드 패턴 (Overrides Pattern):** Uber의 Base Web 등에서 사용되는 패턴으로, 수많은 Prop을 전달하는 대신 컴포넌트 내부의 특정 하위 요소를 타겟팅하여 속성이나 스타일을 완전히 덮어쓰거나 교체할 수 있도록 설계된 패턴입니다 [17-19].

*   **스타일링 접근법 (Tailwind CSS vs Styled-components)**
    *   **Styled-components (CSS-in-JS):** 자바스크립트 내에 스타일을 작성하여 컴포넌트와 강하게 결합시키고 Prop 기반의 동적 스타일링에 유리합니다 [20, 21]. 그러나 런타임에 스타일 태그를 생성 및 주입해야 하므로 CPU 성능 저하가 발생할 수 있으며, Next.js의 App Router 및 React Server Components (RSC) 환경에서는 서버 단에 Context가 없어 별도의 Style Registry를 우회적으로 구성해야 하는 호환성 이슈가 존재합니다 [22-24].
    *   **Tailwind CSS (Utility-first):** 미리 정의된 저수준 유틸리티 클래스를 조합해 스타일링하며, JIT 컴파일러가 빌드 타임에 사용된 CSS만 정적으로 생성합니다 [7, 25, 26]. 런타임 자바스크립트 실행 비용이 '0'에 수렴하므로 번들 크기가 대폭 축소되며 Core Web Vitals(FID, INP 등) 지표가 향상됩니다 [7, 27, 28]. Tailwind v4는 `@theme` 지시어를 사용해 CSS 변수 기반의 설계로 전환되어 빌드 속도와 성능을 한층 더 끌어올렸습니다 [29, 30].

*   **디자인 토큰과 스케일링**
    *   디자인 토큰은 애플리케이션의 시각적 DNA(색상, 타이포그래피, 간격 등)를 정의하는 단일 진실 공급원(Single Source of Truth)입니다 [6, 31]. 
    *   효과적인 확장을 위해 토큰은 원시 값을 나타내는 **기본 토큰(Base/Primitive Tokens)**, 맥락과 의도를 담은 **시맨틱 토큰(Semantic Tokens)**, 특정 UI 변형에 매핑된 **컴포넌트 토큰(Component Tokens)** 등 세 가지 레이어로 구성되어야 합니다 [32-34]. 
    *   토큰은 JSON이나 YAML로 관리되며, Style Dictionary 같은 도구를 통해 다양한 플랫폼용 코드(CSS 변수 등)로 자동 변환되어 라이트/다크 모드와 같은 동적 테마 교체를 수월하게 합니다 [35-37].

*   **프론트엔드 아키텍처 및 코드베이스 구조**
    *   **모노레포 (Monorepo):** 여러 애플리케이션과 공유 라이브러리를 단일 저장소에서 관리하여 원자적 리팩토링을 가능하게 합니다. pnpm workspaces, Turborepo, Nx 등의 도구를 활용하여 패키지 간 종속성과 공용 API 참조 규칙을 엄격하게 적용할 수 있습니다 [4, 38, 39].
    *   **기능 분할 설계 (Feature-Sliced Design, FSD):** 코드를 Shared, Entities, Features, Widgets, Pages, App의 레이어로 구성하여 도메인 간 결합도를 낮추고 모듈 내 응집도를 높여 복잡한 애플리케이션에서도 명확한 단방향 의존성을 유지하도록 하는 아키텍처 설계 방식입니다 [5, 40].

## 🔗 Knowledge Connections
- **Related Topics:** [[Tailwind CSS]], [[Styled-components]], [[Design Tokens]], [[Atomic Design]], [[Compound Components]], [[Headless Components]], [[React Server Components]], [[Monorepo]], [[Feature-Sliced Design]]
- **Projects/Contexts:** [[Shopify Polaris]], [[Uber Base Web]], [[Next.js App Router]]
- **Contradictions/Notes:** 소스 비교에 따르면, Styled-components는 컴포넌트와 스타일을 함께 관리하는 강력한 DX를 제공하지만 런타임 성능 한계와 RSC 환경의 제약을 갖습니다. 반면 Tailwind CSS와 같은 유틸리티 우선 프레임워크는 마크업이 장황해지는(Class Soup) 단점이 있으나, 제로 런타임 오버헤드와 우수한 렌더링 성능 덕분에 규모가 크고 퍼포먼스가 중요한 현대의 React 아키텍처에서 더욱 선호되는 추세입니다 [7, 23, 28, 41].

---
*Last updated: 2026-04-26*