Webpack 5์ ๊ธฐ๋ฅ์ธ JavaScript ๋ชจ๋ ํ๋๋ ์ด์ ์ผ๋ก ํ์ฅ ๊ฐ๋ฅํ ๋ง์ดํฌ๋ก ํ๋ก ํธ์๋ ์ํคํ ์ฒ๋ฅผ ๊ตฌ์ถํ์ธ์. ๋๊ท๋ชจ ๊ธ๋ก๋ฒ ํ์ ์ํ ์ด์ , ๊ณผ์ , ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์์๋ด ๋๋ค.
JavaScript ๋ชจ๋ ํ๋๋ ์ด์ : ๊ธ๋ก๋ฒ ํ์ ์ํ ๋ง์ดํฌ๋ก ํ๋ก ํธ์๋ ์ํคํ ์ฒ์ ํ์
๋น ๋ฅด๊ฒ ๋ฐ์ ํ๋ ์น ๊ฐ๋ฐ ํ๊ฒฝ์์ ๋๊ท๋ชจ ํ๋ก ํธ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๊ณ ์ ์งํ๋ ๊ฒ์ ๋ ํนํ ๊ณผ์ ๋ค์ ์ ์ํฉ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณต์ก์ฑ, ๊ธฐ๋ฅ, ๊ทธ๋ฆฌ๊ณ ๊ธฐ์ฌํ๋ ๊ฐ๋ฐ์ ์๊ฐ ์ฆ๊ฐํจ์ ๋ฐ๋ผ, ์ ํต์ ์ธ ๋ชจ๋๋ฆฌ์ ํ๋ก ํธ์๋ ์ํคํ ์ฒ๋ ์ข ์ข ๊ทธ ๋ฌด๊ฒ๋ฅผ ๊ฐ๋นํ์ง ๋ชปํ๊ณ ์ด๋ ค์์ ๊ฒช์ต๋๋ค. ์ด๋ ๊ฐ๋ฐ ์ฃผ๊ธฐ ์ง์ฐ, ์กฐ์ ์ค๋ฒํค๋ ์ฆ๊ฐ, ํ ํ์ฅ ์ด๋ ค์, ๋ฐฐํฌ ์คํจ ์ํ ์ฆ๊ฐ๋ก ์ด์ด์ง๋๋ค. ๋ ๋ฏผ์ฒฉํ๊ณ , ํ์ฅ ๊ฐ๋ฅํ๋ฉฐ, ์ ์ง๋ณด์ํ๊ธฐ ์ฌ์ด ํ๋ก ํธ์๋ ์๋ฃจ์ ์ ์ฐพ์ผ๋ ค๋ ๋ ธ๋ ฅ์ ๋ง์ ์กฐ์ง๋ค์ ๋ง์ดํฌ๋ก ํ๋ก ํธ์๋๋ผ๋ ๊ฐ๋ ์ผ๋ก ์ด๋์์ต๋๋ค.
๋ง์ดํฌ๋ก ํ๋ก ํธ์๋๋ ๋ ๋ฆฝ์ ์ผ๋ก ๋ฐฐํฌ ๊ฐ๋ฅํ ๋จ์๋ผ๋ ๋งค๋ ฅ์ ์ธ ๋น์ ์ ์ ์ํ์ง๋ง, ์ค์ ๊ตฌํ์ ์ข ์ข ์ค์ผ์คํธ๋ ์ด์ , ๊ณต์ ์์กด์ฑ, ๋ฐํ์ ํตํฉ์ ๋ณต์ก์ฑ ๋๋ฌธ์ ์ด๋ ค์์ ๊ฒช์์ต๋๋ค. ์ฌ๊ธฐ์ JavaScript ๋ชจ๋ ํ๋๋ ์ด์ โ Webpack 5์ ํจ๊ป ๋์ ๋ ํ๊ธฐ์ ์ธ ๊ธฐ๋ฅ โ ์ด ๋ฑ์ฅํฉ๋๋ค. ๋ชจ๋ ํ๋๋ ์ด์ ์ ๋จ์ํ ๋ ๋ค๋ฅธ ๋น๋ ๋๊ตฌ์ ๊ธฐ์ ์ด ์๋๋๋ค. ์ด๋ ์ฐ๋ฆฌ๊ฐ ๋ฐํ์์ ์ฝ๋๋ฅผ ๊ณต์ ํ๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ฑํ๋ ๋ฐฉ์์ ๊ทผ๋ณธ์ ์ธ ๋ณํ์ด๋ฉฐ, ์ง์ ํ ๋ง์ดํฌ๋ก ํ๋ก ํธ์๋ ์ํคํ ์ฒ๋ฅผ ์คํ ๊ฐ๋ฅํ๊ฒ ํ ๋ฟ๋ง ์๋๋ผ ์ฐ์ํ๊ณ ๋งค์ฐ ํจ์จ์ ์ผ๋ก ๋ง๋ญ๋๋ค. ๊ธ๋ก๋ฒ ๊ธฐ์ ๊ณผ ๋๊ท๋ชจ ๊ฐ๋ฐ ์กฐ์ง์๊ฒ ์ด ๊ธฐ์ ์ ๋นํ ๋ฐ ์๋ ํ์ฅ์ฑ๊ณผ ํ ์์จ์ฑ์ ํฅํ ๊ธธ์ ์ ๊ณตํฉ๋๋ค.
์ด ์ข ํฉ ๊ฐ์ด๋์์๋ JavaScript ๋ชจ๋ ํ๋๋ ์ด์ ์ ์ฌ๋ ์๊ฒ ๋ค๋ฃจ๋ฉฐ, ๊ทธ ํต์ฌ ์์น, ์ค์ ์ ์ฉ ์ฌ๋ก, ๊ทธ๊ฒ์ด ์ ๊ณตํ๋ ์ฌ์คํ ์ด์ , ๊ทธ๋ฆฌ๊ณ ์ ์ฌ๋ ฅ์ ์ต๋ํ ํ์ฉํ๊ธฐ ์ํด ํค์ณ๋๊ฐ์ผ ํ ๊ณผ์ ๋ค์ ํ๊ตฌํ ๊ฒ์ ๋๋ค. ์ฐ๋ฆฌ๋ ๋ชจ๋ฒ ์ฌ๋ก, ์ค์ ์๋๋ฆฌ์ค, ๊ทธ๋ฆฌ๊ณ ์ด ๊ธฐ์ ์ด ๊ตญ์ ์ ์ธ ๊ด๊ฐ์ ์ํด ๋๊ท๋ชจ ์น ๊ฐ๋ฐ์ ๋ฏธ๋๋ฅผ ์ด๋ป๊ฒ ์ฌํธํ๊ณ ์๋์ง ๋ ผ์ํ ๊ฒ์ ๋๋ค.
ํ๋ก ํธ์๋ ์ํคํ ์ฒ์ ์งํ ์ดํดํ๊ธฐ
๋ชจ๋ ํ๋๋ ์ด์ ์ ํ์ ์ง์ ์ผ๋ก ์ดํดํ๋ ค๋ฉด ํ๋ก ํธ์๋ ์ํคํ ์ฒ์ ์ฌ์ ์ ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
๋ชจ๋๋ฆฌ์ ํ๋ก ํธ์๋: ๋จ์ํจ๊ณผ ๊ทธ ํ๊ณ
์ค๋ ๊ธฐ๊ฐ ๋์, ํ์ค ์ ๊ทผ ๋ฐฉ์์ ํ๋ก ํธ์๋ ๋ชจ๋๋ฆฌ์ค์์ต๋๋ค. ํ๋์ ๊ฑฐ๋ํ ์ฝ๋๋ฒ ์ด์ค๊ฐ ๋ชจ๋ ๊ธฐ๋ฅ, ์ปดํฌ๋ํธ, ๋น์ฆ๋์ค ๋ก์ง์ ํฌํจํ์ต๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ์ด๊ธฐ ์ค์ , ๋ฐฐํฌ, ํ ์คํธ์์ ๋จ์ํจ์ ์ ๊ณตํฉ๋๋ค. ํ์ง๋ง ์ ํ๋ฆฌ์ผ์ด์ ์ด ํ์ฅ๋๋ฉด์ ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค:
- ๋๋ฆฐ ๊ฐ๋ฐ ์๋: ๋จ์ผ ์ ์ฅ์๋ ๋ ๋ง์ ๋ณํฉ ์ถฉ๋, ๋ ๊ธด ๋น๋ ์๊ฐ, ๋ณ๊ฒฝ ์ฌํญ ๊ฒฉ๋ฆฌ์ ์ด๋ ค์์ ์๋ฏธํฉ๋๋ค.
- ๊ฐํ ๊ฒฐํฉ๋: ์ ํ๋ฆฌ์ผ์ด์ ์ ํ ๋ถ๋ถ์์์ ๋ณ๊ฒฝ์ด ์๋์น ์๊ฒ ๋ค๋ฅธ ๋ถ๋ถ์ ์ํฅ์ ๋ฏธ์ณ ๋ฆฌํฉํ ๋ง์ ๋ํ ๋๋ ค์์ ์ ๋ฐํฉ๋๋ค.
- ๊ธฐ์ ์ข ์์ฑ: ๋๊ท๋ชจ ๋ฆฌํฉํ ๋ง ์์ด๋ ์๋ก์ด ํ๋ ์์ํฌ๋ฅผ ๋์ ํ๊ฑฐ๋ ๊ธฐ์กด ํ๋ ์์ํฌ์ ์ฃผ์ ๋ฒ์ ์ ์ ๋ฐ์ดํธํ๊ธฐ ์ด๋ ต์ต๋๋ค.
- ๋ฐฐํฌ ์ํ: ๋จ์ผ ๋ฐฐํฌ๋ ์ด๋ค ๋ฌธ์ ๋ ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํฅ์ ๋ฏธ์น๋ฏ๋ก, ๋ฆฌ์คํฌ๊ฐ ํฐ ๋ฆด๋ฆฌ์ค๋ก ์ด์ด์ง๋๋ค.
- ํ ํ์ฅ ๋ฌธ์ : ๋จ์ผ ์ฝ๋๋ฒ ์ด์ค์์ ์์ ํ๋ ๋๊ท๋ชจ ํ์ ์ข ์ข ์ํต์ ๋ณ๋ชฉ ํ์์ ๊ฒช๊ณ ์์จ์ฑ์ด ๊ฐ์ํฉ๋๋ค.
๋ง์ดํฌ๋ก์๋น์ค๋ก๋ถํฐ์ ์๊ฐ
๋ฐฑ์๋ ์ธ๊ณ๋ ๋ง์ดํฌ๋ก์๋น์ค๋ผ๋ ๊ฐ๋ ์ ๊ฐ์ฒํ์ต๋๋ค. ์ด๋ ๋ชจ๋๋ฆฌ์ ๋ฐฑ์๋๋ฅผ ์๊ณ , ๋ ๋ฆฝ์ ์ด๋ฉฐ, ๋์จํ๊ฒ ๊ฒฐํฉ๋ ์๋น์ค๋ก ๋ถํดํ์ฌ ๊ฐ๊ฐ ํน์ ๋น์ฆ๋์ค ์ญ๋์ ์ฑ ์์ง๊ฒ ํ๋ ๊ฒ์ ๋๋ค. ์ด ๋ชจ๋ธ์ ํ์ฅ์ฑ, ํ๋ณตํ๋ ฅ์ฑ, ๋ ๋ฆฝ์ ๋ฐฐํฌ ๊ฐ๋ฅ์ฑ ์ธก๋ฉด์์ ์์ฒญ๋ ์ด์ ์ ๊ฐ์ ธ์์ต๋๋ค. ๊ฐ๋ฐ์๋ค์ด ๋น์ทํ ์์น์ ํ๋ก ํธ์๋์ ์ ์ฉํ๊ธฐ๋ฅผ ๊ฟ๊พธ๊ธฐ ์์ํ ๊ฒ์ ๊ทธ๋ฆฌ ์ค๋๋์ง ์์์ต๋๋ค.
๋ง์ดํฌ๋ก ํ๋ก ํธ์๋์ ๋ถ์: ๋น์
๋ง์ดํฌ๋ก ํ๋ก ํธ์๋ ํจ๋ฌ๋ค์์ ๋ง์ดํฌ๋ก์๋น์ค์ ์ด์ ์ ํ๋ก ํธ์๋์ ๊ฐ์ ธ์ค๋ ค๋ ์๋๋ก ๋ฑ์ฅํ์ต๋๋ค. ํต์ฌ ์์ด๋์ด๋ ๋๊ท๋ชจ ํ๋ก ํธ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ ์๊ณ , ๋ ๋ฆฝ์ ์ผ๋ก ๊ฐ๋ฐ, ํ ์คํธ, ๋ฐฐํฌ๋๋ "๋ง์ดํฌ๋ก ์ ํ๋ฆฌ์ผ์ด์ " ๋๋ "๋ง์ดํฌ๋ก ํ๋ก ํธ์๋"๋ก ๋๋๋ ๊ฒ์ ๋๋ค. ๊ฐ ๋ง์ดํฌ๋ก ํ๋ก ํธ์๋๋ ์ด์์ ์ผ๋ก ํน์ ๋น์ฆ๋์ค ๋๋ฉ์ธ์ ์ฑ ์์ง๋ ์๊ณ ์์จ์ ์ธ ํ์ด ์์ ํฉ๋๋ค. ์ด ๋น์ ์ ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ ์ฝ์ํ์ต๋๋ค:
- ํ ์์จ์ฑ: ํ์ ์์ฒด ๊ธฐ์ ์คํ์ ์ ํํ๊ณ ๋ ๋ฆฝ์ ์ผ๋ก ์์ ํ ์ ์์ต๋๋ค.
- ๋ ๋น ๋ฅธ ๋ฐฐํฌ: ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ ๋ถ๋ถ์ ๋ฐฐํฌํ๋ ๊ฒ์ด ๋ ๋น ๋ฅด๊ณ ์ํ์ด ์ ์ต๋๋ค.
- ํ์ฅ์ฑ: ์กฐ์ ์ค๋ฒํค๋ ์์ด ๊ฐ๋ฐ ํ์ ๋ ์ฝ๊ฒ ํ์ฅํ ์ ์์ต๋๋ค.
- ๊ธฐ์ ๋ค์์ฑ: ์๋ก์ด ํ๋ ์์ํฌ๋ฅผ ๋์ ํ๊ฑฐ๋ ๋ ๊ฑฐ์ ๋ถ๋ถ์ ์ ์ง์ ์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ ์ ์์ต๋๋ค.
ํ์ง๋ง ์ด ๋น์ ์ ์ฌ๋ฌ ํ๋ก์ ํธ์ ์กฐ์ง์์ ์ผ๊ด๋๊ฒ ์คํํ๋ ๊ฒ์ ์ด๋ ค์ด ๊ฒ์ผ๋ก ํ๋ช ๋์์ต๋๋ค. ์ผ๋ฐ์ ์ธ ์ ๊ทผ ๋ฐฉ์์๋ iframe(๊ฒฉ๋ฆฌ๋ ๋์ง๋ง ํตํฉ์ด ์ข์ง ์์), ๋น๋ ํ์ ๋ชจ๋ ธ๋ ํฌ(ํตํฉ์ ๋ ์ข์ง๋ง ์ฌ์ ํ ๋น๋ ํ์ ๊ฒฐํฉ), ๋๋ ๋ณต์กํ ์๋ฒ ์ฌ์ด๋ ์กฐํฉ์ด ํฌํจ๋์์ต๋๋ค. ์ด๋ฌํ ๋ฐฉ๋ฒ๋ค์ ์ข ์ข ์์ฒด์ ์ธ ๋ณต์ก์ฑ, ์ฑ๋ฅ ์ค๋ฒํค๋, ๋๋ ์ง์ ํ ๋ฐํ์ ํตํฉ์ ํ๊ณ๋ฅผ ๊ฐ์ ธ์์ต๋๋ค. ๋ฐ๋ก ์ด ์ง์ ์์ ๋ชจ๋ ํ๋๋ ์ด์ ์ด ๊ทผ๋ณธ์ ์ผ๋ก ๊ฒ์์ ํ๋๋ฅผ ๋ฐ๊ฟ๋๋ค.
๋ง์ดํฌ๋ก ํ๋ก ํธ์๋ ํจ๋ฌ๋ค์ ์์ธํ ์ดํด๋ณด๊ธฐ
๋ชจ๋ ํ๋๋ ์ด์ ์ ๊ตฌ์ฒด์ ์ธ ๋ด์ฉ์ ์ดํด๋ณด๊ธฐ ์ ์, ๋ง์ดํฌ๋ก ํ๋ก ํธ์๋๊ฐ ๋ฌ์ฑํ๊ณ ์ ํ๋ ๋ชฉํ์ ํนํ ๋๊ท๋ชจ ๊ธ๋ก๋ฒ ๋ถ์ฐ ๊ฐ๋ฐ ์ด์์ ์ ๊ทธ๋ ๊ฒ ๊ฐ์น๊ฐ ์๋์ง์ ๋ํ ์ดํด๋ฅผ ํ๊ณ ํ ํด๋ด ์๋ค.
๋ง์ดํฌ๋ก ํ๋ก ํธ์๋๋ ๋ฌด์์ธ๊ฐ?
ํต์ฌ์ ์ผ๋ก, ๋ง์ดํฌ๋ก ํ๋ก ํธ์๋ ์ํคํ ์ฒ๋ ์ฌ๋ฌ ๋ ๋ฆฝ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก๋ถํฐ ๋จ์ผํ๊ณ ์์ง๋ ฅ ์๋ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌ์ฑํ๋ ๊ฒ์ ๊ดํ ๊ฒ์ ๋๋ค. ๊ฐ ๋ ๋ฆฝ์ ์ธ ๋ถ๋ถ, ์ฆ '๋ง์ดํฌ๋ก ํ๋ก ํธ์๋'๋ ๋ค์๊ณผ ๊ฐ์ ํน์ง์ ๊ฐ์ง ์ ์์ต๋๋ค:
- ์์จ์ ๊ฐ๋ฐ: ์๋ก ๋ค๋ฅธ ํ์ด ์๋ก์ ์์ ์ ๋ฐฉํด ์์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค๋ฅธ ๋ถ๋ถ์ ์์ ํ ์ ์์ต๋๋ค.
- ๋ ๋ฆฝ์ ๋ฐฐํฌ: ํ๋์ ๋ง์ดํฌ๋ก ํ๋ก ํธ์๋ ๋ณ๊ฒฝ์ด ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ๋ฐฐํฌํ ํ์๊ฐ ์์ต๋๋ค.
- ๊ธฐ์ ๋ ๋ฆฝ์ฑ: ํ ๋ง์ดํฌ๋ก ํ๋ก ํธ์๋๋ React๋ก, ๋ค๋ฅธ ํ๋๋ Vue๋ก, ์ธ ๋ฒ์งธ๋ Angular๋ก ๊ตฌ์ถ๋ ์ ์์ผ๋ฉฐ, ์ด๋ ํ์ ์ ๋ฌธ์ฑ์ด๋ ํน์ ๊ธฐ๋ฅ ์๊ตฌ ์ฌํญ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค.
- ๋น์ฆ๋์ค ๋๋ฉ์ธ๋ณ ๋ฒ์ ์ง์ : ๊ฐ ๋ง์ดํฌ๋ก ํ๋ก ํธ์๋๋ ์ผ๋ฐ์ ์ผ๋ก '์ ํ ์นดํ๋ก๊ทธ', '์ฌ์ฉ์ ํ๋กํ', '์ฅ๋ฐ๊ตฌ๋'์ ๊ฐ์ ํน์ ๋น์ฆ๋์ค ์ญ๋์ ์บก์ํํฉ๋๋ค.
๋ชฉํ๋ ์์ง์ ๋ถํ (๊ธฐ๋ฅ์ ์ํ ํ๋ก ํธ์๋์ ๋ฐฑ์๋)์์ ์ํ์ ๋ถํ (๊ธฐ๋ฅ์ ์ํ ํ๋ก ํธ์๋, ๊ธฐ๋ฅ์ ์ํ ๋ฐฑ์๋)๋ก ์ด๋ํ์ฌ, ์๊ณ ๊ต์ฐจ ๊ธฐ๋ฅ์ ์ธ ํ์ด ์ ํ์ ์์ ํ ํ ์กฐ๊ฐ์ ์์ ํ ์ ์๋๋ก ํ๋ ๊ฒ์ ๋๋ค.
๋ง์ดํฌ๋ก ํ๋ก ํธ์๋์ ์ด์
์ฌ๋ฌ ์๊ฐ๋์ ๋ฌธํ๊ถ์ ๊ฑธ์ณ ์ด์๋๋ ์กฐ์ง์๊ฒ๋ ๊ทธ ์ด์ ์ด ํนํ ๋๋๋ฌ์ง๋๋ค:
- ํฅ์๋ ํ ์์จ์ฑ ๋ฐ ์๋: ํ์ ๊ธฐ๋ฅ์ ๋ ๋ฆฝ์ ์ผ๋ก ๊ฐ๋ฐํ๊ณ ๋ฐฐํฌํ ์ ์์ด ํ ๊ฐ ์์กด์ฑ๊ณผ ์ํต ์ค๋ฒํค๋๋ฅผ ์ค์ ๋๋ค. ์ด๋ ์ค์๊ฐ ๋๊ธฐํ๊ฐ ์ด๋ ค์ธ ์ ์๋ ๊ธ๋ก๋ฒ ํ์๊ฒ ๋งค์ฐ ์ค์ํฉ๋๋ค.
- ๊ฐ๋ฐ ํ์ฅ์ฑ ํฅ์: ๊ธฐ๋ฅ๊ณผ ๊ฐ๋ฐ์ ์๊ฐ ์ฆ๊ฐํจ์ ๋ฐ๋ผ, ๋ง์ดํฌ๋ก ํ๋ก ํธ์๋๋ ๋ชจ๋๋ฆฌ์ค์์ ํํ ๋ณผ ์ ์๋ ์กฐ์ ๋น์ฉ์ ๊ธฐํ๊ธ์์ ์ธ ์ฆ๊ฐ ์์ด ํ์ ์ ํ์ ํ์ฅ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
- ๊ธฐ์ ์ ํ์ ์์ ์ ์ ์ง์ ์ ๊ทธ๋ ์ด๋: ํ์ ํน์ ๋ฌธ์ ์ ๊ฐ์ฅ ์ ํฉํ ๋๊ตฌ๋ฅผ ์ ํํ ์ ์์ผ๋ฉฐ, ์๋ก์ด ๊ธฐ์ ์ ์ ์ง์ ์ผ๋ก ๋์ ํ ์ ์์ต๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ ๊ฑฐ์ ๋ถ๋ถ์ '๋น ๋ฑ ' ๋ฐฉ์์ ์ฌ์์ฑ ์ํ์ ์ค์ด๋ฉด์ ์กฐ๊ธ์ฉ ๋ฆฌํฉํ ๋งํ๊ฑฐ๋ ์ฌ์์ฑํ ์ ์์ต๋๋ค.
- ๋ ๋น ๋ฅด๊ณ ์์ ํ ๋ฐฐํฌ: ์๊ณ ๊ฒฉ๋ฆฌ๋ ๋ง์ดํฌ๋ก ํ๋ก ํธ์๋๋ฅผ ๋ฐฐํฌํ๋ ๊ฒ์ ์ ์ฒด ๋ชจ๋๋ฆฌ์ค๋ฅผ ๋ฐฐํฌํ๋ ๊ฒ๋ณด๋ค ๋น ๋ฅด๊ณ ์ํ์ด ์ ์ต๋๋ค. ๋กค๋ฐฑ ๋ํ ๊ตญ์ํ๋ฉ๋๋ค. ์ด๋ ์ ์ธ๊ณ์ ์ง์์ ๋ฐฐํฌ ํ์ดํ๋ผ์ธ์ ๋ฏผ์ฒฉ์ฑ์ ํฅ์์ํต๋๋ค.
- ํ๋ณตํ๋ ฅ์ฑ: ํ ๋ง์ดํฌ๋ก ํ๋ก ํธ์๋์ ๋ฌธ์ ๊ฐ ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค์ด์ํค์ง ์์ ์ ์์ด ์ ๋ฐ์ ์ธ ์์คํ ์์ ์ฑ์ ํฅ์์ํต๋๋ค.
- ์ ๊ท ๊ฐ๋ฐ์์ ์ฉ์ดํ ์จ๋ณด๋ฉ: ์๊ณ ๋๋ฉ์ธ์ ํนํ๋ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์ดํดํ๋ ๊ฒ์ด ์ ์ฒด ๋ชจ๋๋ฆฌ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์ ํ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๋ ๋ถ๋ด์ค๋ฌ์ฐ๋ฉฐ, ์ด๋ ์ง๋ฆฌ์ ์ผ๋ก ๋ถ์ฐ๋ ํ์ด ํ์ง์์ ์ฑ์ฉํ ๋ ์ ๋ฆฌํฉ๋๋ค.
๋ง์ดํฌ๋ก ํ๋ก ํธ์๋์ ๊ณผ์ (๋ชจ๋ ํ๋๋ ์ด์ ์ด์ )
๋งค๋ ฅ์ ์ธ ์ด์ ์๋ ๋ถ๊ตฌํ๊ณ , ๋ง์ดํฌ๋ก ํ๋ก ํธ์๋๋ ๋ชจ๋ ํ๋๋ ์ด์ ์ด์ ์ ์๋นํ ๊ณผ์ ๋ฅผ ์ ๊ธฐํ์ต๋๋ค:
- ์ค์ผ์คํธ๋ ์ด์ ๋ฐ ์กฐํฉ: ์ด ๋ ๋ฆฝ์ ์ธ ๋ถ๋ถ๋ค์ ์ด๋ป๊ฒ ๋จ์ผํ๊ณ ์ํํ ์ฌ์ฉ์ ๊ฒฝํ์ผ๋ก ๊ฒฐํฉํ ์ ์๋๊ฐ?
- ๊ณต์ ์์กด์ฑ: React, Angular, Vue์ ๊ฐ์ ๋๊ท๋ชจ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ฌ๋ฌ ๋ง์ดํฌ๋ก ํ๋ก ํธ์๋์ ๊ฑธ์ณ ์ค๋ณต๋์ด ๋ฒ๋ค์ด ๋น๋ํด์ง๊ณ ์ฑ๋ฅ์ด ์ ํ๋๋ ๊ฒ์ ์ด๋ป๊ฒ ํผํ ์ ์๋๊ฐ?
- ๋ง์ดํฌ๋ก ํ๋ก ํธ์๋ ๊ฐ ํต์ : UI์ ๋ค๋ฅธ ๋ถ๋ถ๋ค์ด ๊ฐํ ๊ฒฐํฉ ์์ด ์ด๋ป๊ฒ ํต์ ํ ์ ์๋๊ฐ?
- ๋ผ์ฐํ ๋ฐ ๋ด๋น๊ฒ์ด์ : ๋ ๋ฆฝ์ ์ผ๋ก ์์ ๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ค ์ฌ์ด์์ ์ ์ญ ๋ผ์ฐํ ์ ์ด๋ป๊ฒ ๊ด๋ฆฌํ ์ ์๋๊ฐ?
- ์ผ๊ด๋ ์ฌ์ฉ์ ๊ฒฝํ: ์ ์ฌ์ ์ผ๋ก ๋ค๋ฅธ ๊ธฐ์ ์ ์ฌ์ฉํ๋ ์ฌ๋ฌ ํ์ ๊ฑธ์ณ ํต์ผ๋ ์ธ๊ด๊ณผ ๋๋์ ์ด๋ป๊ฒ ๋ณด์ฅํ ์ ์๋๊ฐ?
- ๋ฐฐํฌ ๋ณต์ก์ฑ: ์๋ง์ ์๊ท๋ชจ ์ ํ๋ฆฌ์ผ์ด์ ์ CI/CD ํ์ดํ๋ผ์ธ์ ์ด๋ป๊ฒ ๊ด๋ฆฌํ ์ ์๋๊ฐ?
์ด๋ฌํ ๊ณผ์ ๋ค์ ์ข ์ข ์กฐ์ง๋ค์ด ๋ง์ดํฌ๋ก ํ๋ก ํธ์๋์ ์ง์ ํ ๋ ๋ฆฝ์ฑ์ ํํํ๊ฑฐ๋ ๋ณต์กํ ๋ง์ถคํ ๋๊ตฌ์ ๋ง๋ํ ํฌ์๋ฅผ ํ๋๋ก ๊ฐ์ํ์ต๋๋ค. ๋ชจ๋ ํ๋๋ ์ด์ ์ ์ด๋ฌํ ์ค์ํ ์ฅ์ ๋ฌผ ์ค ๋ง์ ๊ฒ์ ์ฐ์ํ๊ฒ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฑ์ฅํ์ต๋๋ค.
JavaScript ๋ชจ๋ ํ๋๋ ์ด์ ์๊ฐ: ๊ฒ์ ์ฒด์ธ์
ํต์ฌ์ ์ผ๋ก, JavaScript ๋ชจ๋ ํ๋๋ ์ด์ ์ JavaScript ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ฐํ์์ ๋ค๋ฅธ ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก๋ถํฐ ์ฝ๋๋ฅผ ๋์ ์ผ๋ก ๋ก๋ํ ์ ์๊ฒ ํด์ฃผ๋ Webpack 5์ ๊ธฐ๋ฅ์ ๋๋ค. ์ด๋ฅผ ํตํด ๋ ๋ฆฝ์ ์ผ๋ก ๋น๋๋๊ณ ๋ฐฐํฌ๋ ์ฌ๋ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ชจ๋, ์ปดํฌ๋ํธ, ์ฌ์ง์ด ์ ์ฒด ํ์ด์ง๋ฅผ ๊ณต์ ํ์ฌ, ๊ธฐ์กด ์๋ฃจ์ ์ ๋ณต์ก์ฑ ์์ด ๋จ์ผํ๊ณ ์์ง๋ ฅ ์๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ฒฝํ์ ๋ง๋ค์ด๋ผ ์ ์์ต๋๋ค.
ํต์ฌ ๊ฐ๋ : ๋ฐํ์ ๊ณต์
๋ ๊ฐ์ ๋ณ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์๋ค๊ณ ์์ํด ๋ด ์๋ค: 'ํธ์คํธ' ์ ํ๋ฆฌ์ผ์ด์ (์: ๋์๋ณด๋ ์ ธ)๊ณผ '๋ฆฌ๋ชจํธ' ์ ํ๋ฆฌ์ผ์ด์ (์: ๊ณ ๊ฐ ์๋น์ค ์์ ฏ). ์ ํต์ ์ผ๋ก ํธ์คํธ๊ฐ ๋ฆฌ๋ชจํธ์ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด, ํด๋น ์ปดํฌ๋ํธ๋ฅผ npm ํจํค์ง๋ก ๊ฒ์ํ๊ณ ์ค์นํด์ผ ํ์ต๋๋ค. ์ด๋ ๋น๋ ํ์ ์์กด์ฑ์ ์์ฑํฉ๋๋ค โ ์ปดํฌ๋ํธ๊ฐ ์ ๋ฐ์ดํธ๋๋ฉด ํธ์คํธ๋ฅผ ๋ค์ ๋น๋ํ๊ณ ์ฌ๋ฐฐํฌํด์ผ ํฉ๋๋ค.
๋ชจ๋ ํ๋๋ ์ด์ ์ ์ด ๋ชจ๋ธ์ ๋ค์ง์ต๋๋ค. ๋ฆฌ๋ชจํธ ์ ํ๋ฆฌ์ผ์ด์ ์ ํน์ ๋ชจ๋(์ปดํฌ๋ํธ, ์ ํธ๋ฆฌํฐ, ์ ์ฒด ๊ธฐ๋ฅ)์ ๋ ธ์ถ(expose)ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ํธ์คํธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด ๋ ธ์ถ๋ ๋ชจ๋์ ๋ฐํ์์ ๋ฆฌ๋ชจํธ๋ก๋ถํฐ ์ง์ ์๋น(consume)ํ ์ ์์ต๋๋ค. ์ด๋ ๋ฆฌ๋ชจํธ๊ฐ ๋ ธ์ถ๋ ๋ชจ๋์ ์ ๋ฐ์ดํธํด๋ ํธ์คํธ๊ฐ ๋ค์ ๋น๋ํ ํ์๊ฐ ์๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ ๋ฐ์ดํธ๋ ๋ฆฌ๋ชจํธ๊ฐ ๋ฐฐํฌ๋๊ณ ํธ์คํธ๊ฐ ์๋ก๊ณ ์นจํ๊ฑฐ๋ ๋์ ์ผ๋ก ์ ๋ฒ์ ์ ๋ก๋ํ๋ฉด ์ฆ์ ์ ์ฉ๋ฉ๋๋ค.
์ด๋ฌํ ๋ฐํ์ ๊ณต์ ๋ ๋ค์๊ณผ ๊ฐ์ ์ด์ ๋ก ํ์ ์ ์ ๋๋ค:
- ๋ฐฐํฌ ๋ถ๋ฆฌ: ํ์ ๋ง์ดํฌ๋ก ํ๋ก ํธ์๋๋ฅผ ๋ ๋ฆฝ์ ์ผ๋ก ๋ฐฐํฌํ ์ ์์ต๋๋ค.
- ์ค๋ณต ์ ๊ฑฐ: ๊ณตํต ๋ผ์ด๋ธ๋ฌ๋ฆฌ(React, Vue, Lodash ๋ฑ)๋ฅผ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ์ ์ง์ ์ผ๋ก ๊ณต์ ํ๊ณ ์ค๋ณต์ ์ ๊ฑฐํ์ฌ ์ ์ฒด ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ํฌ๊ฒ ์ค์ผ ์ ์์ต๋๋ค.
- ์ง์ ํ ์กฐํฉ ๊ฐ๋ฅ: ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋น๋ ํ์์ ๊ฐํ๊ฒ ๊ฒฐํฉํ์ง ์๊ณ ๋ ์๊ณ ์์จ์ ์ธ ๋ถ๋ถ๋ค๋ก ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
๋ชจ๋ ํ๋๋ ์ด์ ์ ํต์ฌ ์ฉ์ด
- ํธ์คํธ(Host): ๋ค๋ฅธ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ ธ์ถํ ๋ชจ๋์ ์๋นํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋ค. ๋ค์ํ ์๊ฒฉ ๋ถ๋ถ์ ํตํฉํ๋ "์ ธ" ๋๋ ๋ฉ์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋ค.
- ๋ฆฌ๋ชจํธ(Remote): ๋ค๋ฅธ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์๋นํ ์ ์๋๋ก ๋ชจ๋์ ๋ ธ์ถํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋ค. "๋ง์ดํฌ๋ก ํ๋ก ํธ์๋" ๋๋ ๊ณต์ ์ปดํฌ๋ํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค.
- Exposes: ๋ฆฌ๋ชจํธ์ Webpack ์ค์ ์์ฑ์ผ๋ก, ๋ค๋ฅธ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์๋นํ ์ ์๋๋ก ์ ๊ณต๋๋ ๋ชจ๋์ ์ ์ํฉ๋๋ค.
- Remotes: ํธ์คํธ์ Webpack ์ค์ ์์ฑ์ผ๋ก, ์ด๋ค ์๊ฒฉ ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก๋ถํฐ ๋ชจ๋์ ์๋นํ ์ง ์ ์ํ๋ฉฐ, ์ผ๋ฐ์ ์ผ๋ก ์ด๋ฆ๊ณผ URL์ ์ง์ ํฉ๋๋ค.
- Shared: ํธ์คํธ์ ๋ฆฌ๋ชจํธ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ์ ๊ณต์ ๋์ด์ผ ํ๋ ๊ณตํต ์์กด์ฑ(์: React, ReactDOM)์ ์ ์ํ๋ ์์ฑ์ ๋๋ค. ์ด๋ ์ค๋ณต ์ฝ๋๋ฅผ ๋ฐฉ์งํ๊ณ ๋ฒ์ ์ ๊ด๋ฆฌํ๋ ๋ฐ ์ค์ํฉ๋๋ค.
๊ธฐ์กด ์ ๊ทผ ๋ฐฉ์๊ณผ์ ์ฐจ์ด์ ์ ๋ฌด์์ธ๊ฐ?
๋ชจ๋ ํ๋๋ ์ด์ ์ ๋ค๋ฅธ ์ฝ๋ ๊ณต์ ์ ๋ต๊ณผ ํฌ๊ฒ ๋ค๋ฆ ๋๋ค:
- vs. NPM ํจํค์ง: NPM ํจํค์ง๋ ๋น๋ ํ์์ ๊ณต์ ๋ฉ๋๋ค. ๋ณ๊ฒฝ์ด ๋ฐ์ํ๋ฉด ์๋น์ ์ฑ์ ์ ๋ฐ์ดํธ, ์ฌ๋น๋, ์ฌ๋ฐฐํฌํด์ผ ํฉ๋๋ค. ๋ชจ๋ ํ๋๋ ์ด์ ์ ๋ฐํ์ ๊ธฐ๋ฐ์ด๋ฏ๋ก ์๋น์๋ ๋์ ์ผ๋ก ์ ๋ฐ์ดํธ๋ฅผ ๋ฐ์ต๋๋ค.
- vs. Iframe: Iframe์ ๊ฐ๋ ฅํ ๊ฒฉ๋ฆฌ๋ฅผ ์ ๊ณตํ์ง๋ง ๊ณต์ ์ปจํ ์คํธ, ์คํ์ผ๋ง, ๋ผ์ฐํ , ์ฑ๋ฅ ์ธก๋ฉด์์ ํ๊ณ๊ฐ ์์ต๋๋ค. ๋ชจ๋ ํ๋๋ ์ด์ ์ ๋์ผํ DOM ๋ฐ JavaScript ์ปจํ ์คํธ ๋ด์์ ์ํํ ํตํฉ์ ์ ๊ณตํฉ๋๋ค.
- vs. ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๋ชจ๋ ธ๋ ํฌ: ๋ชจ๋ ธ๋ ํฌ๋ ๊ณต์ ์ฝ๋ ๊ด๋ฆฌ์ ๋์์ด ๋์ง๋ง, ์ฌ์ ํ ์ผ๋ฐ์ ์ผ๋ก ๋น๋ ํ์ ์ฐ๊ฒฐ์ ํฌํจํ๋ฉฐ ๊ฑฐ๋ํ ๋น๋๋ก ์ด์ด์ง ์ ์์ต๋๋ค. ๋ชจ๋ ํ๋๋ ์ด์ ์ ์ง์ ์ผ๋ก ๋ ๋ฆฝ์ ์ธ ์ ์ฅ์์ ๋ฐฐํฌ ๊ฐ์ ๊ณต์ ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
- vs. ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง: ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง์ด๋ ์ฃ์ง ์ฌ์ด๋ ์ธํด๋ฃจ๋๋ ๋์ JavaScript ๋ชจ๋์ด ์๋ HTML์ ๊ตฌ์ฑํ๋ฏ๋ก ์ํธ์์ฉ ๊ธฐ๋ฅ์ด ์ ํ๋ฉ๋๋ค.
๋ชจ๋ ํ๋๋ ์ด์ ๋ฉ์ปค๋์ฆ ์ฌ์ธต ๋ถ์
๋ชจ๋ ํ๋๋ ์ด์ ์ Webpack ์ค์ ์ ์ดํดํ๋ ๊ฒ์ด ๊ทธ ํ์ ํ์ ํ๋ ํต์ฌ์ ๋๋ค. `ModuleFederationPlugin`์ด ๊ทธ ์ค์ฌ์ ์์ต๋๋ค.
`ModuleFederationPlugin` ์ค์
๋ฆฌ๋ชจํธ ๋ฐ ํธ์คํธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํ ๊ฐ๋ ์ ์์ ๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
๋ฆฌ๋ชจํธ ์ ํ๋ฆฌ์ผ์ด์ (`remote-app`) Webpack ์ค์ :
// webpack.config.js for remote-app
const { ModuleFederationPlugin } = require('webpack').container;
module.exports = {
// ... other webpack config ...
plugins: [
new ModuleFederationPlugin({
name: 'remoteApp',
filename: 'remoteEntry.js',
exposes: {
'./WidgetA': './src/components/WidgetA',
'./UtilityFunc': './src/utils/utilityFunc.js',
'./LoginPage': './src/pages/LoginPage.js'
},
shared: {
react: { singleton: true, requiredVersion: '^18.0.0' },
'react-dom': { singleton: true, requiredVersion: '^18.0.0' },
// ... other shared libraries ...
},
}),
],
};
์ค๋ช :
- `name`: ์ด ์๊ฒฉ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ณ ์ ์ด๋ฆ์ ๋๋ค. ๋ค๋ฅธ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ด๋ฅผ ์ฐธ์กฐํ๋ ๋ฐฉ์์ ๋๋ค.
- `filename`: ๋ ธ์ถ๋ ๋ชจ๋์ ๋งค๋ํ์คํธ๋ฅผ ํฌํจํ๋ ๋ฒ๋ค์ ์ด๋ฆ์ ๋๋ค. ์ด ํ์ผ์ ํธ์คํธ๊ฐ ์ฌ์ฉ ๊ฐ๋ฅํ ๊ฒ์ ๋ฐ๊ฒฌํ๋ ๋ฐ ์ค์ํฉ๋๋ค.
- `exposes`: ํค๊ฐ ๊ณต๊ฐ ๋ชจ๋ ์ด๋ฆ์ด๊ณ ๊ฐ์ด ๋ ธ์ถํ๋ ค๋ ๋ชจ๋์ ๋ก์ปฌ ๊ฒฝ๋ก์ธ ๊ฐ์ฒด์ ๋๋ค.
- `shared`: ๋ค๋ฅธ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๊ณต์ ํด์ผ ํ๋ ์์กด์ฑ์ ์ง์ ํฉ๋๋ค. `singleton: true`๋ ์์กด์ฑ(์: React)์ ๋จ์ผ ์ธ์คํด์ค๋ง ๋ชจ๋ ํ๋๋ ์ด์ ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฑธ์ณ ๋ก๋๋๋๋ก ๋ณด์ฅํ์ฌ, ์ค๋ณต ์ฝ๋์ React ์ปจํ ์คํธ ๊ด๋ จ ์ ์ฌ์ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํฉ๋๋ค. `requiredVersion`์ ํ์ฉ ๊ฐ๋ฅํ ๋ฒ์ ๋ฒ์๋ฅผ ์ง์ ํ ์ ์๊ฒ ํฉ๋๋ค.
ํธ์คํธ ์ ํ๋ฆฌ์ผ์ด์ (`host-app`) Webpack ์ค์ :
// webpack.config.js for host-app
const { ModuleFederationPlugin } = require('webpack').container;
module.exports = {
// ... other webpack config ...
plugins: [
new ModuleFederationPlugin({
name: 'hostApp',
remotes: {
remoteApp: 'remoteApp@http://localhost:3001/remoteEntry.js',
// ... other remote applications ...
},
shared: {
react: { singleton: true, requiredVersion: '^18.0.0' },
'react-dom': { singleton: true, requiredVersion: '^18.0.0' },
// ... other shared libraries ...
},
}),
],
};
์ค๋ช :
- `name`: ์ด ํธ์คํธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ณ ์ ์ด๋ฆ์ ๋๋ค.
- `remotes`: ํค๋ ์๊ฒฉ์์ ๋ชจ๋์ ๊ฐ์ ธ์ค๋ ๋ฐ ์ฌ์ฉํ ๋ก์ปฌ ์ด๋ฆ์ด๊ณ , ๊ฐ์ ์ค์ ์๊ฒฉ ๋ชจ๋ ์ง์ ์ (๋ณดํต `name@url`)์ธ ๊ฐ์ฒด์ ๋๋ค.
- `shared`: ๋ฆฌ๋ชจํธ์ ์ ์ฌํ๊ฒ, ํธ์คํธ๊ฐ ๊ณต์ ํ ๊ฒ์ผ๋ก ์์ํ๋ ์์กด์ฑ์ ์ง์ ํฉ๋๋ค.
ํธ์คํธ์์ ๋ ธ์ถ๋ ๋ชจ๋ ์ฌ์ฉํ๊ธฐ
์ค์ ์ด ์๋ฃ๋๋ฉด ๋ชจ๋ ์ฌ์ฉ์ ๊ฐ๋จํ๋ฉฐ, ์ข ์ข ํ์ค ๋์ ์ํฌํธ์ ์ ์ฌํฉ๋๋ค:
// host-app/src/App.js
import React, { Suspense, lazy } from 'react';
// Dynamically import WidgetA from remoteApp
const WidgetA = lazy(() => import('remoteApp/WidgetA'));
function App() {
return (
<div>
<h1>Host Application</h1>
<Suspense fallback={<div>Loading WidgetA...</div>}>
<WidgetA />
</Suspense>
</div>
);
}
export default App;
๋ง๋ฒ์ ๋ฐํ์์ ์ผ์ด๋ฉ๋๋ค: `import('remoteApp/WidgetA')`๊ฐ ํธ์ถ๋๋ฉด, Webpack์ `http://localhost:3001`์์ `remoteEntry.js`๋ฅผ ๊ฐ์ ธ์ ๋ ธ์ถ๋ ๋ชจ๋ ๋ด์์ `WidgetA`๋ฅผ ์ฐพ๊ณ , ํธ์คํธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค์ฝํ๋ก ๋ก๋ํฉ๋๋ค.
๋ฐํ์ ๋์ ๋ฐ ๋ฒ์ ๊ด๋ฆฌ
๋ชจ๋ ํ๋๋ ์ด์ ์ ๊ณต์ ์์กด์ฑ์ ์ง๋ฅ์ ์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค. ํธ์คํธ๊ฐ ๋ฆฌ๋ชจํธ๋ฅผ ๋ก๋ํ๋ ค๊ณ ํ ๋, ๋จผ์ ์์ฒญ๋ ๋ฒ์ ์ ํ์ ๊ณต์ ์์กด์ฑ(์: React v18)์ ์ด๋ฏธ ๊ฐ์ง๊ณ ์๋์ง ํ์ธํฉ๋๋ค. ๊ฐ์ง๊ณ ์๋ค๋ฉด ์์ฒด ๋ฒ์ ์ ์ฌ์ฉํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ฆฌ๋ชจํธ์ ๊ณต์ ์์กด์ฑ์ ๋ก๋ํ๋ ค๊ณ ์๋ํฉ๋๋ค. `singleton` ์์ฑ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋จ์ผ ์ธ์คํด์ค๋ง ์กด์ฌํ๋๋ก ๋ณด์ฅํ์ฌ React ์ปจํ ์คํธ๊ฐ ๋ค๋ฅธ React ๋ฒ์ ๊ฐ์ ๊นจ์ง๋ ๊ฒ๊ณผ ๊ฐ์ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค.
์ด ๋์ ๋ฒ์ ํ์์ ๋งค์ฐ ๊ฐ๋ ฅํ์ฌ, ๋ฒ์ ์ด ์ ์๋ ๋ฒ์ ๋ด์์ ํธํ๋๋ ํ, ๋ ๋ฆฝ์ ์ธ ํ์ด ์ ์ฒด ํ๋๋ ์ด์ ์์คํ ์ ๊ฑธ์ณ ์กฐ์ ๋ ์ ๊ทธ๋ ์ด๋๋ฅผ ๊ฐ์ํ์ง ์๊ณ ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๋ฐ์ดํธํ ์ ์๊ฒ ํฉ๋๋ค.
๋ชจ๋ ํ๋๋ ์ด์ ์ ์ฌ์ฉํ ์ํคํ ์ฒ ์ค๊ณ: ์ค์ ์๋๋ฆฌ์ค
๋ชจ๋ ํ๋๋ ์ด์ ์ ์ ์ฐ์ฑ์ ๋ค์ํ ์ํคํ ์ฒ ํจํด์ ์ด์ด์ฃผ๋ฉฐ, ํนํ ๋ค์ํ ํฌํธํด๋ฆฌ์ค์ ๊ธ๋ก๋ฒ ํ์ ๋ณด์ ํ ๋๊ท๋ชจ ์กฐ์ง์ ์ ์ฉํฉ๋๋ค.
1. ์ ํ๋ฆฌ์ผ์ด์ ์ ธ / ๋์๋ณด๋
์๋๋ฆฌ์ค: ์ฌ๋ฌ ํ์ ๋ค์ํ ์์ ฏ์ด๋ ๊ธฐ๋ฅ์ ํตํฉํ๋ ๋ฉ์ธ ๋์๋ณด๋ ์ ํ๋ฆฌ์ผ์ด์ . ์๋ฅผ ๋ค์ด, ์ธ์ฌ, ์ฌ๋ฌด, ์ด์ ๋ชจ๋์ ๊ฐ์ถ ์ํฐํ๋ผ์ด์ฆ ํฌํธ๋ก, ๊ฐ ๋ชจ๋์ ์ ๋ด ํ์ด ๊ฐ๋ฐํฉ๋๋ค.
๋ชจ๋ ํ๋๋ ์ด์ ์ญํ : ๋์๋ณด๋๋ ํธ์คํธ ์ญํ ์ ํ๋ฉฐ, ๋ฆฌ๋ชจํธ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ ธ์ถํ ๋ง์ดํฌ๋ก ํ๋ก ํธ์๋(์์ ฏ)๋ฅผ ๋์ ์ผ๋ก ๋ก๋ํฉ๋๋ค. ํธ์คํธ๋ ๊ณตํต ๋ ์ด์์, ๋ด๋น๊ฒ์ด์ , ๊ณต์ ๋์์ธ ์์คํ ์ ์ ๊ณตํ๊ณ , ๋ฆฌ๋ชจํธ๋ ํน์ ๋น์ฆ๋์ค ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
์ด์ : ํ์ ์์ ฏ์ ๋ ๋ฆฝ์ ์ผ๋ก ๊ฐ๋ฐํ๊ณ ๋ฐฐํฌํ ์ ์์ต๋๋ค. ๋์๋ณด๋ ์ ธ์ ๊ฐ๋ณ๊ณ ์์ ์ ์ผ๋ก ์ ์ง๋ฉ๋๋ค. ์ ์ฒด ํฌํธ์ ์ฌ๋น๋ํ์ง ์๊ณ ๋ ์๋ก์ด ๊ธฐ๋ฅ์ ํตํฉํ ์ ์์ต๋๋ค.
2. ์ค์ํ๋ ์ปดํฌ๋ํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ / ๋์์ธ ์์คํ
์๋๋ฆฌ์ค: ํ ์กฐ์ง์ด ๊ธ๋ก๋ฒ ๋์์ธ ์์คํ ์ด๋ ์ฌ๋ฌ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ผ๊ด๋๊ฒ ์ฌ์ฉํด์ผ ํ๋ ๊ณตํต UI ์ปดํฌ๋ํธ(๋ฒํผ, ํผ, ๋ด๋น๊ฒ์ด์ ) ์ธํธ๋ฅผ ์ ์ง ๊ด๋ฆฌํฉ๋๋ค.
๋ชจ๋ ํ๋๋ ์ด์ ์ญํ : ๋์์ธ ์์คํ ์ ๋ฆฌ๋ชจํธ๊ฐ ๋์ด ์ปดํฌ๋ํธ๋ฅผ ๋ ธ์ถํฉ๋๋ค. ๋ค๋ฅธ ๋ชจ๋ ์ ํ๋ฆฌ์ผ์ด์ (ํธ์คํธ)์ ๋ฐํ์์ ์ด๋ฌํ ์ปดํฌ๋ํธ๋ฅผ ์ง์ ์๋นํฉ๋๋ค. ๋์์ธ ์์คํ ์ ์ปดํฌ๋ํธ๊ฐ ์ ๋ฐ์ดํธ๋๋ฉด, ๋ชจ๋ ์๋น์ ์ ํ๋ฆฌ์ผ์ด์ ์ npm ํจํค์ง๋ฅผ ์ฌ์ค์นํ๊ณ ์ฌ๋น๋ํ ํ์ ์์ด ์๋ก๊ณ ์นจ ์ ์ ๋ฐ์ดํธ๋ฅผ ๋ฐ์ต๋๋ค.
์ด์ : ๋ค์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฑธ์ณ UI ์ผ๊ด์ฑ์ ๋ณด์ฅํฉ๋๋ค. ๋์์ธ ์์คํ ์ ๋ฐ์ดํธ์ ์ ์ง๋ณด์ ๋ฐ ์ ํ๋ฅผ ๋จ์ํํฉ๋๋ค. ๊ณตํต UI ๋ก์ง์ ๊ณต์ ํ์ฌ ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ์ค์ ๋๋ค.
3. ๊ธฐ๋ฅ ์ค์ฌ ๋ง์ดํฌ๋ก ์ ํ๋ฆฌ์ผ์ด์
์๋๋ฆฌ์ค: ๋๊ท๋ชจ ์ด์ปค๋จธ์ค ํ๋ซํผ์์ ์ฌ๋ฌ ํ์ด ์ฌ์ฉ์ ์ฌ์ ์ ๋ค๋ฅธ ๋ถ๋ถ(์: ์ ํ ์์ธ, ์ฅ๋ฐ๊ตฌ๋, ๊ฒฐ์ , ์ฃผ๋ฌธ ๋ด์ญ)์ ์์ ํฉ๋๋ค.
๋ชจ๋ ํ๋๋ ์ด์ ์ญํ : ์ฌ์ ์ ๊ฐ ๋ถ๋ถ์ ๋ณ๊ฐ์ ๋ฆฌ๋ชจํธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋ค. ๊ฒฝ๋์ ํธ์คํธ ์ ํ๋ฆฌ์ผ์ด์ (์๋ง๋ ๋ผ์ฐํ ๋ง์ ์ํ)์ด URL์ ๋ฐ๋ผ ์ ์ ํ ๋ฆฌ๋ชจํธ๋ฅผ ๋ก๋ํฉ๋๋ค. ๋๋ ๋จ์ผ ์ ํ๋ฆฌ์ผ์ด์ ์ด ํ ํ์ด์ง์ ์ฌ๋ฌ ๊ธฐ๋ฅ ๋ฆฌ๋ชจํธ๋ฅผ ๊ตฌ์ฑํ ์๋ ์์ต๋๋ค.
์ด์ : ๋์ ํ ์์จ์ฑ์ผ๋ก ํ์ด ๊ธฐ๋ฅ์ ๋ ๋ฆฝ์ ์ผ๋ก ๊ฐ๋ฐ, ํ ์คํธ, ๋ฐฐํฌํ ์ ์์ต๋๋ค. ์ง์์ ๋ฐฐํฌ์ ํน์ ๋น์ฆ๋์ค ์ญ๋์ ๋ํ ๋น ๋ฅธ ๋ฐ๋ณต์ ์ด์์ ์ ๋๋ค.
4. ์ ์ง์ ๋ ๊ฑฐ์ ์์คํ ํ๋ํ (์คํธ๋ญ๊ธ๋ฌ ํผ๊ทธ ํจํด)
์๋๋ฆฌ์ค: ์ค๋๋ ๋ชจ๋๋ฆฌ์ ํ๋ก ํธ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ข ์ข ์ํํ๊ณ ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ฆฌ๋ ์์ ํ '๋น ๋ฑ ' ์ฌ์์ฑ ์์ด ํ๋ํํด์ผ ํฉ๋๋ค.
๋ชจ๋ ํ๋๋ ์ด์ ์ญํ : ๋ ๊ฑฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ํธ์คํธ ์ญํ ์ ํฉ๋๋ค. ์๋ก์ด ๊ธฐ๋ฅ์ ์ต์ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ๋ ๋ฆฝ์ ์ธ ๋ฆฌ๋ชจํธ๋ก ๊ฐ๋ฐ๋ฉ๋๋ค. ์ด ์๋ก์ด ๋ฆฌ๋ชจํธ๋ค์ ์ ์ง์ ์ผ๋ก ๋ ๊ฑฐ์ ๋ชจ๋๋ฆฌ์ค์ ํตํฉ๋์ด, ํจ๊ณผ์ ์ผ๋ก ์ค๋๋ ๊ธฐ๋ฅ์ ํ๋์ฉ '๊ต์ด(strangling)'ํฉ๋๋ค. ์ฌ์ฉ์๋ ์ค๋๋ ๋ถ๋ถ๊ณผ ์๋ก์ด ๋ถ๋ถ ์ฌ์ด๋ฅผ ์ํํ๊ฒ ์ ํํฉ๋๋ค.
์ด์ : ๋๊ท๋ชจ ๋ฆฌํฉํ ๋ง์ ์ํ์ ์ค์ ๋๋ค. ์ ์ง์ ์ธ ํ๋ํ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค. ์๋ก์ด ๊ธฐ์ ์ ๋์ ํ๋ฉด์ ๋น์ฆ๋์ค ์ฐ์์ฑ์ ์ ์งํฉ๋๋ค. ํนํ ํฌ๊ณ ์ค๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณด์ ํ ๊ธ๋ก๋ฒ ๊ธฐ์ ์ ๊ฐ์น๊ฐ ์์ต๋๋ค.
5. ์กฐ์ง ๊ฐ ๊ณต์ ๋ฐ ์ํ๊ณ
์๋๋ฆฌ์ค: ์๋ก ๋ค๋ฅธ ๋ถ์, ์ฌ์ ๋ถ ๋๋ ํํธ๋ ํ์ฌ๊ฐ ๋ ๋์ ์ํ๊ณ ๋ด์์ ํน์ ์ปดํฌ๋ํธ๋ ์ ํ๋ฆฌ์ผ์ด์ (์: ๊ณต์ ๋ก๊ทธ์ธ ๋ชจ๋, ๊ณตํต ๋ถ์ ๋์๋ณด๋ ์์ ฏ, ํํธ๋ ์ ์ฉ ํฌํธ)์ ๊ณต์ ํด์ผ ํฉ๋๋ค.
๋ชจ๋ ํ๋๋ ์ด์ ์ญํ : ๊ฐ ์ฃผ์ฒด๋ ํน์ ๋ชจ๋์ ๋ฆฌ๋ชจํธ๋ก ๋ ธ์ถํ ์ ์์ผ๋ฉฐ, ์ด๋ ํธ์คํธ ์ญํ ์ ํ๋ ๋ค๋ฅธ ํ๊ฐ๋ ์ฃผ์ฒด์ ์ํด ์๋น๋ ์ ์์ต๋๋ค. ์ด๋ ์ํธ ์ฐ๊ฒฐ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ํ๊ณ ๊ตฌ์ถ์ ์ฉ์ดํ๊ฒ ํฉ๋๋ค.
์ด์ : ์กฐ์ง ๊ฒฝ๊ณ๋ฅผ ๋์ด ์ฌ์ฌ์ฉ์ฑ๊ณผ ํ์คํ๋ฅผ ์ด์งํฉ๋๋ค. ์ค๋ณต ๊ฐ๋ฐ ๋ ธ๋ ฅ์ ์ค์ ๋๋ค. ํฌ๊ณ ์ฐํฉ๋ ํ๊ฒฝ์์ ํ์ ์ ์ด์งํฉ๋๋ค.
ํ๋ ์น ๊ฐ๋ฐ์์ ๋ชจ๋ ํ๋๋ ์ด์ ์ ์ฅ์
๋ชจ๋ ํ๋๋ ์ด์ ์ ๋๊ท๋ชจ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์ ํต์ฌ์ ์ธ ๋ฌธ์ ์ ์ ํด๊ฒฐํ๋ฉฐ, ๋ค์๊ณผ ๊ฐ์ ๊ฐ๋ ฅํ ์ด์ ์ ์ ๊ณตํฉ๋๋ค:
- ์ง์ ํ ๋ฐํ์ ํตํฉ ๋ฐ ๋ถ๋ฆฌ: ์ ํต์ ์ธ ์ ๊ทผ ๋ฐฉ์๊ณผ ๋ฌ๋ฆฌ, ๋ชจ๋ ํ๋๋ ์ด์ ์ ๋ฐํ์์ ๋ชจ๋์ ๋์ ๋ก๋ฉ ๋ฐ ํตํฉ์ ๋ฌ์ฑํฉ๋๋ค. ์ด๋ ๋ฆฌ๋ชจํธ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ ธ์ถ๋ ๋ชจ๋์ ์ ๋ฐ์ดํธํ ๋ ์๋น์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ๋น๋ํ๊ณ ์ฌ๋ฐฐํฌํ ํ์๊ฐ ์๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ด๋ ๋ ๋ฆฝ์ ์ธ ๋ฐฐํฌ ํ์ดํ๋ผ์ธ์ ์์ด ๊ฒ์ ์ฒด์ธ์ ์ ๋๋ค.
- ์๋นํ ๋ฒ๋ค ํฌ๊ธฐ ๊ฐ์: `shared` ์์ฑ์ ๋งค์ฐ ๊ฐ๋ ฅํฉ๋๋ค. ๊ฐ๋ฐ์๋ ๊ณตํต ์์กด์ฑ(React, Vue, Angular, Lodash ๋๋ ๊ณต์ ๋์์ธ ์์คํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฑ)์ ์ฌ๋ฌ ํ๋๋ ์ด์ ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์์กดํ๋๋ผ๋ ํ ๋ฒ๋ง ๋ก๋๋๋๋ก ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ์ด๋ ์ ์ฒด ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ๊ทน์ ์ผ๋ก ์ค์ฌ ์ด๊ธฐ ๋ก๋ ์๊ฐ์ ๋จ์ถํ๊ณ ์ฌ์ฉ์ ๊ฒฝํ์ ๊ฐ์ ํ๋ฉฐ, ํนํ ์ ์ธ๊ณ์ ์ผ๋ก ๋ค์ํ ๋คํธ์ํฌ ํ๊ฒฝ์ ์ฌ์ฉ์์๊ฒ ์ค์ํฉ๋๋ค.
- ๊ฐ์ ๋ ๊ฐ๋ฐ์ ๊ฒฝํ ๋ฐ ํ ์์จ์ฑ: ํ์ ๋ง์ดํฌ๋ก ํ๋ก ํธ์๋๋ฅผ ๋ ๋ฆฝ์ ์ผ๋ก ์์ ํ์ฌ ๋ณํฉ ์ถฉ๋์ ์ค์ด๊ณ ๋ ๋น ๋ฅธ ๋ฐ๋ณต ์ฃผ๊ธฐ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ ์ ์์ต๋๋ค. ํน์ ๋๋ฉ์ธ์ ๋ํด (ํฉ๋ฆฌ์ ์ธ ๋ฒ์ ๋ด์์) ์์ฒด ๊ธฐ์ ์คํ์ ์ ํํ์ฌ ํ์ ์ ์ด์งํ๊ณ ์ ๋ฌธ ๊ธฐ์ ์ ํ์ฉํ ์ ์์ต๋๋ค. ์ด ์์จ์ฑ์ ๋ค์ํ ๊ธ๋ก๋ฒ ํ์ ๊ด๋ฆฌํ๋ ๋๊ท๋ชจ ์กฐ์ง์ ํ์์ ์ ๋๋ค.
- ๊ธฐ์ ๋ ๋ฆฝ์ฑ ๋ฐ ์ ์ง์ ๋ง์ด๊ทธ๋ ์ด์ ๊ฐ๋ฅ: ์ฃผ๋ก Webpack 5์ ๊ธฐ๋ฅ์ด์ง๋ง, ๋ชจ๋ ํ๋๋ ์ด์ ์ ์๋ก ๋ค๋ฅธ JavaScript ํ๋ ์์ํฌ๋ก ๊ตฌ์ถ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ํตํฉ์ ํ์ฉํฉ๋๋ค(์: React ํธ์คํธ๊ฐ Vue ์ปดํฌ๋ํธ๋ฅผ ์๋นํ๊ฑฐ๋ ๊ทธ ๋ฐ๋, ์ ์ ํ ๋ํ ํฌํจ). ์ด๋ '๋น ๋ฑ ' ์ฌ์์ฑ ์์ด ๋ ๊ฑฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ง์ ์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๊ฑฐ๋ ์ฌ๋ฌ ์ฌ์ ๋ถ์ ๊ฑธ์ณ ๋ค๋ฅธ ํ๋ ์์ํฌ๋ฅผ ์ฑํํ ์กฐ์ง์ ์ด์์ ์ธ ์ ๋ต์ ๋๋ค.
- ๋จ์ํ๋ ์์กด์ฑ ๊ด๋ฆฌ: ํ๋ฌ๊ทธ์ธ์ `shared` ์ค์ ์ ๊ณตํต ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฒ์ ์ ๊ด๋ฆฌํ๋ ๊ฐ๋ ฅํ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํฉ๋๋ค. ์ ์ฐํ ๋ฒ์ ๋ฒ์์ ์ฑ๊ธํค ํจํด์ ํ์ฉํ์ฌ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๊ณ ๋ณต์กํ ๋ชจ๋ ธ๋ ํฌ๋ ์ ํต์ ์ธ ๋ง์ดํฌ๋ก ํ๋ก ํธ์๋ ์ค์ ์์ ํํ ๋ฐ์ํ๋ '์์กด์ฑ ์ง์ฅ'์ ๋ฐฉ์งํฉ๋๋ค.
- ๋๊ท๋ชจ ์กฐ์ง์ ์ํ ํฅ์๋ ํ์ฅ์ฑ: ๊ฐ๋ฐ์ด ๋ ๋ฆฝ์ ์ธ ํ๊ณผ ๋ฐฐํฌ์ ๊ฑธ์ณ ์ง์ ์ผ๋ก ๋ถ์ฐ๋ ์ ์๋๋ก ํจ์ผ๋ก์จ, ๋ชจ๋ ํ๋๋ ์ด์ ์ ์กฐ์ง์ด ์ํคํ ์ฒ ๋ณต์ก์ฑ์ด๋ ์กฐ์ ๋น์ฉ์ ๊ธฐํ๊ธ์์ ์ธ ์ฆ๊ฐ ์์ด ์ ํ ์ฑ์ฅ์ ๋ฐ๋ผ ํ๋ก ํธ์๋ ๊ฐ๋ฐ ๋ ธ๋ ฅ์ ์ ํ์ ์ผ๋ก ํ์ฅํ ์ ์๋๋ก ํฉ๋๋ค.
๋ชจ๋ ํ๋๋ ์ด์ ์ ๊ณผ์ ๋ฐ ๊ณ ๋ ค์ฌํญ
๊ฐ๋ ฅํ์ง๋ง ๋ชจ๋ ํ๋๋ ์ด์ ์ด ๋ง๋ณํต์น์ฝ์ ์๋๋๋ค. ์ฑ๊ณต์ ์ผ๋ก ๊ตฌํํ๋ ค๋ฉด ์ ์คํ ๊ณํ๊ณผ ์ ์ฌ์ ์ธ ๋ณต์ก์ฑ ํด๊ฒฐ์ด ํ์ํฉ๋๋ค:
- ์ด๊ธฐ ์ค์ ์ฆ๊ฐ ๋ฐ ํ์ต ๊ณก์ : Webpack์ `ModuleFederationPlugin` ์ค์ ์ ๋ณต์กํ ์ ์์ผ๋ฉฐ, ํนํ `exposes`, `remotes`, `shared` ์ต์ ๊ณผ ๊ทธ ์ํธ ์์ฉ์ ์ดํดํ๋ ๋ฐ ์ด๋ ค์์ด ์์ต๋๋ค. ๊ณ ๊ธ Webpack ์ค์ ์ ์ต์ํ์ง ์์ ํ์ ํ์ต ๊ณก์ ์ ์ง๋ฉดํ๊ฒ ๋ฉ๋๋ค.
- ๋ฒ์ ๋ถ์ผ์น ๋ฐ ๊ณต์ ์์กด์ฑ: `shared`๊ฐ ๋์์ด ๋์ง๋ง, ๋ ๋ฆฝ์ ์ธ ํ ๊ฐ์ ๊ณต์ ์์กด์ฑ ๋ฒ์ ์ ๊ด๋ฆฌํ๋ ๊ฒ์ ์ฌ์ ํ ๊ท์จ์ด ํ์ํฉ๋๋ค. ํธํ๋์ง ์๋ ๋ฒ์ ์ ๋ฐํ์ ์ค๋ฅ๋ ๋ฏธ๋ฌํ ๋ฒ๊ทธ๋ก ์ด์ด์ง ์ ์์ต๋๋ค. ๋ช ํํ ๊ฐ์ด๋๋ผ์ธ๊ณผ ์์กด์ฑ ๊ด๋ฆฌ๋ฅผ ์ํ ์ ์ฌ์ ์ธ ๊ณต์ ์ธํ๋ผ๊ฐ ์ค์ํฉ๋๋ค.
- ์ค๋ฅ ์ฒ๋ฆฌ ๋ฐ ํ๋ณตํ๋ ฅ์ฑ: ๋ฆฌ๋ชจํธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉํ ์ ์๊ฑฐ๋, ๋ก๋์ ์คํจํ๊ฑฐ๋, ๊นจ์ง ๋ชจ๋์ ๋ ธ์ถํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น์? ์์ ์ ์ธ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ์งํ๋ ค๋ฉด ๊ฐ๋ ฅํ ์ค๋ฅ ์ฒ๋ฆฌ, ํด๋ฐฑ(fallback), ์ฌ์ฉ์ ์นํ์ ์ธ ๋ก๋ฉ ์ํ๊ฐ ํ์์ ์ ๋๋ค.
- ์ฑ๋ฅ ๊ณ ๋ ค์ฌํญ: ๊ณต์ ์์กด์ฑ์ด ์ ์ฒด ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ์ค์ด์ง๋ง, ๋ฆฌ๋ชจํธ ์ํธ๋ฆฌ ํ์ผ๊ณผ ๋์ ์ผ๋ก ์ํฌํธ๋ ๋ชจ๋์ ์ด๊ธฐ ๋ก๋ฉ์ ๋คํธ์ํฌ ์์ฒญ์ ๋ฐ์์ํต๋๋ค. ์ด๋ ์บ์ฑ, ์ง์ฐ ๋ก๋ฉ, ์ ์ฌ์ ์ธ ํ๋ฆฌ๋ก๋ฉ ์ ๋ต์ ํตํด ์ต์ ํ๋์ด์ผ ํ๋ฉฐ, ํนํ ๋๋ฆฐ ๋คํธ์ํฌ๋ ๋ชจ๋ฐ์ผ ์ฅ์น์ ์ฌ์ฉ์์๊ฒ ์ค์ํฉ๋๋ค.
- ๋น๋ ๋๊ตฌ ์ข ์์ฑ: ๋ชจ๋ ํ๋๋ ์ด์ ์ Webpack 5์ ๊ธฐ๋ฅ์ ๋๋ค. ๊ธฐ๋ณธ ์์น์ ๋ค๋ฅธ ๋ฒ๋ค๋ฌ์ ์ํด ์ฑํ๋ ์ ์์ง๋ง, ํ์ฌ ๊ด๋ฒ์ํ ๊ตฌํ์ Webpack์ ๋ฌถ์ฌ ์์ต๋๋ค. ์ด๋ ๋์ฒด ๋น๋ ๋๊ตฌ์ ๋ง์ด ํฌ์ํ ํ์๊ฒ ๊ณ ๋ ค์ฌํญ์ด ๋ ์ ์์ต๋๋ค.
- ๋ถ์ฐ ์์คํ ๋๋ฒ๊น : ์ฌ๋ฌ ๋ ๋ฆฝ์ ์ผ๋ก ๋ฐฐํฌ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฑธ์ณ ๋ฌธ์ ๋ฅผ ๋๋ฒ๊น ํ๋ ๊ฒ์ ๋ชจ๋๋ฆฌ์ค๋ณด๋ค ๋ ์ด๋ ค์ธ ์ ์์ต๋๋ค. ํตํฉ๋ ๋ก๊น , ์ถ์ , ๋ชจ๋ํฐ๋ง ๋๊ตฌ๊ฐ ํ์์ ์ด ๋ฉ๋๋ค.
- ์ ์ญ ์ํ ๊ด๋ฆฌ ๋ฐ ํต์ : ๋ชจ๋ ํ๋๋ ์ด์ ์ด ๋ชจ๋ ๋ก๋ฉ์ ์ฒ๋ฆฌํ์ง๋ง, ๋ง์ดํฌ๋ก ํ๋ก ํธ์๋ ๊ฐ ํต์ ๊ณผ ์ ์ญ ์ํ ๊ด๋ฆฌ๋ ์ฌ์ ํ ์ ์คํ ์ํคํ ์ฒ ๊ฒฐ์ ์ด ํ์ํฉ๋๋ค. ๊ณต์ ์ด๋ฒคํธ, pub/sub ํจํด, ๋๋ ๊ฒฝ๋์ ์ ์ญ ์คํ ์ด์ ๊ฐ์ ์๋ฃจ์ ์ ์ ์คํ๊ฒ ๊ตฌํ๋์ด์ผ ํฉ๋๋ค.
- ๋ผ์ฐํ ๋ฐ ๋ด๋น๊ฒ์ด์ : ์์ง๋ ฅ ์๋ ์ฌ์ฉ์ ๊ฒฝํ์ ํต์ผ๋ ๋ผ์ฐํ ์ ํ์๋ก ํฉ๋๋ค. ์ด๋ ํธ์คํธ์ ์ฌ๋ฌ ๋ฆฌ๋ชจํธ์ ๊ฑธ์ณ ๋ผ์ฐํ ๋ก์ง์ ์กฐ์ ํด์ผ ํจ์ ์๋ฏธํ๋ฉฐ, ์ ์ฌ์ ์ผ๋ก ๊ณต์ ๋ผ์ฐํฐ ์ธ์คํด์ค๋ ์ด๋ฒคํธ ๊ธฐ๋ฐ ๋ด๋น๊ฒ์ด์ ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
- ์ผ๊ด๋ ์ฌ์ฉ์ ๊ฒฝํ ๋ฐ ๋์์ธ: ๋ชจ๋ ํ๋๋ ์ด์ ์ ํตํด ๊ณต์ ๋ ๋์์ธ ์์คํ ์ด ์๋๋ผ๋, ๋ ๋ฆฝ์ ์ธ ํ ๊ฐ์ ์๊ฐ์ ๋ฐ ์ํธ์์ฉ์ ์ผ๊ด์ฑ์ ์ ์งํ๋ ค๋ฉด ๊ฐ๋ ฅํ ๊ฑฐ๋ฒ๋์ค, ๋ช ํํ ๋์์ธ ๊ฐ์ด๋๋ผ์ธ, ๊ทธ๋ฆฌ๊ณ ์คํ์ผ๋ง์ด๋ ๊ณตํต ์ปดํฌ๋ํธ๋ฅผ ์ํ ์ ์ฌ์ ์ธ ๊ณต์ ์ ํธ๋ฆฌํฐ ๋ชจ๋์ด ํ์ํฉ๋๋ค.
- CI/CD ๋ฐ ๋ฐฐํฌ ๋ณต์ก์ฑ: ๊ฐ๋ณ ๋ฐฐํฌ๋ ๋ ๊ฐ๋จํ์ง๋ง, ์ ์ฌ์ ์ผ๋ก ์์ญ ๊ฐ์ ๋ง์ดํฌ๋ก ํ๋ก ํธ์๋์ ๊ทธ๋ค์ ์กฐ์ ๋ ๋ฆด๋ฆฌ์ค ์ ๋ต์ ์ํ CI/CD ํ์ดํ๋ผ์ธ์ ๊ด๋ฆฌํ๋ ๊ฒ์ ์ด์ ์ค๋ฒํค๋๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค. ์ด๋ฅผ ์ํด์๋ ์ฑ์ํ DevOps ๊ดํ์ด ํ์ํฉ๋๋ค.
๋ชจ๋ ํ๋๋ ์ด์ ๊ตฌํ์ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
๋ชจ๋ ํ๋๋ ์ด์ ์ ์ด์ ์ ๊ทน๋ํํ๊ณ ๊ณผ์ ๋ฅผ ์ํํ๋ ค๋ฉด ๋ค์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๊ณ ๋ คํ์ญ์์ค:
1. ์ ๋ต์ ๊ณํ ๋ฐ ๊ฒฝ๊ณ ์ ์
- ๋๋ฉ์ธ ์ฃผ๋ ์ค๊ณ: ๊ธฐ์ ์ ๊ณ์ธต์ด ์๋ ๋น์ฆ๋์ค ์ญ๋์ ๊ธฐ๋ฐํ์ฌ ๊ฐ ๋ง์ดํฌ๋ก ํ๋ก ํธ์๋์ ๋ช ํํ ๊ฒฝ๊ณ๋ฅผ ์ ์ํฉ๋๋ค. ๊ฐ ํ์ ์์ง๋ ฅ ์๊ณ ๋ฐฐํฌ ๊ฐ๋ฅํ ๋จ์๋ฅผ ์์ ํด์ผ ํฉ๋๋ค.
- ๊ณ์ฝ ์ฐ์ ๊ฐ๋ฐ: ๋ ธ์ถ๋ ๋ชจ๋์ ๋ํ ๋ช ํํ API์ ์ธํฐํ์ด์ค๋ฅผ ์ค์ ํฉ๋๋ค. ๊ฐ ๋ฆฌ๋ชจํธ๊ฐ ๋ฌด์์ ๋ ธ์ถํ๊ณ ๊ทธ ์ฌ์ฉ์ ๋ํ ๊ธฐ๋์น๊ฐ ๋ฌด์์ธ์ง ๋ฌธ์ํํฉ๋๋ค.
- ๊ณต์ ๊ฑฐ๋ฒ๋์ค: ํ์ ์์จ์ ์ด์ง๋ง, ์ํ๊ณ ์ ๋ฐ์ ์ผ๊ด์ฑ์ ์ ์งํ๊ธฐ ์ํด ๊ณต์ ์์กด์ฑ, ์ฝ๋ฉ ํ์ค, ํต์ ํ๋กํ ์ฝ์ ๋ํ ํฌ๊ด์ ์ธ ๊ฑฐ๋ฒ๋์ค๋ฅผ ์๋ฆฝํฉ๋๋ค.
2. ๊ฐ๋ ฅํ ์ค๋ฅ ์ฒ๋ฆฌ ๋ฐ ํด๋ฐฑ
- Suspense ๋ฐ ์ค๋ฅ ๊ฒฝ๊ณ: React์ `Suspense` ๋ฐ ์ค๋ฅ ๊ฒฝ๊ณ(๋๋ ๋ค๋ฅธ ํ๋ ์์ํฌ์ ์ ์ฌํ ๋ฉ์ปค๋์ฆ)๋ฅผ ํ์ฉํ์ฌ ๋์ ๋ชจ๋ ๋ก๋ฉ ์ค ์คํจ๋ฅผ ์ฐ์ํ๊ฒ ์ฒ๋ฆฌํฉ๋๋ค. ์ฌ์ฉ์์๊ฒ ์๋ฏธ ์๋ ํด๋ฐฑ UI๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ํ๋ณตํ๋ ฅ์ฑ ํจํด: ๊ฒฐํจ ํ์ฉ์ฑ์ ํฅ์์ํค๊ธฐ ์ํด ๋ฆฌ๋ชจํธ ๋ชจ๋ ๋ก๋ฉ์ ๋ํ ์ฌ์๋, ์ํท ๋ธ๋ ์ด์ปค, ํ์์์์ ๊ตฌํํฉ๋๋ค.
3. ์ต์ ํ๋ ์ฑ๋ฅ
- ์ง์ฐ ๋ก๋ฉ: ์ฆ์ ํ์ํ์ง ์์ ๋ฆฌ๋ชจํธ ๋ชจ๋์ ํญ์ ์ง์ฐ ๋ก๋ฉํฉ๋๋ค. ์ฌ์ฉ์๊ฐ ํน์ ๊ธฐ๋ฅ์ผ๋ก ์ด๋ํ๊ฑฐ๋ ์ปดํฌ๋ํธ๊ฐ ํ์๋ ๋๋ง ๊ฐ์ ธ์ต๋๋ค.
- ์บ์ฑ ์ ๋ต: HTTP ์บ์ฑ ํค๋์ ์๋น์ค ์์ปค๋ฅผ ์ฌ์ฉํ์ฌ `remoteEntry.js` ํ์ผ๊ณผ ๋ฆฌ๋ชจํธ ๋ฒ๋ค์ ๋ํด ์ ๊ทน์ ์ธ ์บ์ฑ์ ๊ตฌํํฉ๋๋ค.
- ํ๋ฆฌ๋ก๋ฉ: ์ค์ํ ๋ฆฌ๋ชจํธ ๋ชจ๋์ ๊ฒฝ์ฐ, ์ฒด๊ฐ ์ฑ๋ฅ์ ํฅ์์ํค๊ธฐ ์ํด ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๋ฏธ๋ฆฌ ๋ก๋ํ๋ ๊ฒ์ ๊ณ ๋ คํฉ๋๋ค.
4. ์ค์ํ๋๊ณ ์ ์คํ ๊ณต์ ์์กด์ฑ ๊ด๋ฆฌ
- ํต์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ์๊ฒฉํ ๋ฒ์ ๊ด๋ฆฌ: ์ฃผ์ ํ๋ ์์ํฌ(React, Angular, Vue)์ ๊ฒฝ์ฐ, `singleton: true`๋ฅผ ๊ฐ์ ํ๊ณ ๋ชจ๋ ํ๋๋ ์ด์ ๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ `requiredVersion`์ ์ผ์น์์ผ ์ผ๊ด์ฑ์ ๋ณด์ฅํฉ๋๋ค.
- ๊ณต์ ์์กด์ฑ ์ต์ํ: ์ง์ ์ผ๋ก ๊ณตํต์ ์ด๊ณ ํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ง ๊ณต์ ํฉ๋๋ค. ์์ ์ ํธ๋ฆฌํฐ๋ฅผ ๊ณผ๋ํ๊ฒ ๊ณต์ ํ๋ฉด ์๋นํ ์ด์ ์์ด ๋ณต์ก์ฑ๋ง ๋ํ ์ ์์ต๋๋ค.
- ์์กด์ฑ ์ค์บ ์๋ํ: ํ๋๋ ์ด์ ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์ ๊ฑธ์ณ ์ ์ฌ์ ์ธ ๋ฒ์ ์ถฉ๋์ด๋ ์ค๋ณต๋ ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ์งํ๋ ๋๊ตฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
5. ํฌ๊ด์ ์ธ ํ ์คํธ ์ ๋ต
- ๋จ์ ๋ฐ ํตํฉ ํ ์คํธ: ๊ฐ ๋ง์ดํฌ๋ก ํ๋ก ํธ์๋๋ ์์ฒด์ ์ผ๋ก ํฌ๊ด์ ์ธ ๋จ์ ๋ฐ ํตํฉ ํ ์คํธ๋ฅผ ๊ฐ์ ธ์ผ ํฉ๋๋ค.
- End-to-End (E2E) ํ ์คํธ: ํตํฉ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ํํ๊ฒ ์๋ํ๋์ง ํ์ธํ๋ ๋ฐ ์ค์ํฉ๋๋ค. ์ด๋ฌํ ํ ์คํธ๋ ๋ง์ดํฌ๋ก ํ๋ก ํธ์๋๋ฅผ ๋๋๋ค๋ฉฐ ์ผ๋ฐ์ ์ธ ์ฌ์ฉ์ ํ๋ฆ์ ๋ค๋ฃจ์ด์ผ ํฉ๋๋ค. ํ๋๋ ์ด์ ํ๊ฒฝ์ ์๋ฎฌ๋ ์ด์ ํ ์ ์๋ ๋๊ตฌ๋ฅผ ๊ณ ๋ คํ์ญ์์ค.
6. ๊ฐ์ํ๋ CI/CD ๋ฐ ๋ฐฐํฌ ์๋ํ
- ๋ ๋ฆฝ์ ์ธ ํ์ดํ๋ผ์ธ: ๊ฐ ๋ง์ดํฌ๋ก ํ๋ก ํธ์๋๋ ์์ฒด ๋ ๋ฆฝ์ ์ธ ๋น๋ ๋ฐ ๋ฐฐํฌ ํ์ดํ๋ผ์ธ์ ๊ฐ์ ธ์ผ ํฉ๋๋ค.
- ์์์ ๋ฐฐํฌ: ๋ฆฌ๋ชจํธ์ ์ ๋ฒ์ ์ ๋ฐฐํฌํด๋ ๊ธฐ์กด ํธ์คํธ๊ฐ ๊นจ์ง์ง ์๋๋ก ๋ณด์ฅํฉ๋๋ค(์: API ํธํ์ฑ์ ์ ์งํ๊ฑฐ๋ ๋ฒ์ ๊ด๋ฆฌ๋ ์ง์ ์ ์ ์ฌ์ฉ).
- ๋ชจ๋ํฐ๋ง ๋ฐ ๊ด์ฐฐ ๊ฐ๋ฅ์ฑ: ๋ถ์ฐ ํ๊ฒฝ์์ ๋ฌธ์ ๋ฅผ ์ ์ํ๊ฒ ์๋ณํ๊ณ ์ง๋จํ๊ธฐ ์ํด ๋ชจ๋ ๋ง์ดํฌ๋ก ํ๋ก ํธ์๋์ ๊ฑธ์ณ ๊ฐ๋ ฅํ ๋ก๊น , ์ถ์ , ๋ชจ๋ํฐ๋ง์ ๊ตฌํํฉ๋๋ค.
7. ํต์ผ๋ ๋ผ์ฐํ ๋ฐ ๋ด๋น๊ฒ์ด์
- ์ค์ํ๋ ๋ผ์ฐํฐ: ํธ์คํธ๊ฐ ์ ์ญ ๊ฒฝ๋ก๋ฅผ ๊ด๋ฆฌํ๊ณ ํ์ ๊ฒฝ๋ก๋ฅผ ํน์ ๋ง์ดํฌ๋ก ํ๋ก ํธ์๋์ ์์ํ ์ ์๋ ๊ณต์ ๋ผ์ฐํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋๋ ํจํด์ ๊ณ ๋ คํฉ๋๋ค.
- ์ด๋ฒคํธ ๊ธฐ๋ฐ ํต์ : ๊ฐํ ๊ฒฐํฉ ์์ด ์ด์ง์ ์ธ ๋ง์ดํฌ๋ก ํ๋ก ํธ์๋ ๊ฐ์ ํต์ ๊ณผ ๋ด๋น๊ฒ์ด์ ์ ์ฉ์ดํ๊ฒ ํ๊ธฐ ์ํด ์ ์ญ ์ด๋ฒคํธ ๋ฒ์ค๋ ์ํ ๊ด๋ฆฌ ์๋ฃจ์ ์ ์ฌ์ฉํฉ๋๋ค.
8. ๋ฌธ์ํ ๋ฐ ์ง์ ๊ณต์
- ๋ช ํํ ๋ฌธ์ํ: ๊ฐ ๋ ธ์ถ๋ ๋ชจ๋, API, ์ฌ์ฉ๋ฒ์ ๋ํ ์ฒ ์ ํ ๋ฌธ์๋ฅผ ์ ์งํฉ๋๋ค.
- ๋ด๋ถ ๊ต์ก: ๋ชจ๋ ํ๋๋ ์ด์ ์ํคํ ์ฒ๋ก ์ ํํ๋ ๊ฐ๋ฐ์, ํนํ ์ ์ํ๊ฒ ์จ๋ณด๋ฉํด์ผ ํ๋ ๊ธ๋ก๋ฒ ํ์ ์ํด ๊ต์ก ๋ฐ ์ํฌ์์ ์ ๊ณตํฉ๋๋ค.
Webpack 5๋ฅผ ๋์ด: ์กฐํฉ ๊ฐ๋ฅํ ์น์ ๋ฏธ๋
Webpack 5์ ๋ชจ๋ ํ๋๋ ์ด์ ์ด ์ด ๊ฐ๋ ์ ์ ๊ตฌ์ ์ด๊ณ ๊ฐ์ฅ ์ฑ์ํ ๊ตฌํ์ด์ง๋ง, ๋ฐํ์์ ๋ชจ๋์ ๊ณต์ ํ๋ค๋ ์์ด๋์ด๋ JavaScript ์ํ๊ณ ์ ๋ฐ์์ ์ฃผ๋ชฉ๋ฐ๊ณ ์์ต๋๋ค.
๋ค๋ฅธ ๋ฒ๋ค๋ฌ์ ํ๋ ์์ํฌ๋ค๋ ์ ์ฌํ ๊ธฐ๋ฅ์ ํ์ํ๊ฑฐ๋ ๊ตฌํํ๊ณ ์์ต๋๋ค. ์ด๋ ์ฐ๋ฆฌ๊ฐ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๋ฐฉ์์ ๋ํ ๋ ๋์ ์ฒ ํ์ ๋ณํ๋ฅผ ๋ํ๋ ๋๋ค: ๋ ๋ฆฝ์ ์ผ๋ก ๊ฐ๋ฐ๋๊ณ ๋ฐฐํฌ๋ ๋จ์๋ค์ด ์ํํ๊ฒ ํตํฉ๋์ด ๋ ํฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์ฑํ๋ ์ง์ ์ผ๋ก ์กฐํฉ ๊ฐ๋ฅํ ์น์ผ๋ก ๋์๊ฐ๋ ๊ฒ์ ๋๋ค. ๋ชจ๋ ํ๋๋ ์ด์ ์ ์์น์ ๋ฏธ๋์ ์น ํ์ค๊ณผ ์ํคํ ์ฒ ํจํด์ ์ํฅ์ ๋ฏธ์ณ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์ ๋์ฑ ๋ถ์ฐ๋๊ณ , ํ์ฅ ๊ฐ๋ฅํ๋ฉฐ, ํ๋ณตํ๋ ฅ์ฑ ์๊ฒ ๋ง๋ค ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค.
๊ฒฐ๋ก
JavaScript ๋ชจ๋ ํ๋๋ ์ด์ ์ ๋ง์ดํฌ๋ก ํ๋ก ํธ์๋ ์ํคํ ์ฒ์ ์ค์ง์ ์ธ ๊ตฌํ์์ ์ค์ํ ๋์ฝ์ ๋ํ๋ ๋๋ค. ์ง์ ํ ๋ฐํ์ ์ฝ๋ ๊ณต์ ์ ์์กด์ฑ ์ค๋ณต ์ ๊ฑฐ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํจ์ผ๋ก์จ, ๋ณต์กํ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๋๊ท๋ชจ ๊ฐ๋ฐ ์กฐ์ง๊ณผ ๊ธ๋ก๋ฒ ํ์ด ์ง๋ฉดํ ๊ฐ์ฅ ์ง์์ ์ธ ๋ฌธ์ ์ค ์ผ๋ถ๋ฅผ ํด๊ฒฐํฉ๋๋ค. ์ด๋ ํ์ ๋ ํฐ ์์จ์ฑ์ ๋ถ์ฌํ๊ณ , ๊ฐ๋ฐ ์ฃผ๊ธฐ๋ฅผ ๊ฐ์ํํ๋ฉฐ, ํ์ฅ ๊ฐ๋ฅํ๊ณ ์ ์ง๋ณด์ ๊ฐ๋ฅํ ํ๋ก ํธ์๋ ์์คํ ์ ์ฉ์ดํ๊ฒ ํฉ๋๋ค.
๋ชจ๋ ํ๋๋ ์ด์ ์ ์ฑํํ๋ ๊ฒ์ ์ค์ , ์ค๋ฅ ์ฒ๋ฆฌ, ๋ถ์ฐ ๋๋ฒ๊น ๊ณผ ๊ด๋ จ๋ ์์ฒด์ ์ธ ๋ณต์ก์ฑ์ ์๋ฐํ์ง๋ง, ๋ฒ๋ค ํฌ๊ธฐ ๊ฐ์, ๊ฐ๋ฐ์ ๊ฒฝํ ํฅ์, ์กฐ์ง์ ํ์ฅ์ฑ ๊ฐํ ์ธก๋ฉด์์ ์ ๊ณตํ๋ ์ด์ ์ ์ฌ์คํฉ๋๋ค. ํ๋ก ํธ์๋ ๋ชจ๋๋ฆฌ์ค์์ ๋ฒ์ด๋ ์ง์ ํ ๋ฏผ์ฒฉ์ฑ์ ์์ฉํ๊ณ , ๋ค์ํ ํ์ ๊ฑธ์ณ ์ ์ ๋ ๋ณต์กํด์ง๋ ๋์งํธ ์ ํ์ ๊ด๋ฆฌํ๋ ค๋ ๊ธฐ์ ์๊ฒ ๋ชจ๋ ํ๋๋ ์ด์ ์ ๋ง์คํฐํ๋ ๊ฒ์ ์ ํ์ด ์๋๋ผ ์ ๋ต์ ํ์ ๊ณผ์ ์ ๋๋ค.
์กฐํฉ ๊ฐ๋ฅํ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฏธ๋๋ฅผ ๋ฐ์๋ค์ด์ญ์์ค. JavaScript ๋ชจ๋ ํ๋๋ ์ด์ ์ ํ์ํ๊ณ ํ๋ก ํธ์๋ ์ํคํ ์ฒ์์ ์๋ก์ด ์์ค์ ํจ์จ์ฑ๊ณผ ํ์ ์ ์ ๊ธ ํด์ ํ์ญ์์ค.