Module Federation
Module Federation
์น ์ดํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์์์ ์ฝ๋ ๊ณต์ ์์ ๋๋ฅผ ๋์ด๋ ๋ฐฉ๋ฒ
๋ชจ๋ ๊ธฐ๋ฐ์ ํจ์จ์ ์ผ๋ก ์ผํ๋ ์ต๋ํ์ ๋ฐฉ๋ฒ
๋ฐฐํฌ ๊ฐ๋ฅํ "์์ ๋ก์ด ๋ชจ๋" ๋จ์๋ก ๋ถ๋ฆฌ
๋ถ๋ฆฌ๋ ๋ชจ๋์ "๋์ ์ผ๋ก ๋ก๋"
Webpack์ Module Federation์ ์ฌ์ฉ
Production ์ฝ๋๋ค์ Webpack์ ์ฌ์ฉํด์ผํ๋ ์๋ฌต์ ์ธ ๋ฃฐ์ด ์๊ธฐ๊ฒ๋จ
Vite์ ๊ฐ์ด ๊ฒฐ๊ณผ ํ์ผ์ด Webpack์ผ๋ก ๋จ์ด์ง๋ ๊ฒฝ์ฐ๋ค์ด ๋ง์
ํ์
์ ์ ๋งคํ ํฌ์ธํธ
Monorepo์ ๊ณต์ ๋จ์๋?
์์ฑ๋ ์ปดํฌ๋ํธ, ๊ณตํต์ ์ฝ๋, ๋น์ฆ๋์ค ๋ก์ง, API
๋จ๋ ์ผ๋ก ์ฌ์ฉ๋ ์ ์๋ ์ด๋ ํ "์ฝ๋"
์ปดํฌ๋ํธ ๋จ์๊ฐ ์๋๋ผ ๋ชจ๋ ๋จ์๋ก ๊ณต์ ํ๊ณ ์ถ๋ค.
๊ณตํต์ ๋ ๋๋ง์ ๋ด๋นํ๋ ์ฃผ์ฒด์ ์ฝํ ์ธ ๋ฅผ ๋ด๋นํ๋ ์ฃผ์ฒด๋ฅผ ๋ช ํํ ๋ถ๋ฆฌํ๊ณ ์ถ์ ๋

Host Application, Remote Application ๊ฐ๋ ์ผ๋ก ์ ๊ทผ
Host Application: ๋ชจ๋ ๊ฒ๋ค์ ์ทจํฉํด์ ๋ ๋๋ง์์ผ์ค
Remote Application: ํน์ ํ ์์ญ๋ง ๋ ๋๋ง, ๋น๋๊ธฐ์ ์ผ๋ก ์คํ
๋ถ๋ฆฌ๋ ๋ ํ์งํ ๋ฆฌ ๋จ์๋ก ์ด์์ด๋จ
Module Federation์ "์์ ๋ก์ด ๋ชจ๋ ๋จ์"๋ก ์บก์ํ๋ฅผ ํด์ค๋ค.
Repository ๋จ์๋ก ์๋ก๊ฐ ๋ฐ์ดํฐ๋ฅผ ๊ต๋ฅํ ์ ์๋๋ก ์ ๊ณตํ๋ค.
Host-Remote ๊ตฌ์กฐ๋ก ๋๋๋ฉฐ, Host Application์ด ์ต์ข ๋ ๋๋ง์ ๊ฒฐ์ ํ๊ณ , Remote Application์ Host์ ๋ฑ๋ก๋๋ค.
์ฅ์
ํ์ ์์ ๋ชจ๋ ๋จ์ ๊ณต์ ๋ฅผ ํตํ ์์ฐ์ฑ ๊ฐํ
ํ ๋ด ์์ ๋ชจ๋ ๋จ์๋ก ๊ฐ๋ฐํ์ฌ ์ฝ๋ ์์ง ๋ฐ ์บก์ํ๋ฅผ ํตํ ๋ณ๊ฒฝ์ ๊ฐํ ์ฝ๋ ์์ฑ ๊ฐ๋ฅ
๋ชจ๋ ๋จ์๊ฐ ๋ ์ด์์ ๋จ์๋ก๋ ๊ฐ๋ฅ
๋ชจ๋ ธ๋ ํฌ ๋ด๋ถ์์๋ ์ฌ์ฉ๊ฐ๋ฅํ์ง๋ง ๋ชจ๋ ธ๋ ํฌ์ ์๊ด์์ด ๊ธฐ๋ฅ ์ฌ์ฉ ๊ฐ๋ฅ
๋ชจ๋ ๋จ์๋ก ์ถ์ ๋๋ ์ฝ๋๋ฅผ ํตํด ์๋ก์ด ํ๋ก์ ํธ ์ ํ์ฅ์ฑ์ ๊ฐํํ ์ ์์
๋ชจ๋ ๋จ์๋ก ํ์คํ ๋ฆฌ๊ฐ ๋จ๊ธฐ ๋๋ฌธ์ ํ์คํ ๋ฆฌ ์ถ์ ์ ์ฉ์ด
๋จ์
๊ท๋ชจ๊ฐ ์์ ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ ๋๋ ค ๋ณต์กํด์ง๋ ๊ตฌ์กฐ๋ก ์์ฐ์ฑ์ด ํ๋ฝ๋ ์ ์์
๊ฐ๋ฐ ๋ฐ ์ด์์ ํ์ต์ด ํ์ํ ๋์ด๋๊ฐ ์์
100% ์์ ์ฑ์ ๋ณด์ฅํ๊ธฐ ํ๋ ์์ง ์ฐ๊ตฌ๊ฐ ์งํ์ค์ธ ๋ถ๋ถ์ด ๋ค์ ์์
๋์ ๋ก๋ ์ํฉ์์์ ๋ณด์์ ์ทจ์ฝ์ ์กด์ฌ
๋์ ๋ก๋๋ ๊ฒ์ ์ค๋ํ์ ํด์์ ๋ค๋ฅด๊ฒ ์กฐ์ํ์ฌ ๋ค์ ๋ชจ๋์ ๋ฃ๋ ๋ฑ์ ๋ณด์์ ์ํ์ฑ ์กด์ฌ
์น ํ๊ฒฝ ์์ฒด๊ฐ ๋ณด์์ ์ทจ์ฝํ๊ธฐ ๋๋ฌธ์ ํ ..
Module Federation Architecture
Infra Architecture

