토스뱅크, 내부 패키지 관리 방식 변경: ESM 전용으로 전환
핵심 내용
Node.js 22.12.0부터 require(esm) 지원으로 CJS 호환성 문제 해결 및 관리 부담 감소
자세히 보기
토스뱅크 기술그룹이 사내 패키지 관리 방식을 Dual package(ESM/CJS 동시 지원)에서 ESM-only로 전환했다고 밝혔다. 기존 방식은 두 형식의 빌드와 타입 연결을 모두 관리해야 하는 복잡성과 Dual package hazard 위험이 있었다.
Dual package의 문제점
ESM과 CJS로 각각 빌드된 패키지는 모듈 시스템에 따라 서로 다른 구현을 로드할 수 있다. 이 경우 React 컨텍스트나 모듈 내부 캐시 등 공유 상태가 분리되어, Provider로 감쌌음에도 Hook에서 값을 찾지 못하는 오류가 발생할 수 있다. 또한 TypeScript 설정에 따라 타입 파일 연결 경로가 달라져, 타입을 찾지 못해 any로 처리되는 등 타입 안전성이 저하될 위험도 있다.
ESM-only 전환 배경
과거 Node.js에서는 CJS의 require()로 ESM을 불러올 수 없었으나, Node.js 22.12.0부터 별도 플래그 없이 require(esm)이 지원되면서 상황이 바뀌었다. 토스뱅크는 사내 패키지라는 예측 가능한 환경에서 사용처를 파악하고 지원 환경을 조정할 수 있었으며, JavaScript 표준 모듈 시스템인 ESM을 채택해 트리 셰이킹 이점과 관리 단순화를 확보했다.
전환 효과 및 향후 계획
ESM-only 전환으로 개발자는 두 구현의 코드와 타입을 동시에 관리해야 하는 부담을 덜었고, 사용자 역시 로드된 구현을 추적하는 디버깅 복잡성이 줄었다. 토스뱅크는 이번 전환을 포함해 패키지 개발 기준을 정비했으며, 다음 글에서는 타입 및 원본 소스 제공 방식과 빌드 구성에 대한 상세 내용을 소개할 예정이다.
이 한국어 요약은 AI가 자동으로 만들었습니다. 원문의 주장과 맥락은 원문에서 확인해 주세요. 저작권은 원저작자에게 있습니다.