Table of Contents
- 연혁
이 문서는 귀하가 웹 사이트를 탐색하는 데 도움이되는 것입니다. 이 문서는 귀하가 웹 사이트를 탐색하는 데 도움이되는 것입니다. 이 문서는 귀하가 웹 사이트를 탐색하는 데 도움이되는 웹 사이트 또는 웹 사이트 또는 웹 사이트 또는 웹 사이트 또는 웹 사이트 또는 웹 사이트와 같은 다른 웹 사이트와 연결됩니다. 이 문서는 귀하가 웹 사이트를 탐색하는 데 도움이되는 웹 사이트 또는 웹 사이트 또는 웹 사이트 또는 웹 사이트와 같은 다른 웹 사이트와 같은 웹 사이트와 같은 웹 사이트 또는 웹 사이트와 같은 웹 사이트 또는 웹 사이트와 같은 웹 사이트와 같은 웹 사이트와 같은 웹 사이트와 같은 다른 웹 사이트와 같은 웹 사이트와 같은 웹 사이트와 같은 웹 사이트와 웹 사이트와 같은 웹 사이트와 웹 사이트와 웹 사이트와 같은 다른 웹 사이트와 같은 다른 웹 사이트와 웹 사이트와 웹 사이트와 웹 사이트와 웹 사이트와 웹 사이트와 웹 사이트와 웹 사이트와 웹 사이트와 웹 사이트와 웹 사이트와 같은 다른 웹 사이트와 웹 사이트와 웹 사이트와 웹 사이트와 웹 사이트와 웹 사이트와 웹 사이트와 웹 사이트와 웹 사이트와 웹 사이트와 웹 사이트와 웹 사이트와 웹 사이트와 웹 사이트와 웹 사이트와 웹 사이트와 웹 사이트와 웹 사이트와 웹 사이트와 웹 사이트와 웹 사이트와
Microfrontends의 싱글턴은 어떻게 다른가요?
단일 페이지 애플리케이션에서 단일 버튼은 종종 글로벌이며 구현하기 쉽습니다. microfrontend 설정에서 각 모듈은 독립적으로 설계되었으며 배포 될 수 있습니다. 동일한 응용 프로그램은 다른 기원에서 여러 microfrontends를로드 할 수 있으며, 각 JavaScript 번들. 이 환경은 모듈이 명시적으로 구성되지 않는 한 메모리 공간을 자연스럽게 공유하지 않기 때문에 고전적인 Singleton 패턴을 보완합니다. microfrontends의 True Singletons는 공유에서 호스팅되어야합니다. - 일반적으로 웹 호스트, 웹 호스트, 웹 호스트, 웹 호스트, 웹 호스트, 웹 호스트, 웹 호스트, 웹 호스트, 웹 호스트, 웹 호스트, 웹 호스트, 웹 호스트, 웹 호스트, 웹 호스트, 웹 호스트, 웹, 웹 호스트, 웹 호스트, 웹, 웹, 웹 호스트, 웹, 웹, 사용자 정의, 웹, 웹, 웹, 웹 호스트, 웹, 웹, 웹, 웹, 웹, 웹, 웹, 웹, 웹, 웹, 웹, 웹, 웹, 웹, 웹, 웹, 웹, 웹, 웹, 웹, 웹, 웹, 웹, 웹, 웹, 웹, 웹, 웹, 웹, 웹, 웹, 웹, 웹, 웹, 웹, 웹, 웹, 웹, 웹, 웹, 웹, 웹
공유 싱글톤의 일반적인 사용 사례는 다음과 같습니다:
- Configuration and feature flags – microfrontends가 행동을 결정하는 단일 객체.
- Authentication token – 사용자의 자격 증명과 만료에 대한 진실의 단일 소스.
- Cross-module 이벤트 버스 – 직접 커플링을 방지하는 술집/sub 메커니즘.
- State Management store – 중앙화점(예: Redux 또는 Zustand) 모듈 공유.
- 지역화 및 국제화 – 단일 로컬 객체와 번역 사전.
제대로 구현할 때, 단일 톤은 일관성을 제공하고 중복 초기화를 감소시킵니다. 잘못되었을 때, 캡슐화가 끊어지는 숨겨진 글로벌이 되고, 밤새를 디버깅합니다.
Singleton 구현을위한 핵심 모범 사례
1. 단위 범위 및 Build-Time 공유를 사용하십시오
Webpack 5의 Module Federation과 같은 현대 빌드 도구는 팀이 공유 된 의존성을 지정할 수 있도록합니다. 공유 모듈과 같은 라이브러리 (단일 서비스와 같은)를 표시함으로써, 쉘은 한 번로드하고 모든 microfrontends에 동일한 인스턴스를 공급할 수 있습니다. 이 접근법은 실행시에 하나의 인스턴스가 존재한다는 것을 보장하면서 글로벌 범위를 오염시킵니다.
예를 들어, 공유 모듈에서 공장 기능을 노출 :
] ]] ]] ]] ]] ] ] ] ] ] ] ] ] ]] ] ]] ]] ] ]
그런 다음 federation 구성에서 공유 한 모듈을 선언합니다. 를 가져올 모든 microfrontends는 실행 시간에 의해 관리 된 동일한 인스턴스를받습니다.
2. 호기성 초기화
애플리케이션로드가 메모리를 낭비할 때 단일 톤을 생성하는 것은 결코 마운트를 사용하지 않는 경우. 게으른 초기화 구현: 첫 번째 요청시 단일 톤을 만들 때 단일 톤을 만들. 이 패턴은 또한 단일 톤이 테스트 설정 중에 재설정 또는 교체 할 수 있기 때문에 간단한 테스트를 만들. 위의 캐싱 변수와 체크 앤 생성 접근을 사용하여, 또는 비동기 초기화에 대한 를 사용합니다 (예 : API에서 묶는 .g.).
3. 글로벌 액세스 제한
모듈 연맹과는, 접근의 용이성을 위해 ]에 싱글턴을 배치하는 것이 임시입니다. 촉구를 촉구하는 글로벌 변수는 naming 충돌을 만들고, 코드를 테스트하기 위해 열심히 만들고, microfrontend 고립의 원리를 위반합니다. 대신, 모듈 가져 오기 또는 의존성 주입을 사용하십시오. 브라우저의 글로벌 범위를 사용해야하는 경우, id(e.g., ) 그리고 문서에 명시되어 있습니다.
4. Lifecycle Explicitly 관리
Microfrontends는 추가, 제거 및 재 시작 동적으로 추가 될 수 있습니다. 사용자가 멀리 탐색하고 돌아갈 때 상태가 stale이 될 수있는 단일 톤. 수명주기 인터페이스를 구현 :
- Initialization – 처음 필요한 경우 게으른 생성.
- Reset – microfrontend unmount 또는 user logout에 트리거된 시퀀스를 삭제하는 방법.
- Disposal – 메모리 누출을 방지하기 위해 Singleton에 의해 개최되는 이벤트 리리스너 또는 타이머.
예를 들어, 인증 싱글톤은 ]]를 노출시켜 사용자 토큰을 삭제하고 가입자를 지정할 수 있는 방법을 노출해야 합니다.
5. 적용 가능한 곳에 실 안전
웹 작업자 또는 SharedArrayBuffer에 의존하는 Microfrontends는 레이스 조건을 보호해야합니다. 주요 스레드의 JavaScript는 단일 스레드이지만, 비동기 코드는 인종 위험을 일으킬 수 있습니다. 약속, 점유 (]]와 같은 라이브러리와), 또는 단일 톤이 빠른 성공에 호출하는 여러 모듈에서 동시 액세스 할 경우 원자 작업. 대부분의 브라우저 응용 프로그램에서 Nodejs 또는 안전에 대한 안전에 대한 문제의 적은입니다. 그러나 Nodejs는 Nodejs 또는 안전에 대한 안전에 대한 문제의 적은입니다.
6. 인프라 Concerns에 단일 톤 제한
모든 공유 리소스는 싱글톤이 필요합니다. 하나를 만들기 전에, 요청: 이 리소스는 정말 단일 인스턴스가 있어야 합니까? 여러 복사 coexist 해가 필요하나요? 단일톤은 애플리케이션 별 상태보다 인프라 수준 문제 (로그, 구성, 라우팅)에 가장 잘 작동할 수 있습니다. 단일톤을 초과하면 모든 microfrontend가 목표에 따라, 독립 배포 가능성에 따라 달라집니다.
일반적인 Pitfalls 및 Them을 방지하는 방법
숨겨진 종점 및 테스트 Difficulty
import를 통해 접근 가능한 단일 톤은 불용성 의존성을 만듭니다. 격리에서 microfrontend를 테스트할 때, 단일 톤의 상태는 테스트 사이에 부채를 수 있습니다. 단일 톤을 모방하여 모방으로 교체할 수 있습니다. 또는 ]를 노출시키면 환경 검사에만 사용되며 환경 검사를 통해 보호할 수 있습니다. 또는 각 microfrontend가 단일 톤을 완전히 제어할 수 있도록 의존성 주입을 사용하십시오.
끊는 단위 고립
Microfrontends는 독립적으로 실패 할 수 있어야한다. 단일 톤 충돌 또는 잘못된 상태를 보유하면 그것에 따라 모든 모듈을 가져올 수 있습니다. 시도 캐치에 단일 톤 액세스를 감싸고, 가을의 동작을 제공합니다. 예를 들어, 구성 싱글 톤이 로드에 실패하면 각 마이크로 프론트엔드가 하드 코딩 된 기본으로 돌아올 수 있습니다.
Load의 밑에 확장성
단일 톤이 중앙화된 버스(예: 글로벌 이벤트 이미터)를 통해 액세스할 때, 고주파 이벤트는 병목을 만들 수 있습니다. 성능 핫스팟이 되는 싱글톤을 방지하기 위해 throttling, debouncing, 또는 작업자 스레드를 사용합니다. CQRS 또는 이벤트 소싱과 같은 패턴을 고려하여 간단한 싱글톤보다는 복잡한 단거리 통신을 위한 것입니다.
버전 Mismatches 에 Shared Dependencies
두 개의 microfrontends가 단일 톤으로 사용되는 동일한 라이브러리의 다른 버전을 필요로한다면, 모듈 연맹은 일반적인 버전으로 업그레이드하거나 업그레이드 할 수 있습니다. 이것은 종종 안전하지만 라이브러리의 API가 변경되면 파손 될 수 있습니다. 핀은 단일 톤의 의존성을 버전 범위에 공유하고 생산 미러링 환경에 철저하게 테스트합니다.
Singleton 패턴에 대한 대안
모든 공유 리소스는 Singleton 패턴을 필요로하지 않습니다. 고전적인 Singleton이 너무 단단하다고 느낄 때 이러한 대안을 Evaluate :
- Context Providers – React microfrontends에서, props를 통해 구성 또는 오스 상태를 전달하는 컨텍스트를 가진 포탄을 감싸고 있습니다. 각 microfrontend는 글로벌에 의존하지 않고 컨텍스트를 소비할 수 있습니다.
- 맞춤 이벤트 및 메시지 전달 - ] 또는 경량 이벤트 버스를 사용합니다. 이 모듈을 분리하고 필요한 경우 여러 인스턴스를 허용한다.
- Scoped Instances와 함께 비동기 저장소를 저장하지만, 경량 브리지를 통해 중요한 상태를 동기화합니다. 이것은 공유 데이터를 가능하게하면서도 ‐module 고립 당 제공합니다.
- Dependency Injection Frameworks] – InversifyJS 또는 사용자 정의 DI 컨테이너와 같은 프레임 워크는 컨테이너 레벨에서 단일 톤 범위를 등록 할 수 있습니다, 이는 포탄 또는 microfrontend subtree에 범위를 가질 수 있습니다.
관련 기사
단일톤 패턴은 적용된 생각을 완전히 할 때 microfrontend 아키텍처에 귀중한 도구입니다. 구성, 인증 및 로깅과 같은 비 휘발성 서비스의 단일 소스를 제공함으로써 탁월합니다. 모듈 기반 공유, 게으른 초기화, 명시적 수명주기 관리 및 제어 된 액세스로 인해 팀은 글로벌 상태 및 단단한 커플링의 함정으로 떨어지지 않고 단일톤의 이점을 다시 옮길 수 있습니다. 항상 독립형 인적 구조에 대한 단일톤에 대한 필요성을 무게는 이러한 패러다임이 유지될 때, 이러한 패러다임을 고려할 수 있습니다.