몰래카메라 조용한카메라 무음카메라 닌자카메라 블랙박스카메라
© 2025 Shelled Nuts Blog. All rights reserved.
Capture your moments quietly and securely
Stripe의 혁신적인 개발자 경험과 Kinde가 이끄는 인증 시스템의 미래를 살펴보고, 개발자 친화적 솔루션 도입 인사이트를 제공합니다.
Shelled AI (한국)
복잡한 환경에서 에이전트 협업 시뮬레이션 실습을 통해 멀티 에이전트 시스템의 실제 적용과 사례를 단계별로 체험해보세요.
Shelled AI (한국)
한 번의 API 호출로 인증과 결제를 동시에 처리하는 비밀 패턴을 소개합니다. 개발 효율과 보안을 동시에 향상시키는 최신 웹 개발 팁!
Shelled AI (한국)
어, 또 만났네요! 지난번 "Vite가 Webpack을 넘어서며 드러난 숨겨진 함정과 극복법" 글, 다들 어떠셨나요? 댓글 보니까 Vite에서 Micro-Frontend 아키텍처 적용에 대해 궁금해하시는 분들이 정말 많더라고요. 그래서 오늘은 이 주제를 제대로 파헤쳐볼까 합니다. 준비되셨죠?
저도 처음엔 “Vite랑 Micro-Frontend, 둘 다 핫하긴 한데, 실제로 잘 어울릴까?” 이런 의문이 많았어요. 그런데 직접 부딪혀보니, 대규모 프로젝트에서 각 팀이 독립적으로 개발하고 배포할 때 Vite가 얼마나 큰 힘이 되는지 실감하게 됐죠. 오늘은 Vite의 빠른 빌드와 모듈 핫 리로드가 Micro-Frontend 구조에서 어떻게 시너지를 내는지, 그리고 실제 적용 과정에서 겪었던 좌충우돌 경험담까지 솔직하게 공유할 예정이에요.
이 글을 다 읽고 나면, 여러분도 Vite 환경에서 Micro-Frontend 아키텍처를 자신 있게 설계할 수 있을 거예요. 복잡해 보여도 괜찮아요—저랑 같이 한 걸음씩 차근차근 배워봅시다!
먼저, Vite와 Micro-Frontend 아키텍처가 뭔지, 그리고 왜 이렇게 주목받는지부터 짚고 넘어가죠.
개발할 때 “왜 이렇게 서버가 느리지?” “코드 수정했는데, 반영이 바로 안 되네?” 이런 생각 한 번쯤 해보셨죠? 저도 예전에 Webpack 쓸 땐 저장하고 커피 한 잔 마시고 와야 화면이 바뀌곤 했어요. 그런데 Vite를 쓰면, 정말 ‘순간이동’ 수준으로 빨라집니다. 저장하자마자 바로 반영되는 핫 리로딩(Hot Module Replacement, HMR)! 개발할 맛이 확 살아나요.
Vite는 ES 모듈(ESM)을 기본으로 사용해서, 소스 코드를 바로 실행해주고, 빌드할 때는 Rollup을 써서 번들도 최적화해줍니다. 그래서 코드가 많아져도, 대규모 프로젝트에서도 속도가 확 떨어지지 않아요. Vue, React 등 다양한 프레임워크 지원은 물론, 플러그인 시스템도 유연해서 필요한 기능을 금방 붙일 수 있죠.
Micro-Frontend 아키텍처는 한마디로, 하나의 큰 프론트엔드 앱을 여러 개의 작은 앱(마이크로 프론트엔드)으로 쪼개서 개발하는 방식이에요. 예를 들어, 네이버 메인 페이지를 생각해보면, 뉴스, 날씨, 검색 등 각각의 영역을 독립적으로 개발하고 배포할 수 있는 거죠. 한 팀이 뉴스, 또 다른 팀이 날씨를 맡아서, 서로 방해받지 않고 빠르게 개발할 수 있어요.
실제로 대기업에서 팀 단위로 서비스 쪼개서 개발하는 데 자주 쓰이더라고요. 물론, 이렇게 쪼개놓으면 합쳐서 서비스로 보여줄 때 복잡해질 수 있는데, 잘 관리하면 장애가 한 곳에만 국한되는 등 장점도 많아요. 저도 처음엔 이 구조가 너무 복잡해 보여서 겁먹었는데, 막상 써보니까 각 팀이 자기 파트에만 집중할 수 있어서 효율이 확 오르더라고요.
여기서 중요한 건, Vite가 왜 Micro-Frontend에 딱 맞냐는 거잖아요? Vite의 빠른 HMR, 모듈 단위 개발 환경 덕분에 각 마이크로 프론트엔드가 완전 독립적으로 돌아가요. 또 빌드 결과물이 ES 모듈로 나오니까, 각각의 작은 앱을 표준 방식으로 묶어서 통합하기가 정말 쉬워요. 그리고 플러그인이나 설정도 자유롭게 바꿀 수 있어서, 팀마다 다른 기술 스택을 써도 무리 없이 맞춰줄 수 있죠.
실제로 프로젝트에서 Vite로 마이크로 프론트엔드 적용해봤는데, 개발 속도가 체감될 만큼 빨라졌고, 배포도 훨씬 깔끔해졌어요. 물론, 아직 저도 완벽하게 마스터한 건 아니라서 실수도 했지만, 경험상 Vite와 Micro-Frontend 조합은 “와, 이건 진짜 써볼만하다!”라고 말씀드릴 수 있습니다.
잠깐, 여기까지 정리해볼게요.
Vite는 빠르고 유연한 개발 환경 + Micro-Frontend는 독립적인 개발과 배포 → 둘이 만나면 대규모 프로젝트도 스트레스 없이 관리가 가능하다!
이런 경험, 여러분도 해보고 싶지 않으세요?
이제 Vite의 주요 기능이 Micro-Frontend 개발에 어떤 이점을 주는지 하나씩 풀어볼게요.
Webpack이나 CRA(Create React App)로 프론트엔드 개발해보셨던 분들, 저장할 때마다 “빌드 중...” 메시지 보고 있으면 답답해서 커피 한 잔 더 타오고 싶어지지 않나요? 그런데 Vite는 다릅니다. 개발 서버가 정말 ‘순간이동’ 수준으로 켜지고, 코드 수정하면 해당 모듈만 즉각 갱신돼요. 페이지 전체를 다시 로딩하지 않아도 UI가 바로 반영되니까, 특히 Micro-Frontend 팀별로 독립 개발할 때 엄청난 효율이 나옵니다.
제가 여러 팀이 동시에 프론트엔드를 나눠 개발했을 때, Vite의 HMR 덕분에 각자 실시간으로 결과물을 빠르게 확인할 수 있었어요. 협업이 한결 편해지더라고요. 여러분도 이런 경험 있으셨죠?
Micro-Frontend 환경에선 여러 개의 작은 앱이 동시에 로드되니까, 빌드가 느리면 배포도, 테스트도 다 늦어져요. Vite는 ES 모듈(ESM)을 그대로 활용해서, 바뀐 모듈만 빠르게 새로 빌드해줍니다. 실제로 ‘어? 벌써 끝났어?’ 싶을 정도로 초기 빌드가 빨라요. 덕분에 개발자는 기다리지 않고 바로바로 작업할 수 있죠.
잠깐, 여기서 숨 좀 돌리고 갈까요?
Vite = 빠른 Start, 빠른 수정, 빠른 배포.
이게 Micro-Frontend 구조에선 진짜 핵심이더라고요.
Vite는 Rollup 기반이라 빌드 과정을 세밀하게 제어할 수 있어요. 예를 들어, 팀마다 빌드 최적화 방법이 달라도, 플러그인 추가해서 각자 필요한 빌드 설정을 쉽게 적용할 수 있죠. 저도 처음엔 플러그인 설정이 좀 낯설었는데, 공식 문서와 커뮤니티 레퍼런스가 워낙 잘 돼 있어서 금방 익혔어요. 혹시 저처럼 삽질하실 분들은, 공식 플러그인 리스트 먼저 훑어보시고 적용해보세요!
그리고, 중요한 건 React, Vue, Svelte 등 다양한 프레임워크와 자연스럽게 연동된다는 거예요. 한국 기업 중에서도 마이크로 프론트엔드 도입하면서 팀마다 프레임워크가 다른 경우 많죠? Vite라면 이런 이질적인 앱들도 한 셸에서 무리 없이 통합할 수 있습니다.
실제로 Vite에 Webpack의 Module Federation 플러그인과 Single-SPA를 붙여본 적이 있는데요, 처음엔 호환성 걱정했거든요? 그런데 생각보다 매끄럽게 연동돼서, 각 마이크로 프론트엔드를 독립적으로 배포하고, 필요한 시점에만 동적으로 로딩할 수 있었습니다.
설정 실수로 모듈 경로가 꼬여서 에러가 난 적도 있었는데, Vite는 에러 메시지도 직관적이라 금방 원인 파악이 되더라고요. 아직 저도 배우는 중이지만, 경험상 Vite는 Micro-Frontend 구조에서 진짜 추천할 만한 도구라는 생각이 들어요.
여러분은 어떻게 생각하세요?
이제 Micro-Frontend 아키텍처에서 Vite가 실제로 어떻게 활용되는지, 그리고 어떤 장점이 있는지 한 번 파헤쳐볼게요. 요즘 대기업 IT팀에서 이 방식 많이 쓴다고 하던데, 저도 몇 번 써보고 ‘와, 이건 정말 개발자 입장에서 신세계다’ 싶었던 적이 많았거든요. 여러 팀이 독립적으로 개발하다 보면 빌드 시간이 길어지고, 통합할 때 충돌이 잦았던 경험… 다들 한 번쯤은 겪어보셨죠? 저만 그런 거 아니죠?
참여했던 한 프로젝트에서는 팀마다 프레임워크가 달랐어요. 어떤 팀은 React, 어떤 팀은 Vue, 또 다른 팀은 Svelte를 썼죠. 이럴 때 Vite가 진짜 빛을 발하더라고요. ES 모듈 기반이라 그런지, 각 팀이 자기 파트만 빠르게 빌드해서 바로바로 통합 서버에 올릴 수 있었어요. 예전 같았으면 공통 빌드 설정 때문에 회의만 몇 시간씩 했을 텐데, Vite 덕분에 번들 충돌도 줄고, 개발 서버도 진짜 ‘순식간’에 떴어요. 솔직히 처음엔 ‘이게 진짜 되나?’ 반신반의했는데, 직접 해보니 속도가 확실히 다르더라고요.
Single-SPA는 여러 프레임워크로 만든 애플리케이션을 하나의 SPA처럼 동작하게 해주는 라이브러리예요. 실제로 경험한 건데, React로 만든 대시보드와 Vue로 만든 보고서 페이지를 Vite로 각각 빌드해서 Single-SPA에 얹으니까, 사용자 입장에서는 한 사이트처럼 매끄럽게 넘어가더라고요. 팀마다 개발 환경 달라도 HMR(Hot Module Replacement) 덕분에 실시간 반영도 잘 되고, 경계 관리도 쉬워서 충돌 걱정도 덜했어요. 물론, 처음엔 Single-SPA 설정이 헷갈릴 수 있는데, 공식 문서와 예제 따라가다 보면 금방 익숙해집니다.
Micro-Frontend에서 진짜 재밌는 부분이 바로 Module Federation인데요, 이건 각 팀이 만든 모듈을 런타임에 ‘필요할 때만’ 불러오는 방식이에요. Vite는 기본적으로 Webpack의 Module Federation을 바로 지원하진 않아요. 저도 이 부분에서 한 번 헤맸는데, vite-plugin-federation 같은 플러그인을 쓰면 비교적 쉽게 적용할 수 있어요. 실제로 이렇게 배포하니까, 전체 앱을 다시 배포하지 않아도 각 마이크로 프론트엔드만 독립적으로 업데이트할 수 있어서 너무 편하더라고요. 초기 로딩 속도도 빨라지고, 운영 중에 한쪽 서비스만 고쳐야 할 때도 부담이 확 줄었어요.
실수하면서 배운 건데, Vite 환경설정이나 통합 플러그인 버전 호환성 체크는 꼭 미리 해보세요. 예전에 버전 안 맞아서 빌드가 안 돼서 멘붕 온 적도 있었거든요. 그리고 팀 간 소통도 진짜 중요해요. 각자 빌드 방식, 라우팅 정책, 글로벌 상태 관리 등은 미리 룰을 정해두는 게 에러 줄이는 지름길이더라고요.
아직 저도 배우는 중이지만, Micro-Frontend에 Vite 적용해보면 ‘아, 이래서 다들 쓰는구나’ 실감하게 될 거예요!
이제 Vite와 Module Federation을 통합할 때 꼭 알아야 할 문제점들과 그 해결책에 대해 제대로 짚어볼게요. 저도 이거 처음 시도했을 때 “와, 이게 생각보다 쉽지 않네?” 싶었던 기억이 있거든요. Vite가 워낙 빠르고 심플해서, Module Federation까지 붙이면 금방 될 줄 알았는데… 막상 해보니까 생각보다 복잡하더라고요.
가장 많이 부딪히는 게 설정 이슈입니다. Vite는 기본적으로 Webpack이 아니잖아요. Module Federation은 원래 Webpack에서 태어난 기능이라, Vite에서 지원하려면 vite-plugin-federation 같은 플러그인을 써야 해요. 근데 여기서부터 꼬이기 시작합니다.
예를 들어, 다음처럼 vite.config.ts
에 federation을 세팅한다고 해볼게요.
// vite.config.ts
import { defineConfig } from 'vite';
import federation from '@originjs/vite-plugin-federation';
export default defineConfig({
plugins: [
({
: ,
: {
: ,
},
: [, ],
}),
],
});
여기서 remotes
에 다른 Micro-Frontend의 엔트리포인트(URL)를 넣고, shared
에 공통 라이브러리를 지정하는 거예요.
중요한 건, Vite와 플러그인 버전이 맞지 않거나, remote의 엔트리포인트가 잘못되면 로딩 실패가 자주 납니다. 저도 “왜 안 되지?” 하면서 한참 헤맸어요.
팁: 두 프로젝트의 라이브러리 버전, 특히 React/React-DOM은 꼭 맞춰두세요. 서로 다르면 아예 컴포넌트가 안 뜨거나, 이벤트가 먹통이 될 수도 있어요.
“같은 React인데 버전이 달라서 Warning이 뜬다”
이거 진짜 빈번합니다. Micro-Frontend 각각이 독립적으로 개발되다 보니,
예를 들어 A 앱은 react 18, B 앱은 react 17이면 콘솔에 경고가 뜨거나, 심하면 앱이 망가져요.
해결책:
<!-- index.html (CDN 분리 예시) -->
<script src="https://unpkg.com/react@18/umd/react.production.min.js"></script>
<script src="https://unpkg.com/react-dom@18/umd/react-dom.production.min.js"></script>
shared: ['react', 'react-dom']
옵션과 함께 쓰면, 실제 번들에는 포함되지 않고 글로벌 객체를 참조하게 됩니다.
처음엔 “Vite니까 빠르겠지!” 했는데, Micro-Frontend가 2~3개로 늘어나면 JS 파일이 우수수 떨어집니다.
이게 바로 코드 스플리팅과 네트워크 요청 수 증가 문제예요.
실제로 이렇게 하다가 초기 로딩이 느려진 적이 있었어요.
실전 팁:
preload
헤더 활용build.rollupOptions.output.manualChunks
로 커스텀 코드 스플리팅// vite.config.ts
export default defineConfig({
build: {
rollupOptions: {
output: {
manualChunks(id) {
if (id.includes('node_modules')) {
return 'vendor';
}
},
},
},
},
});
이게 진짜 머리 아픈 부분이에요.
각 Micro-Frontend가 자기 맘대로 상태를 들고 있으면,
예를 들어 로그인 상태가 A 앱에선 “로그인됨”, B 앱에선 “로그아웃” 이런 식으로 불일치가 생길 수 있거든요.
(실제로 이렇게 해서 사용자 컴플레인 받은 적 있었어요 😅)
해결법:
간단 예시로, Event Bus는 이렇게 구현할 수 있어요:
// event-bus.js
import mitt from 'mitt';
export const eventBus = mitt();
// A Micro-Frontend
eventBus.emit('login', { user: 'kim' });
// B Micro-Frontend
eventBus.(, {
.(, data);
});
라우팅도 마찬가지입니다.
history.pushState를 직접 조작하거나,
공통 라우팅 라이브러리(예: react-router)를 함께 사용해야 URL 충돌을 방지할 수 있어요.
잠깐, 여기서 정리하고 넘어갈게요.
실수하면서 얻은 팁들, 꼭 참고해보세요!
혹시 다른 문제 겪으셨다면 댓글로도 공유해주시면 저도 배우겠습니다 :)
이제 Vite 기반 Micro-Frontend 프로젝트를 실제로 어떻게 구축하고 설정하는지 알아볼까요? “Micro-Frontend라니, 너무 어렵지 않을까?” 걱정하실 수 있는데요, 저도 처음엔 용어부터가 좀 부담스럽더라고요. 그런데 Vite, Module Federation, 그리고 Single-SPA 이 세 가지를 조합하면 생각보다 훨씬 깔끔하게 구현할 수 있습니다. 삽질도 해보고, 성공도 해본 그 경험을 바탕으로 예제와 설정 팁을 공유해볼게요.
기본부터 시작하죠. Vite 프로젝트 생성은 정말 간단합니다. 터미널에서 아래 명령어만 치면 돼요:
npm create vite@latest my-mfe-app -- --template react
cd my-mfe-app
npm install
React 말고도 Vue, Svelte 등 원하는 프레임워크를 고를 수 있다는 점! 저는 React로 실습했는데, Vue도 거의 비슷하게 돌아가더라고요.
이제 진짜 Micro-Frontend의 핵심인 모듈 공유를 위한 설정입니다. Vite에서는 vite-plugin-federation
을 많이 씁니다. 설치부터 해볼까요?
npm install vite-plugin-federation --save-dev
그 다음, vite.config.ts
(또는 js)에 아래처럼 플러그인을 추가합니다.
// vite.config.ts
{ defineConfig } ;
react ;
federation ;
({
: [
(),
({
: ,
: ,
: {
: ,
},
: [, ],
}),
],
});
name
: 이 Micro-Frontend의 이름(중복 안 되게!)filename
: 노출할 엔트리 파일 이름exposes
: 외부에 공개할 컴포넌트(여기선 Button)shared
: 여러 앱에서 공통으로 쓸 라이브러리실제로 exposes
경로 잘못 써서 "파일 못 찾는다" 에러 엄청 봤어요. 파일 경로는 꼭 실제 컴포넌트 위치랑 맞춰주세요!
여러 Micro-Frontend를 하나로 묶어줄 Single-SPA와의 통합입니다.
Single-SPA를 호스트 앱에 설치하세요:
npm install single-spa
그리고 호스트 앱의 진입점(예: index.ts
)에서 각 Micro-Frontend를 등록합니다.
import { registerApplication, start } from 'single-spa';
registerApplication({
name: 'remoteApp',
app: () =>
System.import('http://localhost:5001/assets/remoteEntry.js'),
activeWhen: ['/remote'],
});
start();
여기서 System.import
부분은 Module Federation의 엔트리 파일을 동적으로 불러오는 부분이에요.
실제로 URL 오타 때문에 한참 헤매기도 했습니다. 포트번호랑 파일명 꼭 체크하세요!
Vite는 개발 도중 HMR(핫 모듈 리플레이스먼트)이 진짜 빠릅니다.
그런데 Micro-Frontend 환경에서는 HMR이 안 될 수도 있거든요.
server.origin
이나 cors
옵션을 맞춰줘야 하고, 로컬에서 여러 앱을 띄울 땐 포트 충돌 주의!
빌드 최적화도 중요한데요, Vite의 코드 스플리팅, 트리 쉐이킹을 최대한 활용하세요.
vite-plugin-federation
은 shared 모듈 중복을 자동으로 줄여주니까, 번들 크기도 확실히 줄어듭니다.
여기서 잠깐 정리!
vite-plugin-federation
으로 모듈 공유한다.저도 아직 배우는 중이지만, 이렇게 하니까 확실히 개발 속도도 빨라지고, 코드 관리도 쉬워졌어요. 직접 해보시면 "와, 이건 정말!" 하실걸요?
실수하면서 배우는 것도 많으니, 너무 겁먹지 말고 한 번 도전해보세요!
실제로 Micro-Frontend와 Vite를 결합해서 프로젝트를 운영하다 보면, “이거 진짜 잘 굴러가나?” 걱정이 생길 수밖에 없어요. 저도 처음엔 삽질 많이 했습니다. 그래서 여기, 실전에서 써먹을 수 있는 최적화 전략과 팁을 모아봤어요.
Micro-Frontend 구조에서는 각 앱이 독립적으로 빌드되기 때문에, 코드 스플리팅이 필수입니다. Vite의 manualChunks
옵션을 활용해서 공통 라이브러리(vendor)와 앱 코드를 분리하면, 브라우저 캐싱 효율이 확 올라가요. 실제로 이거 안 해줬다가, 매번 전체 JS가 새로 내려와서 사용자들이 “왜 이렇게 느려졌냐”고 문의한 적도 있었어요.
공통 라이브러리는 반드시 external 처리하거나 shared 옵션으로 빼주세요. 번들에 중복 포함되면, 네트워크 트래픽도 늘고, 로딩 속도도 느려집니다. 저는 React, ReactDOM, styled-components 같은 라이브러리를 shared로 지정해서, 실제 번들 크기를 30% 이상 줄인 적이 있어요.
Module Federation을 쓸 때, remote 엔트리 파일 경로나 publicPath 설정이 잘못되면 런타임 에러가 납니다. 이거 때문에 3시간 넘게 헤맨 적도 있어요…
엔트리 경로, 포트, 파일명은 항상 꼼꼼하게 체크하세요!
여러 Micro-Frontend를 동시에 개발할 때는, 각 앱의 개발 서버를 자동으로 띄우고, Single-SPA 호스트가 이를 동적으로 불러오도록 스크립트를 만들어두면 편해요. 저는 npm-run-all이나 concurrently 같은 툴로 여러 서버를 한 번에 띄우는 스크립트를 만들어서, 매번 터미널을 여러 개 열 필요가 없었죠.
상태 관리, 라우팅 정책은 반드시 팀 간에 합의해서 공통된 방식으로 맞춰야 합니다. 이벤트 버스나 글로벌 상태 라이브러리, 혹은 커스텀 훅을 만들어서 상태를 동기화하면, 사용자 경험이 훨씬 안정적이에요.
이번 글을 통해 Vite와 Micro-Frontend 아키텍처의 핵심 개념, 적용 이점, 실전 활용법, 그리고 Module Federation 통합 시 주의할 점까지 꼼꼼히 살펴봤습니다. Webpack에서 Vite로 전환하며 마주칠 수 있는 숨겨진 함정과 그 극복법까지 얻으셨을 거예요.
이제 소규모 실습 프로젝트로 직접 Vite 기반 Micro-Frontend를 구축해보세요. 작은 성공이 쌓일수록, 여러분의 프론트엔드 아키텍처 역량은 한 단계 더 성장할 것입니다. 변화에 주저하지 말고, 최신 기술을 주도적으로 경험해보시길 응원합니다!
오늘 내용, 어땠나요?
실수도 하고, 삽질도 하면서 배운 경험을 최대한 녹여봤어요.
여러분도 직접 해보시면서 “아, 이래서 이렇게 하는구나!” 느끼실 수 있길 바랍니다.
궁금한 점이나 공유하고 싶은 실패담(!) 있으면 언제든 댓글로 남겨주세요.
다음 글에서 또 만나요! 🚀