LoginGustBookCategories
Frontend

Micro FE 아키텍쳐

thumbnailCreatehb21·2022년 03월 14일 14:51
이 글은 Navdeep Singh Gill의 원문을 해석하며 써내려간 글입니다.


목차

  • 마이크로 프론트엔드 소개
  • 마이크로 프론트엔드가 작동하는 방법
  • 마이크로 프론트엔드의 베스트 프랙티스
  • 마이크로 프론트엔드 아키텍쳐를 어떻게 적용시킬것인가
  • 마이크로 프론트엔드가 중요한 이유
  • 마이크로 프론트엔드의 이점
  • 요약 및 마무리


마이크로 프론트엔드 소개

마이크로 프론트엔드는 프론트엔드 웹 개발에 대한 마이크로서비스 테스팅 접근 방식입니다. 요즘의 떠오르는 추세는 마이크로서비스 아키텍처 위에 상주하는 강력하고 기능이 풍부한 웹 애플리케이션을 구축하는 것입니다.
시간이 지남에 따라 Micro Frontend Architecture는 응용 프로그램의 일부가 되며 종종 별도의 팀에서 개발하고 성장하며 유지 관리가 더 어려워집니다. 이러한 유형의 응용 프로그램을 Frontend Monolith라고 합니다.
이 문제를 해결하기 위해 Micro Frontend라는 개념이 등장했습니다.

마이크로 프론트엔드는 프론트엔드 생태계의 복잡성을 조사하지 않는 한 올바른 선택입니다.

팀은 교차 기능을 수행하며 사용자 인터페이스에서 데이터베이스에 이르기까지 종단 간 기능을 개발합니다. 마이크로 프론트엔드는 더 친숙하고 부피가 덜한 프론트엔드입니다. 이러한 유형의 마이크로 프론트엔드 아키텍처는 전체 스택에서 비즈니스 도메인별로 전체 애플리케이션을 분할합니다. 이를 통해 프론트엔드 팀은 백엔드 팀이 Microservices에서 얻는 것과 동일한 수준의 유연성, 테스트 가능성 및 속도를 얻을 수 있습니다.


마이크로 프론트엔드가 작동하는 방법

다양한 JavaScript 프레임워크를 사용하는 여러 팀과 함께 최신 웹 애플리케이션을 구축하기 위한 Micro Frontend 모범 사례, 전략 및 레시피는 무엇일까요.

https://www.xenonstack.com/hubfs/xenonstack-micro-frontend-architecture.png

Micro Frontend Architecture의 주요 개념은 다음과 같습니다.

Be Technology Independent
각 팀은 다른 팀과 협력하지 않고 스택을 선택하고 업그레이드해야 합니다. 사용자 정의 요소는 구현 세부 정보를 숨기는 동시에 다른 사용자에게 중립적인 인터페이스를 제공하는 데 도움이 됩니다.

Isolate Team Code
팀이 동일한 프레임워크를 사용하더라도 런타임을 공유하지 마십시오. 독립적인 애플리케이션을 독립적으로 구축하십시오. 공유 상태 또는 전역 변수에 의존하지 마십시오.

Create Team Prefixes
아직 격리가 불가능한 경우 명명 규칙을 사용합니다. 충돌을 피하고 소유권을 명확히 하기 위한 네임스페이스 CSS, 로컬 스토리지, 이벤트 및 쿠키.

Favor Native Browser Features over Custom APIs
글로벌 PubSub 시스템을 구축하는 대신 브라우저 이벤트를 통신에 사용하세요. 팀 간 API를 빌드해야 하는 경우 가능한 한 단순하게 유지하십시오.

PubSub 시스템은 Publisher-Subscriber 구조를 의미합니다.

Build a Resilient Web design
이 기능은 JavaScript를 실행할 수 없는 경우에도 유용해야 합니다. 인지된 성능을 향상시키려면 범용 렌더링 및 점진적 향상을 사용하십시오.


마이크로 프론트엔드의 베스트 프랙티스

마이크로 프론트엔드 아키텍처를 구현하기 위한 다양한 사례.
  • 단일 SPA 메타 프레임워크는 React, Vue, Angular 1, Angular 2 등과 같은 페이지를 새로 고치지 않고 동일한 페이지에 여러 프레임워크를 결합합니다.
  • 여러 단일 페이지 애플리케이션이 서로 다른 URL에 있습니다. 공유 기능 응용 프로그램의 경우 NPM 또는 Bower 구성 요소를 사용합니다.
  • Windows를 사용하여 마이크로 앱을 Iframe으로 격리. Post Message API 및 라이브러리를 조정합니다. IFrame은 상위 창에 의해 노출된 API를 공유합니다.
  • 공유 이벤트 버스를 통해 통신하기 위한 다른 모듈. 각 모듈은 들어오고 나가는 이벤트를 처리하는 한 자체 프레임워크에서 작동합니다.
