콘텐츠로 건너뛰기

클라우드 서버에서 발생하는 React 빌드 오류 해결 방법 ( SIGKILL )

React 앱을 개발한 후 배포를 위해 클라우드 서버에서 빌드를 진행해야 합니다. 이 때 로컬 개발 환경에서는 빌드가 잘 되는데 클라우드 서버에서 다음과 같은 React 빌드 오류가 발생하는 경우가 있습니다.

Creating an optimized production build...
/var/www/web/node_modules/react-scripts/scripts/build.js:19
  throw err;
  ^

RpcIpcMessagePortClosedError: Process 33108 exited [SIGKILL].
    at /var/www/web/node_modules/fork-ts-checker-webpack-plugin/lib/rpc/rpc-ipc/RpcIpcMessagePort.js:19:23
    at Generator.next (<anonymous>)
    at /var/www/web/node_modules/fork-ts-checker-webpack-plugin/lib/rpc/rpc-ipc/RpcIpcMessagePort.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/var/www/web/node_modules/fork-ts-checker-webpack-plugin/lib/rpc/rpc-ipc/RpcIpcMessagePort.js:4:12)
    at ChildProcess.handleExit (/var/www/web/node_modules/fork-ts-checker-webpack-plugin/lib/rpc/rpc-ipc/RpcIpcMessagePort.js:18:42)
    at ChildProcess.emit (node:events:518:28)
    at ChildProcess._handle.onexit (node:internal/child_process:293:12) {
  code: null,
  signal: 'SIGKILL'
}

이 오류 메시지의 핵심은 SIGKILL 신호입니다. SIGKILL은 시스템이 프로세스를 강제로 종료할 때 발생하는 신호로, 다양한 원인이 있지만 위 상황에서는 주로 리소스 부족으로 인해 발생합니다. 클라우드 환경은 로컬 개발 환경에 비해 제한된 리소스를 사용하는데 이로 인하여 발생하는 경우가 많습니다.

React 빌드 오류 원인 분석

오류 메시지에서 fork-ts-checker-webpack-plugin/.../RpcIpcMessagePort.js:19:23 부분에 에러가 발생한 것을 볼 수 있습니다. 이러한 이유 때문에 fork-ts-checker-webpack-plugin 문제로 보고 설치 버전을 변경하거나 설정을 수정하는 경우가 많습니다. 하지만 실제로 해당 코드에서 문제가 발생하는 것이 아니라 프로세스가 비정상 종료되어 발생하는 문제입니다.

해당 위치의 코드는 아래와 같은데 프로세스가 종료될 때 실행되며, 오류를 처리하고 있는 코드입니다.

const handleExit = (code, signal) => __awaiter(this, void 0, void 0, function* () {
    closedError = new RpcIpcMessagePortClosedError_1.RpcIpcMessagePortClosedError(code
        ? `Process ${process.pid} exited with code "${code}" [${signal}]`
        : `Process ${process.pid} exited [${signal}].`, code, signal);
    errorListeners.forEach((listener) => {
        if (closedError) {
            listener(closedError);
        }
    });
    yield port.close();
});

해결 방법

이 문제를 해결하기 위해 다음과 같은 방법을 고려해볼 수 있습니다.

  1. 서버 메모리 증가: 클라우드 서버의 메모리가 부족해서 빌드 프로세스가 종료되었을 가능성이 큽니다. 따라서 서버의 메모리를 늘려서 빌드하는 것이 가장 직관적인 해결책입니다
  2. Docker 리소스 설정: Docker 환경에서 빌드를 진행 중이라면, Docker에 할당된 메모리와 CPU 자원을 충분히 확보해야 합니다. Docker의 기본 리소스 설정이 낮게 설정되어 있을 경우, 빌드 도중 메모리 부족으로 프로세스가 종료될 수 있습니다.
  3. 스왑 메모리 설정: 클라우드 서버에서 물리 메모리가 부족할 경우 스왑 메모리를 설정하여 메모리 부족 문제를 완화할 수 있습니다. 다만 스왑은 성능이 떨어질 수 있으므로 가능한 한 물리 메모리를 확보하는 것이 좋습니다.

결론

이 오류는 클라우드 서버의 리소스가 부족할 때 발생하는 경우가 많습니다. 문제 해결을 위해서는 서버의 메모리를 늘리거나, Docker 리소스를 조정하는 등의 방법을 통해 해결할 수 있습니다. 로컬 환경에서는 잘 동작하지만 클라우드 환경에서 문제가 발생한다면, 리소스 제한이 원인일 가능성을 항상 염두에 두어야 합니다.

참고 자료

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

목차 보기