Node.js & MongoDB

자식 프로세스 구현

Node.js 애플리케이션에서 서버의 다중 프로세서를 효율적으로 활용하려면 작업을 자식 프로세스에 분배해야 한다. child_process 모듈을 사용해 자식 프로세스를 생성하거나 다른 프로세스의 작업을 실행할 수 있다.

ChildProcess 객체 이해

child_process 모듈은 ChildProcess라는 새로운 클래스를 제공한다. ChildProcess는 부모에서 접근 가능한 자식 프로세스로 표현된다. ChildProcess를 사용해 자식 프로세스를 실행한 부모 프로세스에서 자식 프로세스를 제어하고, 종료하고, 메시지를 전달할 수 있다.

process 모듈 또한 ChildProcess 객체다. 그렇기 때문에 부모 모듈에서 process에 접근하면 부모 ChildProcess 객체고, 자식 프로세스에서 process에 접근하면 ChildProcess 객체다.

다음은 ChildProcess 객체에서 방출되는 이벤트를 나열한다. 자식 프로세스 종료나 부모에 메시지 전송 시 발생하는 이벤트를 처리하기 위한 핸들러를 구현해야 한다.

  • message, error, exit, close, disconnect

다음은 자식 프로세스에서 호출 가능한 함수 목록을 보여준다. 이 함수들을 사용해 자식 프로세스를 종료하거나 연결 끊기, 메시지 보내기가 가능하다.

  • kill([signal]), send(message, [sendHandle]), disconnect()

다음 코드는 부모 프로세스에서 자식 프로세스로 객체를 전달하는 방법을 보여준다.

child.send({cmd: 'command date'});

다음은 ChildProcess 객체에서 접근 가능한 속성을 나열한다.

  • stdin, stdout, strerr, pid, connected

exec()을 사용해 다른 프로세스의 시스템 명령을 실행

Node.js 프로세스에서 exec() 함수를 사용해 서브셸에서 시스템 명령을 실행한다. exec() 함수는 콘솔 프롬프트에서 실행 가능한 모든 것을 실행할 수 있다. 이 방식은 시스템 환경변수 접근과 같은 콘솔 셸에서의 기능을 사용할 수 있는 장점을 가진다.

exec() 함수의 사용 문법은 아래와 같고, ChildProcess 객체를 반환한다.

child_process.exec(command, [options], callback)

command 전달인자는 서브셸에서 수행될 명령을 지정하는 문자열이다.

execFile()을 사용해 다른 프로세스의 실행 가능 파일을 실행

execFile() 함수는 다른 프로세스의 실행 파일을 실행한다. 실행할 명령이 실행 가능한 바이너리 형태여야만 한다.

execFile() 함수의 문법은 아래와 같고 ChildProcess 객체를 반환한다.

child_process.execFile(file, args, options, callback)

file 전달인자는 실행할 실행 가능 파일의 경로를 지정하는 문자열이다.

spawn()을 사용해 다른 Node.js 객체에서 프로세스를 실행

스폰은 새로운 프로세스와 기존 프로세스간에 stdio, stdout, stderr 파이프를 만든 후 spawn() 함수를 사용해 새로운 프로세스의 파일을 실행한다.

spawn() 함수는 ChildProcess 객체를 반환하고 사용법은 아래와 같다.

child_process.spawn(command, [args], [options])