구성 요소 라이브러리는 기본 앱의 스택에 따라 다른 구성 요소 및 앱 섹션이 라이브러리로 개발되고 기본 앱에 "필수"됩니다. 따라서 주요 앱은 다양한 구성 요소의 구성입니다.

D3.js는 Data-Driven Documents의 약자로 대화형 및 동적 웹 기반 데이터 시각화를 생성하기 위한 자바스크립트의 프론트 엔드 시각화 라이브러리입니다.
Iframe이란 내부 프레임(inline frame)이라는 의미로 하나의 HTML문서내에서 다른 HTML문서를 보여주고자 할때 사용합니다.



마이크로 프론트엔드 아키텍쳐를 어떻게 적용시킬것인가

마이크로 프론트엔드 아키텍처를 채택하고 웹 구성 요소로 마이크로서비스 테스트를 구현하는 방법은 다음과 같습니다.

Integration in the Browser
웹 구성 요소는 웹 응용 프로그램으로 가져온 프론트엔드 프레그먼트를 만드는 방법을 제공합니다. 이러한 조각은 백 엔드와 함께 마이크로서비스에 패키징할 수 있습니다. 논리와 시각적 표현이 함께 포장되어 완성된 서비스입니다. 이 접근 방식을 사용하여 라우팅으로 축소된 프런트 엔드 응용 프로그램은 표시되는 구성 요소 집합과 서로 다른 웹 구성 요소 간의 이벤트 조정과 관련된 결정을 내립니다.

Web Components
웹 구성 요소를 사용하면 웹 응용 프로그램으로 가져온 재사용 가능한 구성 요소를 만들 수 있습니다. 이는 웹 페이지로 가져온 위젯과 같습니다. 이들은 현재 Chrome, Opera 및 Firefox와 같은 브라우저에서 작동합니다. 브라우저가 기본적으로 웹 구성 요소를 지원하지 않는 경우 호환성은 JavaScript Polyfills를 사용하여 수행됩니다. 웹 구성 요소는 별도로 또는 함께 사용되는 4가지 주요 요소로 구성됩니다.
  1. Custom Elements
  2. Shadow DOM
  3. HTML Imports
  4. HTML Templates

1. Custom Elements
사용자 정의 요소를 사용하여 사용자 정의 HTML 태그 및 요소를 만듭니다. 각 요소에는 고유한 CSS 스타일과 스크립트가 있습니다. 고유한 태그를 만들고 CSS 스타일을 적용하고 스크립트를 통해 동작을 추가합니다. 새로운 HTML 요소와의 충돌을 피하기 위해 하이픈을 넣는 데 필요한 유일한 표준입니다. 예를 들어, 사용자 정의 요소와 사용자 정의 태그를 모두 사용하여 체크아웃 목록을 생성하면 웹 구성 요소 및 요소 수명 주기 콜백이 생성됩니다. 이러한 수명 주기 콜백을 사용하면 구성 요소 개발과 관련된 동작을 정의할 수 있습니다. 사용자 정의 요소가 있는 수명 주기 콜백은 다음과 같습니다.
  • CreatedCallback - 구성 요소가 등록될 때 발생하는 동작을 정의합니다.
  • AttachedCallback - 컴포넌트가 DOM에 삽입될 때 발생하는 동작을 정의합니다.
  • DetachedCallback - DOM에 요소가 없을 때 발생하는 동작을 정의합니다.
  • AttributeChangedCallback - 속성이 추가, 변경 또는 제거될 때 발생하는 동작을 정의합니다.
베스트 프랙티스 예시

