상세 컨텐츠

본문 제목

Node 내장 모듈 03

Node.json

by simstealer 2022. 9. 14. 11:54

본문

1. Worker_threads

- 노드에서의 멀티 스레드 방식

// Worker는 독립적인 자바스크립트의 실행 스레드
// parentPort는 메시지포트의 인스턴스
// isMainThread는 현재 코드가 메인 스레드인지 워커 스레드인지 구분
const { Worker, isMainThread, parentPort } = require('worker_threads');


if (isMainThread) // 메인 스레드 일때
{
  const worker = new Worker(__filename); // __filename 파일을 워커 스레드에서 실행 시킴
  // 다른 스레드 간 메세지를 주고 받을 때 사용합니다.
  worker.on('message', message => console.log('from worker', message));
  worker.on('exit', () => console.log('worker exit'));
  // parentPort.postMessage를 통해 보내는 메세지는 worker.on를 사용한 부모스레드에서 사용가능
  // worker.postMessage를 사용한 부모 스레드로부터 보내진 메세지는 parentPort.on를 사용한 스레드에서 사용가능
  worker.postMessage('ping'); // 부모에서 워커로 메세지를 보낸다.
} 
else // 워커 스레드
{ // 위에서 생성한 worker는 여기서 동작한다
  parentPort.on('message', (value) => // 부모로 부터 메세지를 받는다.
  {
    console.log('from parent', value);
    parentPort.postMessage('pong'); // 부모에게 메세지를 보낸다.
    parentPort.close();
  });
}

2. child_process

- 노드에서 다른 프로그램을 실행하고 싶거나 명령어를 수행하고 싶을 때 사용하는 모듈입니다.

- 다른 언어의 프로그램을 실행하고 결과값을 받을 수 있습니다.

- 새로운 프로세스를 띄워서 실행합니다.

// exec

const exec = require('child_process').exec;

var process = exec('dir');

process.stdout.on('data', function(data) 
{
  console.log(data.toString());
}); // 실행 결과 : 현재 경로의 파일 목록 표시

process.stderr.on('data', function(data) 
{
  console.error(data.toString());
}); // 실행 에러
// spawn

const spawn = require('child_process').spawn;

// 첫번째 인수는 명령어, 두번째 인수는 파일
var process = spawn('python', ['test.py']);

process.stdout.on('data', function(data) 
{
  console.log(data.toString());
}); // 실행 결과

process.stderr.on('data', function(data) 
{
  console.error(data.toString());
}); // 실행 에러

- exec : 쉘을 실행시켜 명령을 실행

- spawn : 새로운 프로세스를 띄워 실행, 세번째 인수로 { shell : true } 를 쓰면 쉘로 실행가능

 

그 외 모듈들

○ assert : 값을 비교하여 프로그램이 제대로 동작하는지 테스트하는데 사용

○ dns : 도메인 이름에 대한 IP주소를 얻어내는데 사용

○ net : TCP, IPC통신을 할때 사용

○ string_decoder : 버퍼 데이터를 문자열로 바꾸는 데 사용

○ tls : TLS와 SSL 관련된 작업할 때 사용

○ tty : 터미널과 관련된 작업할 때 사용

○ dgram : UDP와 관련된 작업을 할때 사용

○ v8 : V8엔진에 직접 접근할때 사용

○ vm : 가상 머신에 접근할떄 사용

'Node.json' 카테고리의 다른 글

동기 / 비동기  (0) 2022.09.14
파일 시스템 접근(fs)  (0) 2022.09.14
Node 내장 모듈 02  (0) 2022.09.14
Node 내장 모듈 01  (0) 2022.09.13
[JavaScript] process.nextTick  (0) 2022.09.13

관련글 더보기

댓글 영역