Host, Remote๊ฐ ์ด๋ ํ ํํ๋ก S3 ๋ฒํท์ ๋น๋ ํ์ผ ์ ์ฅ์ด ๋๋ค.
Module Federation์ React Component Rendering ๋จ๊ณ์ Remote Application์ ๋ ๋๋งํ๋ค. (๋์ ๋ก๋)
Host Application

https://github.com/module-federation
๊ฑฐ์ ์ ์ผ๋ฌด์ดํ module-federation organization
ํด๋น ์ฝ๋ ๊ธฐ๋ฐ์ผ๋ก ๋๋ค์์ module federation์ด ์ด๋ฃจ์ด์ง
Webpack.config.js
name: ๋ถ๋ฌ์ฌ ์ฑ์ ์ด๋ฆ๊ณผ ์ฐ๊ด
remoteEntity: ๋ชจ๋ ๋ฐ์ด๊ฑฐ ๋ด๊ธฐ๊ฒ ๋จ
remotes: ๋ชจ๋์ ๋ถ๋ฌ์ฌ remote ์ฃผ์ (remoteEntry.js๋ฅผ ๋ฑ๋กํ๋ฉด ๋จ)
shared: react, react-dom์ ๋ชจ๋ ํ๋๋ ์ด์ ์์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๊ณต์ ๋จ
Remote Application

webpack.config.js
name: ๋ถ๋ฌ์ฌ ์ฑ์ ์ด๋ฆ๊ณผ ์ฐ๊ด
remoteEntry: ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ๋ด๊น
exposes: ๋ชจ๋์ ๋ฐ์ผ๋ก ๋ด๋ณด๋ธ๋ค.
shared: react, react-dom์ ๋ชจ๋ ํ๋๋ ์ด์ ์์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๊ณต์ ๋จ
Host Application์ ๋ํ ์ฃผ์๋ ์ ์ง ์๋๋ค.

Rendering

Host์์ Remote๋ฅผ ๋ ๋๋งํ๋ค.
Remote ๋ชจ๋์์ ๋ฒํผ์ ๊ฐ์ ธ์ ๋ก๋ํ๋ค.
๋์ ์ผ๋ก ๊ฐ์ ธ์ค๊ธฐ ๋๋ฌธ์ React.Suspense๋ก ๋ก๋๋ ๋์ fallback์ ์ค์
Retmoe module ํธ์ถ ํ์ด๋ฐ

์ ๋ฆฌ
Module Federation์ ๋ฐํ์์์ ๋ค์ด๋๋ฏน๋ก๋๋ฅผ ํตํด ๋ชจ๋์ ๋ถ๋ฌ์ค๋ ๊ธฐ๋ฅ
์์กด๋๋ฅผ ๋ฎ์ถ๊ณ , ๋ ํฌ์งํ ๋ฆฌ๊ฐ ๋ถ๋ฆฌ๋์ด ์์ด๋ ๋ชจ๋์ ์ฃผ๊ณ ๋ฐ๋ ์ข์ ๋ฐฉ๋ฒ
์ฌ๋ฌ ํ์ด ์ ๋ฐ๋์ด์๋ ํ์ฌ์์ ์ ํฉํ๊ฒ ๊ณต์ ํ ์ ์๋ ๋ฐฉ๋ฒ
Last updated