class CheckoutBasket extends HTMLElement { constructer (){...} // is created connectedCallback (){...} // attached to DOM attributeChangedCallback (attr , oldVal , newVal) // someone changed an attribute disconnecteCallback () {...} // removed from DOM, cleanup events that have been registered }


기본적인 사용자 정의 요소 - stencil, svelte, SkateJS, AngularElements, hyperHTML 요소 등


2. Shadow DOM
Shadow DOM DOM은 HTML, CSS 및 JavaScript가 구성 요소 내부에 있을 때 기본 문서의 DOM과 분리된 웹 구성 요소 내부에 결합하는 API입니다. 이 분리는 API 서비스를 구축하는 동안 한 명의 사용자와 유사하며 API 서비스의 소비자는 내부에 대해 알지 못합니다. 소비자에게 중요한 것은 API 요청뿐입니다. 이러한 서비스는 다른 서비스의 API를 요청하는 것 외에는 외부 세계에 대한 액세스 권한이 없습니다. 유사한 기능이 웹 구성 요소에 제공되었습니다. 내부 동작은 설계상 허용되는 경우를 제외하고 외부에서 액세스할 수 없으며 해당 요소가 있는 DOM 문서에도 영향을 주지 않습니다. 웹 구성 요소 간의 주요 통신 방법은 이벤트를 실행하는 것입니다.


3. HTML Imports
웹 구성 요소의 경우 HTML 가져오기가 패키징 메커니즘입니다. HTML 가져오기는 DOM에 웹 구성 요소의 위치를 ​​알려줍니다. 마이크로 서비스의 컨텍스트에서 서비스의 원격 위치 가져오기에는 사용할 구성 요소가 포함되어 있습니다. HTML 가져오기는 다른 HTML 문서를 통해 HTML 문서를 재사용하고 포함하는 방법입니다. 각각 고유한 스타일과 스크립트를 포함하는 HTML 가져오기로 미리 정의된 구성 요소는 HTML 가져오기가 현재 DOM에 표시되는 최상위 수준을 결정하고 가져온 문서가 나머지 작업을 처리합니다.
  • Shell은 구성 요소 및 구성 요소 선택기에 대한 컨테이너로 구성된 최상위 래퍼입니다. 여기에는 사용자가 구성 요소를 조작할 수 있는 컨트롤러 또는 보기가 포함되어야 합니다.
  • 컨테이너는 중첩된 애플리케이션의 HTML 코드가 삽입되어야 하는 실제 루트 위치입니다. 모든 중첩 앱의 경우 단일 진입점이 있어야 합니다.
  • 구성 요소 선택기를 사용하면 현재 활성화된 중첩 응용 프로그램을 관리할 수 있습니다.
클라우드 마이그레이션에는 조직의 온프레미스 컴퓨터에서 클라우드 컴퓨팅 환경으로 필수 데이터, 애플리케이션 및 비즈니스 부분을 이동하는 작업이 포함됩니다.


4. HTML Templates
HTML 템플릿 요소는 페이지가 로드될 때 렌더링되지 않은 클라이언트 측 콘텐츠를 보유합니다. 다음 React Js 앱 예제를 통해 Micro Frontend Architecture 구현에 대해 이해해 보도록 합시다. - 웹 응용 프로그램을 독자적으로 개발하여 다른 사람에 의해 차단되거나 다른 사람에게 손상되지 않고 완료된 요소로 변경될 때 좋습니다.
그렇기 때문에 이 예에서 새로운 반응 앱은 별도로 빌드, 실행 및 배포해야 하며 통신해야 하는 다른 앱을 서비스로 처리해야 합니다. 예: 아래 예는 웹 페이지에 대한 헤더를 생성합니다. 이 예제에서는 React.js를 사용했습니다. 요즘 세대가 사용하고 있습니다. 빠른 부트스트랩을 위해 create-react-app을 사용합니다.

npm install -g create-react-app create-react-app head cd head/ npm start

이제 서버 사이드 렌더링을 빠르게 추가해 보겠습니다. 나중에 SEO 및 성능상의 이유로 앱에 가입할 때 도움이 됩니다. 처음에 이것을 부착하는 것이 더 쉽습니다.

Change src/App.js to an actual header: import React from 'react'; export default () => <header> <h1>Logo</h1> <nav> <ul> <li>About</li> <li>Contact</li> </ul> </nav> </header>;

그런 다음 익스프레스 서버를 시작할 프로젝트의 루트에 server.js라는 파일을 만들고 서버 측 렌더링 반응을 만듭니다.

const path = require('path'); const fs = require('fs'); const express = require('express'); const React = require('react'); const App = require('./transpiled/App.js').default; const { renderToString } = require('react-dom/server'); const server = express(); server.get('/', (req, res) => { const htmlPath = path.resolve(__dirname, 'build', 'index.html'); fs.readFile(htmlPath, 'utf8', (err, html) => { const rootElem = '

const renderedApp = renderToString(React.createElement(App, null));  res.send(html.replace( rootElem, rootElem + renderedApp) );  server.use(express.static(‘build’)); const port = process.env.PORT || 8080; server.listen(port, () => {  console.log(`App listening on port ${port}`);  });

이 스크립트는 루트를 사용하여 요소(앱)에 반응하고, 이를 문자열로 렌더링하고, 사용자에게 제공하기 전에 HTML로 푸시합니다. React는 나중에 이미 렌더링된 구성 요소 위에 마운트됩니다. 그러나 그것은 NodeJS에서 실행되고 Node JS는 JSX 또는 import와 같은 다른 최신 구문을 이해하지 못하므로 서버를 실행하기 전에 babel을 사용하여 변환했습니다.

npm install --dev babel-cli babel-preset-es2015

package.json의 스크립트 섹션에 두 개의 작업을 추가하여 실행하세요.

"transpile": "NODE_ENV=production babel src --out-dir transpiled --presets es2015,react-app", "start:prod": "NODE_ENV=production node server.js"

이제 헤더를 실행하십시오.

npm run build npm run transpile npm run start:prod



마이크로 프론트엔드가 중요한 이유

현대 시대에는 새로운 웹 앱이 등장하면서 프론트 엔드가 점점 더 커지고 있고, 백 엔드의 중요성은 점점 줄어들고 있습니다. 대부분의 코드는 Micro Frontend Architecture입니다. 그리고 Monolith 접근 방식은 더 큰 웹 애플리케이션에서는 작동하지 않습니다. 대규모 프런트 엔드 애플리케이션에 대한 모놀리식 접근 방식은 다루기 어려워집니다. 독립적으로 작동하는 더 작은 모듈로 분할하기 위한 도구가 필요합니다. 문제에 대한 해결책은 Micro 프론트엔드입니다. 마이크로 프론트엔드 코드는 순수 자바스크립트와 한 프레임워크에서 다른 프레임워크로 사용되거나 마이그레이션되는 모든 자바스크립트 프레임워크로만 작성됩니다.

데이터를 효과적으로 표현하는 것은 데이터 시각화에서 중요한 작업 중 하나이며 JavaScript에서 다양한 라이브러리는 작업을 쉽게 수행할 수 있는 오픈 소스입니다.



마이크로 프론트엔드의 이점

매일 새로운 JavaScript 기술이 발명되고 있으며, 이는 빠른 속도로 발전하고 있습니다. 때때로 모든 JavaScript 기술에는 장단점이 있기 때문에 실망스러울 수 있습니다. 그리고 특정 기술을 선택하는 동안 모든 사람은 최대 이점과 최소 위험을 고려합니다. 마이크로 프론트엔드 모범 사례는 다양한 서비스에 다양한 기술을 사용하는 데 도움이 됩니다. 다음은 Micro Frontend의 ​​몇 가지 이점입니다.

  • 지원 코드 및 스타일 격리, 개별 개발 팀은 자신의 기술을 선택할 수 있습니다. 개발 및 배포 속도가 매우 빠릅니다.
  • 지속적인 배포에 도움이 됩니다.
  • 테스트가 매우 간단해지며 모든 작은 변경 사항에 대해 전체 애플리케이션을 만질 필요가 없습니다.
  • 프론트 엔드 혁신 - 새로운 것을 개선하는 것이 더 쉬워집니다.
  • 높은 탄력성과 더 나은 유지 보수.
  • 코드 및 스타일 격리를 지원합니다.


요약 및 마무리

Micro Frontend Architecture에서 코어와 통합이 가능한 한 단순하도록 하십시오. 중요한 문제 중 하나는 UI/UX 원칙을 표준화하는 것입니다. 보편적인 솔루션은 예를 들어 Material Design, Bootstrap 등과 같은 스타일 가이드를 사용하는 것입니다. 팀과의 의사 소통은 모든 것이 원활하게 실행되고 제품을 작업하는 팀의 차이와 충돌을 최소화하는 몇 가지 표준과 규칙을 만드는 열쇠입니다. 이러한 모든 Micro Frontend Architecture 모범 사례는 확장성이라는 한 가지 문제를 해결하는 데 도움이 됩니다. 크게 성장하는 경향이 있는 애플리케이션은 수많은 문제와 충돌을 야기하여 코드를 팀으로 분할하고 올바른 물류를 적용하여 우수한 품질, 기술 동향 및 빠른 솔루션을 전 세계에 제공합니다.
# frontend# micro
© 2021 Createhb21.