마이크로 프론트엔드의 힘 — 정말로 필요한가요?
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
프론트엔드 개발자, 기술 리더, 대규모 프론트엔드 아키텍처를 설계하는 팀
핵심 요약
- 마이크로 프론트엔드는 대규모 프로젝트에서 팀 간 협업을 개선하지만, 복잡성을 증가시킬 수 있는 trade-off이다.
- 독립적인 배포와 다양한 프레임워크 사용이 가능하지만, 여러 팀 간의 협업과 상태 관리 문제가 발생할 수 있다.
- 대규모 기업(예: 아마존, 스포티파이)이 아닌 경우, 모듈화된 모노리스 아키텍처가 더 간단한 선택일 수 있다.
섹션별 세부 요약
1. 마이크로 프론트엔드란?
- 마이크로 프론트엔드는 독립적인 코드베이스를 가진 팀이 서로 다른 프레임워크를 사용할 수 있는 아키텍처 패턴이다.
- 각 모듈은 독립적으로 빌드/배포 가능하며, 하나의 앱 내에서 여러 프레임워크(React, Vue 등)가 공존할 수 있다.
- 모노리스와의 차이점: 모듈 간 결합도를 낮추면서도, 전체적인 UX를 일관되게 유지할 수 있다.
2. 주요 패턴 및 도구
- Iframe 기반: 보안이 중요한 경우 사용되지만, UX에 부정적인 영향을 줄 수 있다.
- 빌드 시 통합: 여러 팀이 공유 모듈을 사용하지만, 하나의 앱으로 빌드된다.
- 런타임 통합: Module Federation(Webpack 5), single-spa, 커스텀 로더를 통해 모듈을 동적으로 로딩한다.
- Lazy Loading: Shell 컨테이너를 통해 앱을 분할 로딩하여 사용자에게 통합된 경험을 제공한다.
3. 마이크로 프론트엔드의 단점
- 다중 배포 관리: 팀 수가 많을수록 복잡성이 증가하며, 공유 상태 관리가 어려워진다.
- CI/CD 파이프라인 확장: 각 모듈에 대한 별도의 CI/CD 설정이 필요하다.
- 성능 저하: React 중복 로딩, CSS 범위 관리, 초기 로딩 시간 증가 등의 문제가 발생할 수 있다.
4. 마이크로 프론트엔드 사용 시 고려 사항
- 3개 이상의 프론트엔드 팀이 활동하는 경우, 마이크로 프론트엔드가 유리할 수 있다.
- 독립적인 배포가 필수적이라면, 초기 설정 비용을 감수해야 한다.
- 크로스 팀 협업이 어려운 경우, 먼저 코드 구조를 정리하는 것이 더 효과적이다.
- 기존 공유 상태가 많다면, 마이크로 프론트엔드는 오히려 복잡성을 증가시킬 수 있다.
5. 대안 및 추천
- 단일 앱 유지: Feature-based 폴더 구조, 내부 npm 패키지 사용, 명확한 경계 설정으로 모듈화를 달성할 수 있다.
- Webpack Module Federation을 활용해 필요한 부분만 분할하고, 전체를 분리하지 않는다.
- React.lazy, Vue async components, dynamic imports를 사용해 배포 없이 경계를 설정할 수 있다.
결론
- 마이크로 프론트엔드는 스케일링의 필요성이 크지 않다면 과도한 복잡성을 유발할 수 있으므로, 기술적 필요성보다는 속도 향상 여부**를 중심으로 결정해야 한다.
- 실행 전에 PoC를 통해 Module Federation 또는 single-spa의 효과를 검증하고, 팀이 새로운 컨테이너/런타임/오케스트레이션 레이어에 적응할 수 있는지 평가해야 한다.
- 핵심 질문: "우리가 더 빠르게 움직이기 위해 필요한 것인가, 아니면 단지 멋진 기술을 사용하고 싶어서 필요한 것인가?"