Files
2nd/10_Wiki/Topics/AI_and_ML/Frontend System Design.md
T

4.1 KiB

📌 Brief Summary

프론트엔드 시스템 디자인은 현대의 대규모 웹 애플리케이션을 확장 가능하고(Scalable), 유지보수가 용이하며(Maintainable), 고성능인(Performant) 시스템으로 구축하기 위한 아키텍처 설계론이다. UI 구현을 넘어 상태 관리, 모듈화, 빌드 최적화, 거버넌스 등을 통합적으로 엔지니어링하여 비즈니스 가치를 안정적으로 전달하는 것을 목표로 한다.

📖 Core Content

  1. 아키텍처 패러다임: FSD (Feature-Sliced Design)
    • 비즈니스 도메인 중심의 계층화(App, Pages, Widgets, Features, Entities, Shared)를 통해 모듈의 독립성을 확보한다.
    • 단방향 의존성 규칙과 Public API(index.ts)를 강제하여 기능 간의 암시적 결합을 방지하고 코드의 예측 가능성을 높인다.
  2. 엔지니어링 원칙의 적용
    • SOLID (특히 SRP): 컴포넌트의 책임을 단일화하고 비대한 컴포넌트에서 비즈니스 로직을 커스텀 훅으로 추출한다.
    • KISS & DRY: 중복을 제거하되 과도한 추상화를 경계하여 코드의 단순성과 가독성을 유지한다.
  3. 상태 관리 아키텍처
    • 상태의 수명과 성격에 따라 로컬, 전역(Zustand/Redux), 서버 캐시(TanStack Query)로 명확히 레이어를 분리한다.
    • 성능 저하를 방지하기 위해 Context API의 리렌더링 한계를 이해하고 최적화된 상태 구독(Selector) 패턴을 적용한다.
  4. 성능 엔지니어링
    • 번들 사이즈 최적화(Code Splitting)와 런타임 성능(Virtualization, Memoization)을 아키텍처 수준에서 고려하여 사용자 체감 성능을 극대화한다.

⚖️ Trade-offs & Caveats

  • 유연성 vs 규격화: 엄격한 시스템 디자인은 협업과 유지보수에 유리하지만, 빠른 실험과 프로토타이핑이 필요한 초기 단계에서는 개발 속도를 저해할 수 있다.
  • 도구의 종속성: 특정 상태 관리나 빌드 도구에 기반한 디자인은 도구의 버전 업그레이드나 패러다임 변화 시 큰 전환 비용을 발생시킨다.
  • 인지적 부하: 아키텍처가 복잡해질수록 신규 팀원의 온보딩 비용이 증가하므로, 문서화와 자동화된 린트 규칙이 반드시 수반되어야 한다.

🔗 Knowledge Connections

  • Feature-Sliced Design: 시스템 구조화의 핵심 방법론 (관계: 구조적 뼈대)
  • State Management Architecture: 데이터 흐름의 계층화 (관계: 혈액 순환 체계)
  • Performance Engineering: 시스템 효율성 극대화 (관계: 품질 지표)

Deeper Research Questions

  1. FSD 구조에서 계층 간 데이터 전달 시 'Prop Drilling'을 최소화하면서도 단방향 의존성을 지키는 전략은 무엇인가?
  2. 서버 컴포넌트(RSC) 환경에서 시스템 디자인의 'Client State' 레이어는 어떻게 재설계되어야 하는가?
  3. 아키텍처의 Public API 규칙을 위반하는 '심층 임포트(Deep Import)'를 정적 분석으로 완벽히 차단하는 방법은?
  4. 상태 관리 라이브러리 간의 아키텍처적 트레이드오프를 결정하는 정량적 기준(팀 규모, 컴포넌트 수 등)은 존재하는가?
  5. 시스템 디자인 단계에서 고려해야 할 '웹 접근성(A11y)'과 '국제화(i18n)' 레이어의 배치 전략은?

Practical Application Contexts

  • 신규 플랫폼 아키텍처 수립: 제품 개발 초기 단계에서 확장 가능한 폴더 구조 및 기술 스택 레이어링 정의.
  • 기술 부채 해소: 스파게티 코드로 변한 대규모 리액트 앱을 기능별로 모듈화하여 시스템 안정성 회복.

Adjacent Topics

  • Micro-Frontends Architecture
  • Design Systems & Component Library Design
  • Frontend Observability & Monitoring