JOBKOREA X ALBAMON

알바몬 채팅 서비스 Module Federation 적용기

JOBKO_오동환
jobkorea-tech
Published in
5 min readAug 13, 2024

--

안녕하세요. FE플랫폼팀 오동환 입니다. 👏
이번 글에서는 알바몬에서 채팅 서비스를 Module Federation으로 적용하게된 동기와, 적용하며 겪은 어려움과 적용 시 주의해야 할 점에 대해 설명드리겠습니다.

채팅 서비스.. 어떻게 만들까? 🤔

알바몬 서비스는 4개의 애플리케이션들이 Monorepo로 구성되어 있습니다.
이미 많은 소스코드가 포함되어 있어 비대해진 알바몬 서비스에, 채팅 서비스를 추가하면, 여러 개발자들이 노력해 단축한 빌드타임이 다시 늘어나는 것이 고민되었습니다.

더이상 애플리케이션을 넣을 순 없어…

고민을 거듭하는 중, Module Federation이라는 기능을 접하게 되었고. 개별적으로 빌드/배포가 가능한 장점을 활용하기 위해 채팅서비스를 Module Federation으로 진행하게 되었습니다. 💡

Chat은 Application A의 빌드타임에 영향을 주지 않는다!

Module Federation(MF)이란? 🗂️

Webpack의 Motivation에는 이렇게 적혀있습니다.

여러 개의 개별 빌드가 단일 애플리케이션을 형성해야 합니다. 이러한 개별 빌드는 컨테이너처럼 작동하며, 빌드 간에 서로 코드를 노출하고 소비하여 단일 통합 애플리케이션을 생성할 수 있습니다.

쉽게 생각해서, 작은 기능단위의 애플리케이션 들이 모여 하나의 서비스를 이룬다고 보시면 됩니다.
이 작은 기능의 애플리케이션은 개별 빌드/배포가 가능하며 런타임에 동적으로 로드할 수 있는 장점이 있습니다.

개별 빌드! 개별 배포!

원하는 서비스를 완성시켰지만… 🫠

수면 위를 우아하게 유영하는 백조. 그 이면엔 백조의 발길질… Chat App은 그렇게 만들어졌습니다.
MF를 적용하며 많은 문제를 직면하였고, 그 중 몇가지를 풀어보겠습니다.

첫째, Next 진영에서는 MF를 반대하는 중..

많은 개발자들이 Next에서 MF를 사용하기 위해 모듈을 만들고 있습니다. 또한 지속적으로 Publish 하고 있으며 Weekly Downloads 도 늘어나고 있습니다.

(NPM nextjs-mf 페이지)
위 nextjs-mf npm 페이지에 들어가보면 거의 처음에 마주할 수 있는 글귀는 이것인데요..

While NextFederationPlugin “works”, Next.js is staunchly opposed to the technology and Next is very difficult to support.
“작동”은 한다. Next 측에서는 이 기술을 반대하고 지원하기가 매우 힘들다.

이러한 이유로 개발 중 많은 버그들을 마주했고. GitHub Issues에 직접 글을 올려 Contributor 의 도움을 받아가며 개발을 했습니다.

P.S nextjs-mf 모듈은 Next의 App Router를 지원하지 않는다고 합니다.
(
module federation next support 페이지)

둘째, nextjs-mf가 Config로 들어간 Next Host App 빌드 시, Heap Memory이슈

이 이슈때문에 위에 그려놓은 그림이 망가졌습니다. 전체 빌드타임 감소를 원했지만 Host App에 Module Federation Config가 추가되면서 빌드 시 Heap Out Of Memory가 나와버리는 바람에 설정에서 Heap Size를 늘렸더니 Host App의 빌드 타임이 증가했습니다.

해당 이슈는 Github에 올라와 열띤 토론끝에 패치를 통해 마감되나 싶었으나 다시 등장하여 우리를 괴롭히고 있습니다.
Heap Size를 늘리는것 외에는 개발자들도 아직 방법이 없어보입니다. 🫢
(nextjs-mf heap size issues github 페이지)

Next + Module Federation은 시기상조?

Next에서 MF를 반대한다고 하니 Next를 사용하여 개발하시는 분들은 MF의 도입을 다시한번 고려해보셔야 할 것 같습니다.

Heap Size를 늘려서 손해본 빌드타임은, Monorepo에 새로 개발했을 때 늘어날 빌드타임보다 큰 것 같습니다.

현재 알바몬 채팅 서비스는 이러한 이슈들을 해결하기 위해 채팅 서비스를 NPM Package로 만들어볼지, 채팅 기능을 제공하는 SDK를 만들어볼지, 기존 알바몬 Monorepo 구조에 병합시킬지 등 많은 방법들을 고민하며 개선을 위해 노력하고 있습니다.

더 나아질 알바몬 채팅 서비스의 행보에 많은 관심 부탁드립니다!

--

--