#Frontend

엔지니어 1명이 레포 170여 개를 pnpm 11로

엔지니어 1명이 레포 170여 개를 pnpm 11로
01

Summary

엔지니어 단 1명이 AI 하네스로 170개 레포지토리를 pnpm 11로 대항해한 비결!

보안 위협 대응부터 AI 검증 하네스 구축까지, 대규모 패키지 매니저 마이그레이션 실전기

npm 생태계 공급망 공격에 대응해 채널팀의 170개가 넘는 레포지토리를 보안이 강화된 pnpm 11로 일괄 전환한 기술 사례입니다. 의존성 스크립트 차단 기능 설정 기법과 함께, AI에게 단순 반복 작업을 맡기고 이를 철저히 검증하는 '하네스(Harness)' 시스템을 구축하여 엔지니어 1명의 생산성을 극대화한 실무 인사이트를 제공합니다.

  • 01npm/yarn 공격으로부터 안전한 pnpm 11의 allowBuilds 및 strictDepBuilds 스크립트 차단 메커니즘 적용
  • 02pnpm import 명령 활용 시 발생하는 버전 재해석, lockfile 호환성 등 4가지 실전 함정 해결법 공유
  • 03AI가 수행한 작업을 실행-채점 AI 분리 및 층별 비교 검증(의존성 버전, 스크립트, 빌드 해시)으로 통제하는 하네스 설계
  • 04작업 세션 인계 자동화를 통해 10개 레포 마이그레이션 소요 시간을 5시간 45분에서 1시간 53분으로 67% 단축

RECOMMENDATION

수많은 레포지토리를 보유한 기술 조직에서 모듈 보안을 강화하고 싶거나, 단순 마이그레이션 업무에 AI 및 교차 검증 파이프라인을 도입해 공수를 극적으로 줄이고 싶은 DevOps/프론트엔드 리드에게 일독을 권합니다.

The Problem

npm 생태계에서 의존성의 install script(preinstall 등)를 통해 자격 증명을 탈취하는 웜 바이러스 공격이 발생했으며, 기존 npm/yarn 및 구버전 pnpm 환경에서는 설치 시 해당 스크립트가 기본 실행되는 보안 취약점이 존재했습니다.

The Solution

install script 기본 실행을 차단하고 허용 목록 기반 제어를 지원하는 pnpm 11로 사내 170여 개 TS/JS 레포지토리를 전환하였으며, AI가 이관 프로세스를 수행하고 기계적 검증 도구(하네스)가 결과를 수층으로 비교·검증하는 파이프라인을 구축했습니다.

The Result

단 1명의 엔지니어가 7주간 다른 업무와 병행하여 총 171개 레포지토리에 대한 pnpm 11 전환 PR 234건을 작성(130건 머지 완료)했으며, 인계 프로세스가 쌓임에 따라 10개 레포지토리 기준 이관 작업 시간이 5시간 45분에서 1시간 53분으로 단축되었습니다.

Trade-off

의존성의 install script 차단 설정은 레포지토리 자체 package.json의 postinstall이나 허용 목록에 이미 등록된 패키지의 오염까지는 막지 못하며, 방어 설정을 비활성화하는 코드 변경에 대비해 주기적인 스캔 스크립트 모니터링이 추가로 요구됩니다.

03

Key Concepts

Concept · 01

strictDepBuilds / allowBuilds

pnpm 10/11에 도입된 보안 설정으로, 외부 패키지가 설치될 때 자동으로 실행되는 빌드/설치 스크립트를 기본적으로 차단하고 명시적으로 승인된 패키지 및 버전만 실행을 허용하는 기능입니다.

  • strictDepBuilds: true 설정을 통해 허용 목록에 없는 스크립트 실행 시 ERR_PNPM_IGNORED_BUILDS 에러로 설치를 중단시켰습니다.
  • allowBuilds에 [email protected]처럼 패키지 명과 버전을 함께 명시하여 패키지 버전 업데이트 시 보안 검증을 재유도하도록 구성했습니다.
Concept · 02

AI 하네스 (AI Harness)

AI가 생성하거나 수행한 작업 결과를 신뢰하기 위해 코드 검증, 결과 대조, 조건 판정 등을 자동화된 기계적 장치로 감싸 AI의 오류가 다음 단계로 전파되지 않도록 막는 시스템 프레임워크입니다.

  • 실행 AI와 채점 AI를 분리하여 실행 주체의 자가 채점 오류를 방지했습니다.
  • 마이그레이션 전후 커밋을 동일 환경에서 설치·빌드하여 의존성 버전, 실행 스크립트, 산출물 해시, 기존 테스트 통과 여부를 층별로 엄격히 비교했습니다.
Concept · 03

pnpm import

기존 package-lock.json이나 yarn.lock 파일 구조를 읽어 pnpm 고유의 pnpm-lock.yaml 파일로 변환해 주는 pnpm 내장 마이그레이션 명령어입니다.

  • 기존 lockfile을 단순 복사하는 것이 아니라 버전을 재해석하므로 전환 전후 의존성 버전 목록 전체를 대조하는 검증 과정을 거쳤습니다.
  • pnpm 8 버전 이하의 v6 lockfile은 pnpm 10이 바로 읽지 못하므로 pnpm 9를 거쳐 v9 형식으로 중간 변환하는 전략을 사용했습니다.