호스트 React 앱과 원격 React 앱 구성하기
호스트 셸과 두 개의 React 원격 앱을 위해 webpack.config.js에서 공개 모듈, 원격 모듈, 공유 종속성을 설정합니다.
호스트 React 앱과 원격 React 앱 구성하기은(는) CoddyKit의 무료 React Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 React Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. React Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
원격 webpack.config.js: ModuleFederationPlugin
원격 애플리케이션은 웹팩 구성에 ModuleFederationPlugin을 추가하고 세 가지 핵심 속성을 설정합니다. name은 고유 식별자(예: "buttonApp"), filename은 매니페스트 출력 파일("remoteEntry.js"), exposes는 공개 이름과 소스 파일 경로를 연결하는 맵입니다.
원격에서 컴포넌트 노출하기
exposes 구성은 공개 모듈 경로를 로컬 파일에 연결합니다: { './Button': './src/Button' }. 따라서 호스트는 'buttonApp/Button'을 가져와 ./src/Button.tsx의 컴포넌트를 받을 수 있습니다. 여러 컴포넌트, 유틸리티 또는 전체 페이지를 노출할 수도 있습니다.
원격의 공유 구성
shared 속성은 중복하지 않고 호스트와 원격 애플리케이션 간에 공유해야 하는 모듈을 Module Federation에 알려 줍니다. 리액트의 경우 다음과 같이 설정합니다: shared: { react: { singleton: true, requiredVersion: deps.react }, 'react-dom': { singleton: true } }. singleton:true는 여러 인스턴스가 동시에 로드되는 것을 방지합니다.
호스트 webpack.config.js: 원격 참조하기
호스트 애플리케이션의 ModuleFederationPlugin 구성에는 다음과 같은 remotes 속성이 포함됩니다: { buttonApp: 'buttonApp@http://localhost:3001/remoteEntry.js' }. 키는 가져오기 네임스페이스이고, 값은 원격의 이름과 @로 결합한 주소입니다. 이를 통해 웹팩은 런타임에 원격을 가져올 위치를 알 수 있습니다.
리액트에서 원격 사용하기
호스트의 리액트 코드에서는 동적 가져오기를 사용하여 원격 컴포넌트를 가져옵니다: const Button = React.lazy(() => import('buttonApp/Button')). 가져오기 경로는 원격의 네임스페이스와 노출된 모듈 이름에 맞습니다. React.lazy는 가져오기를 코드 분할하고 비동기적으로 로드합니다.
Suspense로 감싸기
원격 모듈은 비동기적으로 로드되므로, 지연 로드한 원격 컴포넌트는 항상 Suspense 경계로 감싸야 합니다: Suspense fallback=Loading... /. 대체 콘텐츠는 Module Federation이 원격 주소에서 remoteEntry.js와 컴포넌트 청크를 가져오는 동안 렌더링됩니다.
싱글턴이 중요한 이유
리액트의 훅(useState, useContext, useEffect)은 컴포넌트 상태를 추적하기 위해 하나의 내부 리액트 인스턴스에 의존합니다. 호스트와 원격 애플리케이션이 각자의 리액트 사본을 로드하면 훅에서 "invalid hook call" 오류가 발생합니다. singleton:true를 사용하면 두 애플리케이션이 하나의 리액트 인스턴스를 공유하게 되어 이러한 종류의 오류가 완전히 해결됩니다.
버전 충돌 해결
호스트가 react@18.2.0을 사용하고 원격 애플리케이션이 react@18.3.0을 사용하면 Module Federation의 공유 범위가 사용할 버전을 조정합니다. singleton:true와 requiredVersion을 함께 사용하면 호환되는 경우 일반적으로 더 높은 버전을 사용합니다. 고정된 버전 대신 requiredVersion: '>=18.0.0'을 설정하면 유연한 버전 범위를 사용할 수 있습니다.
TypeScript: 모듈 선언
TypeScript는 컴파일 시점에 원격 모듈을 알지 못하므로 선언이 없으면 import('buttonApp/Button') 같은 가져오기에서 형식 오류가 발생합니다. @module-federation/typescript를 사용하거나 모듈 유형을 선언하는 .d.ts 파일을 직접 만들어 원격 컴포넌트 속성에 대한 형식 안정성을 확보하십시오.
로컬에서 구성 테스트하기
두 앱을 동시에 실행하십시오. 원격 애플리케이션은 포트 3001에서, 호스트는 포트 3000에서 실행합니다. 호스트를 열면 호스트의 Module Federation 런타임이 http://localhost:3001/remoteEntry.js를 가져와 Button 모듈을 찾고, 해당 모듈의 청크를 다운로드한 다음 로컬 컴포넌트인 것처럼 호스트 앱 안에서 렌더링합니다.
프로덕션 주소 구성
프로덕션에서는 localhost:3001을 배포된 원격 애플리케이션의 주소로 바꾸십시오. 일반적인 방식은 원격 주소에 환경 변수를 사용하여 CI/CD가 환경별로 올바른 주소를 주입하도록 하는 것입니다: buttonApp: 'buttonApp@' + process.env.BUTTON_REMOTE_URL + '/remoteEntry.js'.
싱글턴 공유 모듈
Module Federation의 공유 구성에서 리액트를 싱글턴으로 설정해야 하는 이유는 무엇입니까?
강의 요약
Module Federation을 구성하려면 원격 애플리케이션에는 name, filename, exposes를 포함한 ModuleFederationPlugin을 설정하고, 호스트에는 remotes를 설정해야 합니다. 원격 컴포넌트는 React.lazy와 동적 가져오기를 사용하고 Suspense로 감싸서 사용하십시오. 리액트와 리액트 DOM은 여러 인스턴스로 인한 훅 오류를 방지하기 위해 공유 싱글턴이어야 합니다. TypeScript 선언과 환경 변수 기반 원격 주소를 추가하면 프로덕션에 사용할 수 있는 구성이 완성됩니다.
자주 묻는 질문
“호스트 React 앱과 원격 React 앱 구성하기” 강의는 무료인가요?
네 — “호스트 React 앱과 원격 React 앱 구성하기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 React Academy 강의 전체를 잠금 해제할 수 있습니다. React Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“호스트 React 앱과 원격 React 앱 구성하기”에서 뭘 배우나요?
호스트 셸과 두 개의 React 원격 앱을 위해 webpack.config.js에서 공개 모듈, 원격 모듈, 공유 종속성을 설정합니다. 브라우저에서 직접 실행하는 실습 코드로 React Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
React Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 React Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“호스트 React 앱과 원격 React 앱 구성하기” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 React Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 React Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 모듈 연합: 동적 런타임 가져오기
- 호스트 React 앱과 원격 React 앱 구성하기
- 원격 모듈 간 상태와 라우팅 공유하기
- 버전 관리, 배포 및 오케스트레이션