Micro Frontend Architecture
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)
→ 프론트엔드 애플리케이션을 하나의 코드베이스로 관리하며, 모든 기능이 이 코드베이스 안에 포함된다. 전통적인 웹 애플리케이션 방식으로, 규모가 커질수록 관리가 어려워질 수 있다.
주요 개념
- 독립된 배포 가능성 : 특정 부분만 수정 후 배포가 가능하다.
- 기술 독립성 : 독립적인 애플리케이션으로 다른 기술 스택, 개발 방식, 배포 방법을 자유롭게 선택할 수 있다.
- 유지보수와 확장성 : 독립적이기 때문에 유지보수가 용이하며, 애플리케이션의 특정 부분을 쉽게 확장할 수 있다. 새로운 기능을 추가하거나 수정할 때 전체 어플리케이션에 영향을 주지 않으므로 안정성이 높아진다.
- 통합 방법 : HTML 기반의 통합, Javascript에서 런타임에 통합, iframe을 통한 통합 등이 있으며, 상황에 따라 선택하면 된다.
단점
- 복잡성 증가 : 여러 개의 독립적인 시스템을 관리해야한다.
- 상태 관리 : 마이크로 프론트엔드 간에 상태를 공유해야할 경우, 이를 관리하기 어려울 수 있다.
분할하는 방법
- 기능 또는 도메인 별로 분할
- chart and grid
- search area
- notifications
- UI 요소 별로 분할
- header
- footer
- sidebar
- contents
- 페이지 별로 분할
- Dashboard
- Status
- Utility
- Administration
통합 및 배포 전략
→ 각 마이크로 프론트엔드는 별도의 url로 배포하거나 메인 애플리케이션에 포함될 수 있다. *Webpack Module Federation, *iframe 또는 Javascript 기반의 런타임 통합 방식을 사용하여 통합할 수 있다.
- 통합 : 메인 애플리케이션은 각 마이크로 프론트엔드를 로드하고, 필요한 곳에 배치한다.
- 라우팅 : 사용자가 페이지를 탐색할 때마다 필요한 마이크로 프론트엔드를 로드하고 화면에 표시한다.
- 배포 : 각 마이크로 프론트엔드는 독립적으로 배포되며, 필요 시 각각의 마이크로 프론트엔드를 업데이트 한다.
결론
→ 이 구조는 대규모 대시보드 애플리케이션을 유연하게 확장하고 유지보수 하는 데에 유리하다. 자신의 영역을 독립적으로 개발하고 배포할 수 있어 생산성을 높이고, 특정 부분만 수정하여 배포할 수 있다는 장점이 있다.
참고