본문 바로가기
푸닥거리

react project create error in aws

by ┌(  ̄∇ ̄)┘™ 2022. 5. 10.
728x90

AWS EC2의 프리 티어(t2.micro 등) 같은 저사양 인스턴스에서 create-react-app을 실행하면, 패키지 설치 중 다음과 같은 오류로 중단되는 경우가 있습니다.

npm ERR! code ENOMEM
npm ERR! syscall spawn
npm ERR! errno -12
npm ERR! spawn ENOMEM

설치가 Aborting installation과 함께 실패하고, 생성 중이던 node_modulespackage.json까지 삭제됩니다.

원인 — 메모리 부족

ENOMEM = Out of Memory입니다. create-react-app은 많은 패키지를 동시에 설치하며 상당한 메모리를 쓰는데, t2.micro(RAM 1GB)처럼 메모리가 작은 인스턴스는 이를 감당하지 못하고 프로세스 생성(spawn) 시점에 메모리가 바닥납니다. 현재 메모리 상황은 이렇게 확인합니다.

free -m

해결 — 스왑(Swap) 메모리 추가

물리 메모리를 늘릴 수 없다면, 디스크의 일부를 가상 메모리로 쓰는 스왑 파일을 만들어 메모리 부족을 보완합니다.

# 1) 4GB 스왑 파일 생성
sudo fallocate -l 4G /swapfile

# 2) 소유자만 접근 가능하도록 권한 설정 (보안)
sudo chmod 600 /swapfile

# 3) 스왑 영역으로 포맷
sudo mkswap /swapfile

# 4) 스왑 활성화
sudo swapon /swapfile

# 5) 재부팅 후에도 유지되도록 fstab에 등록
echo "/swapfile none swap sw 0 0" | sudo tee -a /etc/fstab

free -m으로 스왑이 잡힌 것을 확인한 뒤 다시 create-react-app을 실행하면 정상적으로 설치됩니다.

참고

  • 따옴표 주의 — fstab 등록 시 스마트 따옴표(“ ”)가 아니라 반드시 일반 따옴표(" ")를 써야 합니다. 복사-붙여넣기 시 흔한 실수입니다.
  • 스왑은 임시방편 — 스왑은 디스크라 RAM보다 훨씬 느립니다. 빌드는 되지만 근본적으로는 인스턴스 사양을 올리는 것이 낫습니다.
  • 대안 — 설치만 로컬/고사양에서 하고 결과물을 배포하거나, npm install --no-optional로 부담을 줄이는 방법도 있습니다.
  • 같은 원리로 이 스왑 설정은 메모리 부족으로 죽는 모든 빌드·컴파일 작업(webpack, Java, C++ 등)에 두루 적용됩니다.
 

Node.js catch ENOMEM error thrown after spawn

My Node.js script crashes because of a thrown ENOMEM (Out of memory) errnoException when using spawn. The error: child_process.js:935 throw errnoException(process._errno, 'spawn'); ^ Err...

stackoverflow.com

728x90

댓글