
번들링과 문법 변환을 호스트에 위임하고 declaration sourcemap으로 디버깅 경험을 혁신한 노하우
토스뱅크 기술그룹에서 프론트엔드 패키지 개발 환경을 개선하며 수립한 '안정성, 예측 가능성, 디버깅 편의성' 중심의 3가지 패키지 배포 표준을 소개합니다. 패키지 단에서 미리 번들링 및 하위 호환 변환을 수행할 때 발생하는 Next.js App Router 지시문 문제나 코드 비대화 문제를 지적하며, 원본 구조를 유지한 채 호스트에 변환을 위임하는 명쾌한 구조적 해법을 제시합니다.
모노레포 환경에서 공통 라이브러리를 운영 중이거나 Next.js App Router 도입 후 패키지 번들링 및 디버깅 이슈로 고통받는 프론트엔드 개발자에게 강력히 추천합니다.
패키지 사용처(호스트)에서 패키지의 브라우저 지원 범위 및 API 실행 환경 제공 여부를 별도로 확인해야 했고, 호스트에서 패키지의 원본 소스 코드를 디버깅하기 어려웠습니다.
패키지 빌드 시 과도한 문법 변환과 사전 번들링을 피하고 원본 모듈 구조를 유지해 배포하며, 문법 변환과 최종 번들링은 호스트에 위임하고 Declaration Sourcemap을 제공하여 디버깅 편의성을 극대화했습니다.
안정성, 예측 가능성, 디버깅 편의성이라는 3가지 기준을 정립하여 패키지 제공자와 사용자의 역할을 명확히 분리하고, 빌드 도구 및 설정 결정에 일관된 판단 기준을 마련했습니다.
Trade-off
패키지 빌드는 단순화되지만 최종 번들링 및 트랜스파일링 부담이 호스트 앱으로 이동하며, 패키지 개발 단계에서 호스트의 API 및 문법 지원 여부를 엄격히 검증하는 추가적인 관리가 요구됩니다.
타입 선언 파일(.d.ts)의 각 선언을 원본 TypeScript 소스 코드의 실제 위치와 연결해 주는 소스맵 파일입니다.
패키지 자체에서 구형 타겟으로 문법을 사전 변환하지 않고, 최신 문법을 유지하여 배포한 후 호스트 앱의 빌드 시점에 타겟에 맞게 변환하는 기법입니다.
라이브러리 빌드 시 여러 소스 파일을 하나의 번들 파일로 합치지 않고 원본 파일 구조와 경계를 그대로 유지하며 배포하는 방식입니다.




