npm run build
시에 메모리 부족으로 build를 실패했다.
프리티어의 가장 큰 단점은 RAM이 1G 라는 것인데 그게 뭔 상관일까 ?
- 서버 메모리가 부족해서 빌드하다가 메모리에 과부하가 걸림
-> RAM은 실행중인 픅로그램의 속도와 실행에 관련이 있다.
만약 프로그램이 잡아먹는 RAM이 컴퓨터(우분투 환경)의 RAM 크기를 초과해버린다면 프로그램이 느려지거나, 실행이 안될 수 있다.
그렇다면 해결방법은 ?
프로젝트의 빌드 명령어를 변경해주는 것이다.
예시로 들자면 이런식이다.
before
{...
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
...
}
after
{...
"scripts": {
"start": "react-scripts start",
//"build": "set \"GENERATE_SOURCEMAP=false\" && react-scripts build",// 윈도우
"build" : "GENERATE_SOURCEMAP=false react-scripts build",// 리눅스
"test": "react-scripts test",
"eject": "react-scripts eject"
},
...
}
GENERATE_SOURCEMAP=false
코드를 추가했다.
빌드 후에 빌드 파일에 대한 소스 코드를 확인할 수 있도록 해주는 코드다.
default 값이 true 라서 이를 false로 바꿔준 것.
true면 뭐가 어떻고 false면 뭐가 어떤데 ?
- true 라면 버그가 발생했을 때 빌드파일을 통해 소스 코드를 확인할 수 있기 때문에 어떤 문제가 있는 확인할 수 있다.
- 그렇다는건 디버깅 정보를 포함하여 빌드하기 때문에 빌드 용량이 커지며, 메모리 부족을 초래한다.- false면 빌드 용량이 작아지고 메모리를 덜 사용하게 된다.
이상한 단어가 껴있어서 거부감이 들 수 있지만 메모리 부족 현상이 있을 때 디스크의 램을 끌어와 사용한다는 뜻이다.
aws 공식 문서에도 자세히 설명이 되어 있다. 바로가기
차근차근 따라가보자
sudo dd if=/dev/zero of=/swapfile bs=128M count=16
128씩 16개의 공간을 만드는 것이여서 우리의 경우 count를 16으로 할당하는 것이 좋다. 즉, 2GB정도 차지하는 것이다.
$ sudo chmod 600 /swapfile
$ sudo mkswap /swapfile
$ sudo swapon /swapfile
$ sudo swapon -s
/etc/fstab 파일을 편집하여 부팅 시 스왑 파일을 활성화
편집기에서 파일을 엽니다.
$ sudo vi /etc/fstab
파일 끝에 다음 줄을 새로 추가하고 파일을 저장한 다음 종료
/swapfile swap swap defaults 0 0
다음과 같이 적용됬는지 확인 !
total used free shared buffers cached
Mem: 1009136 941624 67512 4 11696 96836
-/+ buffers/cache: 833092 176044
Swap: 2097148 304972 1792176
이렇게 하면 build
가 되긴 된다. 비록 HDD에 할당하기 때문에, RAM에 비해 속도는 현저히 낮아지지만 가난한 우리에겐 한줄기 빛일 뿐 ㅎ