도메인 주도 설계의 원칙
2가지 청사진으로 사용합니다.
•
명확한 경계를 가진 마이크로 프론트엔드 정의
•
경계를 설정하기 위한 전락 수립
모듈
패키지와 같은 말로, 기능모음 컨테이너 역할을 합니다. 모듈은 도메인의 일부일 뿐이며, 낮은 결합도와 높은 응집력을 가지고 있고, 하나의 문제해결을 위해 단일 유닛을 나타냅니다.
바운디드 콘텍스트
바운디드 콘텍스트는 하위 도메인 기능의 경계를 정의하기 위해 사용합니다. 모듈과 비슷해보이지만, 모듈들의 집합이 바운디드 콘텍스트라고 봐야합니다.
콘텍스트 맵
콘텍스트 맵은 시스템과 관련된 콘텍스트와 관련 연결을 설명하는 도구입니다. 다른 콘텍스트의 객체를 재사용하지 않고, 정의된 변환을 사용하여 도메인별로 객체를 생성해야 합니다.
콘텍스트 맵을 통해 설계 결정하기위해 먼저 자기완비적 도메인을 식별해야 합니다.
자기 완비적:
전략적 도메인 설계 대 전술적 설계
전략적 도메인 설계를 통해 도메인을 식별 및 관련 지식을 갖춥니다. 이는 전체 도메인을 저 작은 도메인으로 세분화할 때 사용합니다.
전술적 설계는 도메인을 구조화하는데 초점을 맞춥니다. 이러한 설계를 프론트엔드 개발자에게 맡길지, 지침을 줄지, 구조를 미리 정의할지 결정할 수있습니다.
관심사 분리(SoC)
기술적 분할과 비즈니스 중심 분할에 대해서 알아볼겁니다.
기술적 분할
기술적 분할은 화면을 보고 웹페이지 구성요소를 그룹화하여 분할합니다. 문제는 마이크로 프론트엔드가 서로 다른 도메인의 일부를 포함하고 있어, 장기적으로 문제가 될 수 있습니다. 이를 해결하기 위해 가장 좋은 방법은 특정 변경사항을 추적해 다른 마이크로 프론트엔드에 문제가 생기는지 확인하는 것입니다.
기능적 분할
기능적으로 애플리케이션을 나눈다면 하나의 화면은 어떤 마이크로 프론트엔드에도 포함될 수 없습니다. 또한 데이터소스간에 연결도 불가능해지고, 정적이게됩니다. 단점으론 너무 추상적이고, 구현하기 어렵다는 점입니다.
기능적 분할의 가장 큰 장점은 자체 격리를 위한 요구사항을 중촉한다는 것입니다. 즉 하나의 마이크로 프론트엔드를 없애도 나머지에 영향이 없습니다.
이젠 크기에 대한 문제가 생기는데 아래와 같은 질문으 ㄹ통해 좀 더 명확하게 할 수 있습니다.
•
모든 마이크로 프론트엔드의 컴포넌트를 동일한 팀이 개발하고 유지하는가?
•
모든 마이크로 프론트엔드의 컴포넌트는 모두 동일한 사용자가 소비하는가?
•
마이크로 프론트엔드의 컴포넌트를 조건부로 숨기거나 비활성화하는가?
•
마이크로 프론트엔드의 컴포넌트가 다른 조합에 더 적합한가?
아키텍터 경계
공유된 기능
마이크로 프론트엔드를 생성할 때 2가지 선택지에서 고민이 생깁니다.
1.
모든 공유 기능과 코드를 공통 라이브러리나 마이크로 프론트엔드에 넣기
2.
아무것도 공유하지 않기
1번은 마이크로 프론트엔드가 문제 영역에만 집중할 수 있지만, 공유된 기능과 결합으로인해 사이드이펙트가 자주 발생할 수 있습니다.
2번의 경우에는 무작정 복제되었을 때 일부에 오류가 생긴것을 인지했을 때 모든 곳을 수정해줘야해서 부담이 생깁니다.
이를 벗어나는 방법으로는
•
핵심 몇가지만 공유하는 1과 2번의 절출안
•
1번을 선택하되 공유 기능을 재정의 할 수 있도록하기
두가지 방법이 있습니다.
공유할 수 있는 기능은 아래와 같은 기능들이 있습니다.
•
인증, 인가
•
권한, 권리
•
피처 플래그
•
기본 사용자 정보
•
네비게이션
•
로깅
적절한 자유도 선택하기
자유도는 3가지 요소를 통해서 결정됩니다.
•
보안 : 마이크로 프론트엔드를 얼마나 신뢰하는가?
◦
샌드박싱 처리해야하는 부분이 어디인지 결정
◦
개발자에겐 DOM API 사용이 제한된다는 것을 의미
•
성능 : 얼마나 재사용해야 하는가?
◦
임의의 값을 가진 마이크로 프론트엔드만 사용하기 (?)
•
팀 구성 : 개발자/팀은 어떻게 구성되는가?
DOM 접근하기
DOM을 통해 접근하는 방법에는 XSS 등의 이슈가 존재하기 때문에 샌드박스화 시켜줘야합니다.
보안을 향상시키는 방법으로 2가지가 있습니다.
•
중간자 공격을 막는 SRI(Subresource Integrity)
◦
자원이 할당된 뒤 다시 합쳐지는 것을 막기
◦
합쳐지면서 공격이 이루어질 수 있음
•
CSP(Content Secruity Policy)
◦
허용되는 항목 정의를 통해 출저 제한
•
웹 워커에만 스크립팅 허용
마이크로 프론트엔드의 범용성
요구사항에서 균형을 잡아줘야하는데, 공유 기능은 마이크로 프론트엔드를 실행하는 시스템의 요구사항을 설정합니다. 또한 보안측면에서도 고려를 해줘야합니다.