아래 내용은 문제상황에 대한 충분한 컨텍스트를 반영하여 AI가 작성하였습니다. (현 블로그 AI 활용 작성지침: AI를 사용한 글의 경우 필히 명시) AI를 사용하였음에도, 이와 관련하여 문제를 겪을 분들이 많을 것 같아 해결방안을 정리하였습니다.
문제 상황
Replit 환경에서 pnpm 모노레포 프로젝트를 설정하던 중 다음과 같은 에러가 발생했습니다:
$ pnpm install
ERROR Command was killed with SIGABRT (Aborted): pnpm add pnpm@10.20.0
node[4428]: pthread_create: Resource temporarily unavailable
프로젝트의 package.json에는 다음과 같이 pnpm 버전이 명시되어 있었습니다:
{
"packageManager": "pnpm@10.20.0+sha512..."
}
원인 분석
1. 자동 버전 관리의 메커니즘
pnpm은 package.json의 packageManager 필드를 읽고 자동으로 지정된 버전으로 전환을 시도합니다. 이는 Corepack이 활성화되어 있지 않아도 pnpm 자체에서 수행하는 동작입니다.
2. Replit 환경의 제약
Replit/Nix 환경에는 스레드 생성에 대한 제한이 있습니다. pnpm이 지정된 버전의 바이너리를 다운로드하고 빌드하려 할 때 pthread_create 호출이 실패하면서 SIGABRT 에러가 발생합니다.
3. 문제의 핵심
pnpm 실행
↓
package.json 읽기
↓
packageManager 필드 발견
↓
/home/runner/workspace/.local/share/pnpm/.tools/pnpm/10.20.0/bin에
지정 버전 다운로드 시도
↓
스레드 생성 제한으로 실패 → SIGABRT
시도한 해결책들
시도 1: Corepack 비활성화
$ corepack disable
$ pnpm install
ERROR Failed to switch pnpm to v10.20.0
결과: Corepack을 비활성화해도 pnpm 자체가 버전 관리를 수행하므로 문제가 해결되지 않았습니다.
시도 2: pnpm 재설치
$ npm uninstall -g pnpm
$ rm -rf ~/.local/share/pnpm
$ npm install -g pnpm@10.20.0
$ pnpm install
ERROR Failed to switch pnpm to v10.20.0
결과: 정확한 버전을 설치해도 pnpm이 여전히 자체 버전 관리를 시도했습니다.
시도 3: pnpm config 설정
$ pnpm config set manage-package-manager-versions false
ERROR Failed to switch pnpm to v10.20.0
결과: pnpm 명령어 자체가 실행되기 전에 버전 체크를 수행하므로 설정 변경이 불가능했습니다.
최종 해결 방법
pnpm 명령어를 실행하기 전에 설정 파일을 생성하여 버전 관리를 비활성화해야 합니다:
# 1. 기존 캐시 정리
rm -rf ~/.local/share/pnpm
rm -rf ~/.cache/pnpm
rm -rf ~/workspace/.local/share/pnpm
rm -rf ~/workspace/.cache/pnpm
# 2. pnpm 재설치
npm uninstall -g pnpm
npm install -g pnpm@10.20.0
# 3. .npmrc 파일 생성 (핵심!)
echo "manage-package-manager-versions=false" > .npmrc
# 4. 설치 진행
pnpm install
실행 결과
$ pnpm install
Scope: all 5 workspace projects
Packages: +876
Done in 1m 4.4s using pnpm v10.12.4
성공적으로 설치가 완료되었습니다.
해결 원리
.npmrc 파일에 manage-package-manager-versions=false 설정을 추가하면:
- pnpm이 실행될 때 이 설정 파일을 먼저 읽습니다
- 자동 버전 관리 기능이 비활성화됩니다
- 시스템에 설치된 pnpm 버전(10.20.0)을 그대로 사용합니다
- 버전 전환 시도를 하지 않아 스레드 생성 문제를 우회합니다
주의사항
.npmrc 파일 관리
이 파일은 Replit 환경에만 필요한 설정이므로 .gitignore에 추가하는 것을 권장합니다:
echo ".npmrc" >> .gitignore
CI/CD 환경
- 로컬 개발 환경이나 CI/CD 파이프라인에서는 이 설정이 필요하지 않습니다
- package.json의 packageManager 필드는 그대로 유지하여 다른 환경에서 버전 일관성을 보장할 수 있습니다
버전 불일치 가능성
.npmrc 설정으로 자동 버전 관리를 비활성화하면:
- 수동으로 올바른 버전을 설치해야 합니다
- npm install -g pnpm@10.20.0 명령어로 정확한 버전을 설치했는지 확인이 필요합니다
결론
Replit 환경에서 pnpm의 자동 버전 관리 기능은 환경 제약으로 인해 작동하지 않습니다. .npmrc 파일을 사용하여 버전 관리 기능을 비활성화하고 수동으로 정확한 버전을 설치하는 것이 실용적인 해결책입니다.
이 방식은:
- ✅ Replit 환경의 제약을 우회합니다
- ✅ 프로젝트 코드(package.json)를 수정하지 않습니다
- ✅ 다른 개발 환경에 영향을 주지 않습니다
- ✅ CI/CD 파이프라인의 버전 일관성을 유지합니다
참고 자료
- pnpm 설정 파일: pnpm Configuration
- Corepack: Node.js Corepack
'프로젝트 > 설명' 카테고리의 다른 글
| Nextcloud 셋업 (0) | 2024.02.03 |
|---|---|
| 라즈베리파이 - 리눅스 시스템 구조 (0) | 2021.11.10 |
| 카페24 쇼핑몰 3. 스마트 디자인 이해하기 (1) | 2021.10.22 |
| 카페24 쇼핑몰 2. 개발환경 세팅하기(FTP) (0) | 2021.10.22 |
| 카페24 쇼핑몰 1. 시작하기 (0) | 2021.10.22 |