YouTube Shorts 자동화

ESM 전환 — 모노레포 의존성 정리

이번 작업은 기능 추가가 아니라 프로젝트 기반을 정리하는 chore 성격의 커밋들이다.

ESM 전환

apps/api, apps/workers/*, packages/shared 등 모노레포 내 모든 패키지의 package.json"type": "module"을 추가했다. 지금까지 CommonJS 방식으로 운영되고 있었는데, 의존성 중 ESM-only 패키지들이 늘어나면서 더 이상 미루기 어려운 상황이었다.

// 각 패키지의 package.json
{
  "type": "module"
}

apps/api/tsconfig.dev.json도 함께 정리했다. 기존에는 module, moduleResolution 같은 CommonJS 관련 컴파일러 옵션을 직접 명시하고 있었는데, 베이스 설정을 상속하는 방식으로 단순화했다. packages/shared의 exports도 단일 진입점으로 정리해서 외부에서 임포트할 때 경로가 명확해졌다.

미사용 의존성 및 파일 정리

ESM 전환과 별도로, 쌓여있던 불필요한 항목들을 한 번에 정리했다.

  • apps/web에서 @dnd-kit/core, @dnd-kit/sortable 제거 — 실제로 사용하는 곳이 없었다.
  • 루트 package.json에서 zod 제거 — 각 workspace가 자체적으로 zod를 들고 있어서 루트에 둘 이유가 없었다.
  • .changeset/ 디렉터리, scripts/dev/seed.ts, localstack 중복 파일 제거

한 가지 실수가 있었다. recharts도 미사용으로 판단해서 제거했는데, ChannelClient.tsx에서 실제로 사용 중이었다. 이후 커밋에서 바로 복구했다(^3.8.1 재추가).

faster-whisper 코드 제거

자막 처리 방식이 스크립트 기반 SRT 변환으로 바뀌면서, 기존에 사용하던 faster-whisper 기반 파일들을 정리했다.

  • apps/workers/subtitle/src/transcriber.py
  • scripts/tools/transcribe.py
  • scripts/tools/test-whisper.ts

세 파일 모두 더 이상 호출하는 곳이 없었고, Python 환경 의존성도 줄일 수 있어서 제거했다.

기능 개발보다 눈에 잘 안 띄는 작업이지만, 의존성 그래프가 깔끔해지고 빌드 설정이 일관성을 갖게 됐다. 이런 정리가 쌓여야 나중에 새 기능 붙일 때 발목이 안 잡힌다.