2024-08-30,   권수연

Micro Frontend Architecture

마이크로 프론트앤드는 마이크로 서비스처럼 전체 화면을 작동할 수 있는 단위로 나누어 개발한 후 서로 조립하는 방식이다. 여기서 작동 단위에 사용된 프론트앤드 프레임워크로 Angular 이든, React 또는 Vue 또는 Vanilla 자바스크립트에 상관하지 않고 조합 가능한 방법을 제공한다.

1. Micro Frontend (마이크로 프론트엔드)

→ 대규모 애플리케이션의 프론트엔드를 여러 개의 독립적인 마이크로 애플리케이션으로 분리하는 방식이다. 각 마이크로 애플리케이션은 독립적으로 개발, 배포될 수 있으며 다양한 기술 스택을 사용할 수 있다.

  • Simple, decoupled codebase: 작고, 응집력 있고 유지보수성을 가지는 코드베이스를 가질 수 있다.
  • Independent deployment, Autonomous teams: 분리배포가 용이하고, 자율적인 팀 조직운영이 수월해진다.
  • ncremental upgrades: 프론트앤드 개발을 점진적 업그레이드 또는 재작성이 수월해진다.

2. Component-based Architecture (컴포넌트 기반 아키텍처)

→ 애플리케이션을 여러 개의 재사용 가능한 컴포넌트로 분리하여 개발하는 방식이다. React, Angular, Vue.js와 같은 프레임워크에서 주로 사용되며, 각 컴포넌트는 독립적으로 관리되고, 조합되어 전체 애플리케이션을 구성한다.


3. 모듈식 프론트엔드 (Modular Frontend)

→ 프론트엔드를 여러 모듈로 나누어, 모듈 단위로 개발하고 관리하는 방식이다. 각 모듈은 특정 기능을 담당하며, 전체 애플리케이션에 결합됩니다. 이러한 모듈들은 독립적으로 테스트되고, 배포될 수 있다.


4. 모놀리식 프론트엔드 (Monolithic Frontend)

→ 프론트엔드 애플리케이션을 하나의 코드베이스로 관리하며, 모든 기능이 이 코드베이스 안에 포함된다. 전통적인 웹 애플리케이션 방식으로, 규모가 커질수록 관리가 어려워질 수 있다.


주요 개념

  1. 독립된 배포 가능성 : 특정 부분만 수정 후 배포가 가능하다.
  2. 기술 독립성 : 독립적인 애플리케이션으로 다른 기술 스택, 개발 방식, 배포 방법을 자유롭게 선택할 수 있다.
  3. 유지보수와 확장성 : 독립적이기 때문에 유지보수가 용이하며, 애플리케이션의 특정 부분을 쉽게 확장할 수 있다. 새로운 기능을 추가하거나 수정할 때 전체 어플리케이션에 영향을 주지 않으므로 안정성이 높아진다.
  4. 통합 방법 : HTML 기반의 통합, Javascript에서 런타임에 통합, iframe을 통한 통합 등이 있으며, 상황에 따라 선택하면 된다.

단점

  • 복잡성 증가 : 여러 개의 독립적인 시스템을 관리해야한다.
  • 상태 관리 : 마이크로 프론트엔드 간에 상태를 공유해야할 경우, 이를 관리하기 어려울 수 있다.

분할하는 방법

  1. 기능 또는 도메인 별로 분할
    1. chart and grid
    2. search area
    3. notifications
  2. UI 요소 별로 분할
    1. header
    2. footer
    3. sidebar
    4. contents
  3. 페이지 별로 분할
    1. Dashboard
    2. Status
    3. Utility
    4. Administration

통합 및 배포 전략

→ 각 마이크로 프론트엔드는 별도의 url로 배포하거나 메인 애플리케이션에 포함될 수 있다. *Webpack Module Federation, *iframe 또는 Javascript 기반의 런타임 통합 방식을 사용하여 통합할 수 있다.

  • 통합 : 메인 애플리케이션은 각 마이크로 프론트엔드를 로드하고, 필요한 곳에 배치한다.
  • 라우팅 : 사용자가 페이지를 탐색할 때마다 필요한 마이크로 프론트엔드를 로드하고 화면에 표시한다.
  • 배포 : 각 마이크로 프론트엔드는 독립적으로 배포되며, 필요 시 각각의 마이크로 프론트엔드를 업데이트 한다.

결론

→ 이 구조는 대규모 대시보드 애플리케이션을 유연하게 확장하고 유지보수 하는 데에 유리하다. 자신의 영역을 독립적으로 개발하고 배포할 수 있어 생산성을 높이고, 특정 부분만 수정하여 배포할 수 있다는 장점이 있다.

참고

업데이트: