Node.js 프로젝트의 복잡성을 줄이고, 라이브러리 관리를 효율적으로 할 수 있는 방법이 있을까요? 토스의 사례에서 그 해답을 찾을 수 있습니다. 토스 노드 챕터는 많은 라이브러리를 관리하면서도 그 효율성을 높이기 위해 플러그인 시스템을 도입했습니다. 이 시스템 도입 과정에서 겪은 시행착오와 성공 비결은 어떤 개발 환경에서도 유용하게 적용될 수 있는 인사이트를 제공합니다.
모노레포와 라이브러리 관리의 도전
토스 노드 챕터는 2021년 첫 모노레포(monorepo)를 도입한 이후, 현재 100개가 넘는 라이브러리를 관리하고 있다고 합니다. 이 모노레포들은 각각 서버 라이브러리, 코어 전용 라이브러리, CA 라이브러리 등으로 나뉘어, 성격에 맞게 운영되고 있죠.
그러나 문제는 라이브러리가 늘어남에 따라 배포 파이프라인의 복잡성도 증가했다는 것입니다. 예를 들어, 배포 명령어가 점점 복잡해지면서 관리와 유지보수가 어려워졌습니다. 이로 인해 각 계열사나 레포의 요구사항을 반영하는 작업은 부담이 되었고, 공통 배포 라이브러리의 수정을 필요로 했습니다. 이 문제를 해결하기 위해 도입한 것이 바로 플러그인 시스템이라고 합니다.
플러그인 시스템: 독립적이고 유연한 배포 관리
토스 노드 챕터는 다양한 요구사항을 충족시키기 위해 독립적이고 유연한 시스템이 필요하다고 판단했는데, 그들이 선택한 플러그인 시스템은 이러한 요구사항을 충족시키는 완벽한 솔루션이었습니다.
이 시스템은 공통 배포 라이브러리의 수정 없이도 다양한 요구사항을 쉽게 반영할 수 있게 해줍니다. 플러그인을 통해 각 레포지토리나 계열사의 필요에 맞는 배포 설정을 자유롭게 추가하거나 변경할 수 있게 된 것이죠. 예를 들어, ESLint와 같은 Node.js 생태계의 플러그인 시스템을 참고하여 설계된 이 시스템은 개발자들에게도 높은 만족도를 제공한다고 합니다.
실제 플러그인 사용 사례
토스에서는 다양한 플러그인을 개발하고 사용하고 있습니다. 몇 가지 사례를 들어보겠습니다.
- deploy-plugin-codegen. 명시적으로 export할 컴포넌트를 주석으로 마킹하여 관리하는 플러그인입니다. CI/CD 과정에서 정확한 코드 제너레이션이 실행되었는지 확인할 수 있습니다.
- deploy-plugin-collect-usage. 라이브러리가 어디서, 얼마나, 어떻게 사용되고 있는지 추적하여 관리에 도움을 주는 플러그인입니다. 특히 공공 API의 사용 현황을 수집하여, 라이브러리 수정 시 영향도를 미리 파악할 수 있게 해줍니다.
- deploy-plugin-lightweight. 패키지 메타데이터의 크기를 줄여 배포 속도를 개선하고 다운로드 시간을 줄이는 플러그인입니다.
- deploy-plugin-bump. 워크스페이스 의존성 관리를 위한 플러그인으로, 의존성 버전을 최신 상태로 유지하며 문제를 방지합니다.
이 외에도 다양한 플러그인들이 토스의 배포 파이프라인을 더욱 효율적으로 만들어 주고 있습니다. 각각의 플러그인은 독립적으로 작동하면서도, 전체 시스템과의 호환성을 유지하며 필요한 기능을 추가하는 방식으로 운영되고 있습니다.
토스의 성공 사례에서 배울 점
이러한 사례를 통해 배울 수 있는 점은 기술적 복잡성을 해결하기 위한 도구를 적극적으로 도입하고, 이를 효과적으로 활용하는 것이 중요하다는 것입니다. 특히 대규모 프로젝트에서 발생하는 문제를 해결하기 위해 플러그인 시스템과 같은 유연한 도구를 사용하는 것은 매우 유익합니다.
여러분도 이제 복잡한 배포 파이프라인에서 벗어나, 더 스마트하게 라이브러리를 관리하고 싶지 않으신가요? 토스의 성공 사례에서 영감을 받아, 여러분의 개발 환경을 한 단계 업그레이드해 보시기 바랍니다.
참고 자료: 토스, “Node.js 라이브러리 배포 파이프라인에 플러그인 시스템 도입기”