MFA Composition

Server-side template composition

์›น ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด HTML์„ ๊ฐ€์ ธ์˜ฌ ๋•Œ, Nginx์˜ Server-side include ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉด HTML ๋‚ด์—์„œ Nginx๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ํ‘œ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ์Šฌ๋กฏ์— ๋‹ค๋ฅธ ํ…œํ”Œ๋ฆฟ์„ ๊ฐ€์ ธ์™€ ์น˜ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>Feed me</title>
  </head>
  <body>
    <h1>๐Ÿฝ Feed me</h1>
    <!--# include file="$PAGE.html" -->
  </body>
</html>

Run-time intergartion (iframe)

  • ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋™์ž‘ํ•˜๋Š” <iframe> ํƒœ๊ทธ ๊ฒฝ๋กœ์— ๊ฐ™์€ ๋˜๋Š” ๋‹ค๋ฅธ ์„œ๋ฒ„ ๋‚ด๋ถ€์˜ ํŽ˜์ด์ง€ ๊ฒฝ๋กœ๋ฅผ ์ž…๋ ฅ

  • iframe ์™ธ๋ถ€์™€ ๋‚ด๋ถ€๋Š” ๊ธฐ์ˆ ์ ์œผ๋กœ ์™„์ „ํžˆ ๊ฒฉ๋ฆฌ๋œ ์ƒํƒœ (script, style)

  • ์ตœ๊ทผ์—๋Š” ์•„๋ž˜ ๋‹จ์ ๋“ค๋กœ ์ธํ•ด iframe ๋ฐฉ์‹์„ ์ง€์–‘ํ•˜๋Š” ํŽธ

๋‹จ์ 

  • iframe ์˜์—ญ์˜ ํฌ๊ธฐ ์กฐ์ ˆ์ด ์–ด๋ ต๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜์‘ํ˜• ๋ ˆ์ด์•„์›ƒ์— ๋Œ€์‘ํ•˜๊ธฐ ์–ด๋ ต๋‹ค.

  • ์ƒˆ๋กœ์šด ์ปจํ…์ŠคํŠธ๋ฅผ ๋งŒ๋“ค์–ด ์„ฑ๋Šฅ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

  • iframe ๋‚ด๋ถ€์—๋Š” ์ ‘๊ทผ์„ฑ๊ณผ ๊ด€๋ จ๋œ ์š”์†Œ๊ฐ€ ์ œ๊ณต๋˜์ง€ ์•Š์Œ

  • SEO์— ์ข‹์ง€ ์•Š์€ ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ์Œ

  • iframe ๋‚ด๋ถ€ ์˜์—ญ์˜ ์ปจํ…์ธ ๊ฐ€ ๋™์ž‘์ด ๋ฉˆ์ถ”๊ฑฐ๋‚˜ ์ง€์—ฐ๋  ์ˆ˜ ์žˆ์–ด ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ์ €ํ•˜

  • ๋ณด์•ˆ์— ์ทจ์•ฝ

Build-time intergartion

  • ๊ฐ๊ฐ์˜ ๋งˆ์ดํฌ๋กœ์•ฑ์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ ์šฉํ•˜๋ ค๋ฉด ๋ชจ๋“  ๋งˆ์ดํฌ๋กœ ์•ฑ์„ ๋‹ค์‹œ ๋นŒ๋“œํ•˜๊ณ  ๋ฐฐํฌํ•ด์•ผ ํ•œ๋‹ค.

  • MFA์—์„œ ๋…๋ฆฝ์ ์ธ ๋ฐฐํฌ ์›์น™์— ๋งž๊ธฐ ์•Š๊ธฐ์— ๊ถŒ์žฅํ•˜์ง€ ์•Š๋Š” ์ ‘๊ทผ ๋ฐฉ์‹

Run-time intergartion (Web Component)

