iframe의 세션 한계와 지옥 같은 중복 개발을 원샷으로 지워버린 마이크로 프론트엔드 구축 가이드
올리브영 카탈로그 팀이 이기종 프레임워크 환경에서도 단 하나의 소스 코드로 공통 화면을 동기화할 수 있는 영리한 아키텍처를 선보입니다. 무거운 시스템 통합 없이 웹 표준인 '웹 컴포넌트'와 모노레포를 사용해, 부모 시스템의 세션 자원을 완벽하게 공유하면서 화면 단위 배포 효율성까지 확보한 비법을 상세히 정리했습니다.
여러 종류의 레거시와 모던 웹 프레임워크를 동시 운영하며 중복 UI 개발에 지친 시니어 리드나, iframe 대신 유연하고 강력한 격리 기능을 원하는 백오피스 설계자에게 적극 추천합니다.
서로 다른 프레임워크(React, Vue, JSP)로 구축된 여러 백오피스 시스템에 동일한 기능의 화면을 중복으로 개발해야 하는 비효율이 존재했습니다. 기존 iframe 방식은 로그인 세션 공유 불가능 등의 한계가 있었고, 단일 프레임워크로의 전체 마이그레이션은 막대한 리소스 소모와 리스크를 동반했습니다.
Vue 3의 `defineCustomElement`를 활용하여 프레임워크에 구애받지 않고 빌드 및 서빙 가능한 표준 웹 컴포넌트를 설계했습니다. 소스 코드는 단일 모노레포에서 통합 관리하며, 빌드된 파일은 S3와 CDN을 통해 정적 자원으로 배포하여 각 시스템에서 커스텀 태그만으로 렌더링할 수 있게 조치했습니다.
한 벌의 코드로 여러 이기종 시스템에 공통 화면을 빠르게 구축하고 중복 코드를 방지하여 유지보수 효율을 극대화했습니다. 실제 가동되는 로그인 세션 및 전역 리소스를 부모 창과 온전히 공유할 수 있어, iframe의 UX 저해 요인을 극복한 것으로 보입니다.
Trade-off
웹 컴포넌트 도입을 위한 모노레포 설계 및 신규 빌드 파이프라인 구축 등에 초기 개발 환경 비용이 들어갑니다. 또한, Shadow DOM 사용으로 인해 스타일 캡슐화 문제가 발생할 수 있으며 이를 해결하기 위한 리액트 커스텀 훅 등의 정교한 구현 처리가 요구됩니다.
웹 표준 기술로서 브라우저가 자체적으로 커스텀 태그를 해석하고 실행할 수 있도록 캡슐화된 기능을 제공하는 API 모음입니다.
여러 개의 프로젝트나 패키지를 하나의 저장소(Repository)에서 통합적으로 관리하며 공통 요소를 효율적으로 공유하는 아키텍처 패턴입니다.
브라우저가 제공하는 표준 기술로, 특정 요소의 DOM 구조와 스타일링을 전역 DOM 스타일과 완전히 격리하는 캡슐화 메커니즘입니다.