Web Components

  • Custom Element, Shadow DOM, Template Tag ์„ธ ๊ฐ€์ง€ ์ฃผ์š” ๊ธฐ์ˆ ๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ, ์ฝ”๋“œ ์ถฉ๋Œ ์—†์ด ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์บก์Šํ™”๋œ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ ์ปค์Šคํ…€ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    • ์บก์Šํ™”๋œ ๊ธฐ๋Šฅ: ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€ CSS ์Šคํƒ€์ผ๊ณผ JavaScript ๊ธฐ๋Šฅ์ด ํ•ด๋‹น ๋ถ€๋ถ„ ๋‚ด์—์„œ ๋‹ค๋ฅธ ๋ถ€๋ถ„์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๊ฒŒ ๋˜๋Š” ๊ฒƒ

  • Custom Element โ†’ ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์ •์˜ํ•œ HTML ํƒœ๊ทธ์ฒ˜๋Ÿผ ์‚ฌ์šฉ๋˜๋Š” ์—˜๋ฆฌ๋จผํŠธ๋กœ, ์‚ฌ์šฉ์ž๊ฐ€ ํ•„์š”์— ๋งž๊ฒŒ ์ƒˆ๋กœ์šด ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์ •์˜ํ•˜๊ณ  ์ด๋ฅผ HTML ๋ฌธ์„œ์—์„œ ๋งˆ์น˜ ๋‚ด์žฅ ์—˜๋ฆฌ๋จผํŠธ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” Javascript API ์„ธํŠธ

  • Shadow DOM โ†’ ์บก์Šํ™”๋œ ๊ทธ๋ฆผ์ž DOM ํŠธ๋ฆฌ๋ฅผ ๋ฉ”์ธ Document DOM์œผ๋กœ ๋ถ€ํ„ฐ ๋…๋ฆฝ์ ์œผ๋กœ ๋ Œ๋”๋˜๊ฒŒ ํ•˜์—ฌ ๊ฒฉ๋ฆฌ์‹œํ‚ค๊ณ  ์—ฐ๊ด€๋œ ๊ธฐ๋Šฅ์„ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•œ Javascript API ์ง‘ํ•ฉ

    • Element๋ฅผ Privateํ•˜๊ฒŒ ์œ ์ง€ํ•˜์—ฌ Document์˜ ๋‹ค๋ฅธ ๋ถ€๋ถ„๊ณผ ์ถฉ๋Œ์—†์ด script, style์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

  • HTML Template โ†’ <template>, <slot> ์„ ์‚ฌ์šฉํ•ด ํ‘œํ˜„, ๋ Œ๋”๋ง๋œ ํŽ˜์ด์ง€์— ๋‚˜ํƒ€๋‚˜์ง€ ์•Š๋Š” ๋งˆํฌ์—… ํ…œํ”Œ๋ฆฟ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์คŒ . ๊ทธ ํ›„ ์ปค์Šคํ…€ ์—˜๋ฆฌ๋จผํŠธ์˜ ๊ตฌ์กฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์—ฌ๋Ÿฌ๋ฒˆ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅ

์žฅ์ 

  • ๋„๋ฆฌ ๊ตฌํ˜„๋˜๋Š” ์›น ํ‘œ์ค€

  • Custom Element์™€ Shadow DOM์„ ํ†ตํ•ด ๊ธฐ์กด์— ํ•  ์ˆ˜ ์—†๋˜ ๊ฒฉ๋ฆฌ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Œ

  • ์ปค์Šคํ…€ ์—˜๋ฆฌ๋จผํŠธ์˜ ์ƒ๋ช…์ฃผ๊ธฐ ๋ฉ”์„œ๋“œ๋“ค์€ ์—ฌ๋Ÿฌ ๋‹ค๋ฅธ application ์ฝ”๋“œ๋“ค์„ ํ‘œ์ค€ํ™”๋œ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ฐ์‹ธ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

๋‹จ์ 

  • ์›น ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋“ฑ๋กํ•˜๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํด๋ผ์ด์–ธํŠธ ๋‹จ์—์„œ JS๊ฐ€ ๋™์ž‘ํ•ด์•ผ ํ•œ๋‹ค. (SSR ๋งŒ์œผ๋กœ๋Š” ์•ˆ๋จ)

  • ๊ตฌํ˜• ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” Shadow DOM์„ ์‚ฌ์šฉํ•˜๊ธฐ ํž˜๋“ฌ

Run-time intergartion (JS)

  • ๊ฐ ๋งˆ์ดํฌ๋กœ ํ”„๋ก ํŠธ ์•ฑ์„ <script> ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํŽ˜์ด์ง€์— ํฌํ•จ์‹œํ‚จ๋‹ค.

  • ๋กœ๋“œ์‹œ ์ „์—ญ ํ•จ์ˆ˜๋ฅผ ์ง„์ž…์ ์œผ๋กœ ๋…ธ์ถœ

  • ์‚ฌ์šฉํ•˜๋Š” ๊ณณ์—์„œ ์–ด๋–ค ๋งˆ์ดํฌ๋กœ ์•ฑ์„ ๋งˆ์šดํŠธํ• ์ง€ ๊ฒฐ์ •ํ•˜๊ณ  ๊ด€๋ จ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋ Œ๋”๋งํ•  ์‹œ๊ธฐ์™€ ์œ„์น˜๋ฅผ ์•Œ๋ ค์คŒ

Run-time intergartion (Module Federation)

  • ๋ฒˆ๋“ค๋Ÿฌ(Vite, Webpack)์—์„œ Module Federation ๊ธฐ๋Šฅ์„ ์ œ๊ณต

  • ์ตœ์ข…์ ์œผ๋กœ ๋นŒ๋“œํ• ๋•Œ ํ•˜๋‚˜์˜ ์ฝ”๋“œ๋กœ ๋นŒ๋“œํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์—ฌ๋Ÿฌ ์ฝ”๋“œ๋กœ ๋นŒ๋“œํ•˜๊ณ  ๋นŒ๋“œ๋œ ์ฝ”๋“œ๋ฅผ ๋…๋ฆฝ์ ์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ˜น์€ ๋ชจ๋“ˆ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ธฐ์ˆ 

Last updated