김핵센
핵센의 개발공부로그
김핵센
전체 방문자
오늘
어제
  • 분류 전체보기 (66)
    • 창업 (1)
    • Flutter (1)
    • Javascript (9)
    • Git 강의 (2)
    • 항해99 (11)
    • 알고리즘 (25)
    • Node.js (11)
    • Network (1)
    • Database (2)
    • AWS (1)
    • Nest.js (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • git
  • 주특기 입문주차
  • 주특기입문주차
  • 알고리즘
  • til
  • 내장 모듈
  • 혼자 공부하는 자바스크립트
  • 크기가 작은 부분문자열
  • Wil
  • 팀과제
  • worker_threads
  • 1주차 마무리
  • searchParams
  • 푸드 파이트 대회
  • 스파르타코딩클럽
  • 내장모듈
  • 항해99
  • 제로초
  • 혼공스
  • JavaScript
  • 프로그래머스
  • 혼자공부하는자바스크립트
  • github
  • 창VOD
  • 주특기주차
  • 가장 가까운 같은 글자
  • 창업 노하우
  • 추억 점수
  • node.js
  • 명예의 전당 (1)

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
김핵센

핵센의 개발공부로그

Node.js 내장 모듈 - child_process
Node.js

Node.js 내장 모듈 - child_process

2023. 5. 15. 16:41

오늘은 Node.js 내장 모듈인 child_process에 대해 알아볼 것이다.

child_process란  외부 프로세스를 생성하고 상호작용할 수 있는 기능을 제공하는 내장 모듈이다.

이 모듈을 사용하면 Node.js 애플리케이션 내에서 다른 프로그램을 실행하고, 그 프로그램과의 표준 입력(stdin), 표준 출력(stdout), 표준 오류(stderr)를 통해 데이터를 주고받을 수 있다.

 

주로 다음과 같은 상황에서 많이 사용한다.

  • 외부 명령어를 실행하고 그 결과를 가져와야 할 때
  • 별도의 프로세스에서 비동기적으로 작업을 수행해야 할 때
  • 다른 Node.js 애플리케이션과 통신하거나 데이터를 공유해야 할 때

child_process는 아래와 같은 기능을 제공한다.

  • exec : 쉘 명령어를 실행하고 그 결과를 버퍼 형태로 반환한다.. 
  • spawn : 새로운 프로세스를 생성하고 입출력 스트림을 통해 상호작용할 수 있다. 
  • fork : 새로운 Node.js 프로세스를 생성하고 부모-자식 간에 통신할 수 있다. 
  • execFile : 외부 프로그램을 실행하고 그 결과를 버퍼 형태로 반환한다.

사용 방법

exec.js

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

const process = exec('dir'); // 현재 경로에 있는 파일을 불러온다.

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

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

터미널 창에 dir이라는 명령어를 치면 현재 경로에 있는 파일을 읽어준다.

Node에서도 위와 같이 dir이라는 명령어를 칠 수 있게 해준다.

 

대신 직접 console.log(data.toString()); 를 통해서 출력해줘야 한다. 

에러가 났을 경우에도 stderr를 통해 console.log로  출력해줘야 한다.

콘솔 결과

저번 글에서 멀티스레드는 다른 언어로 구현하는 것이 좋다고 했었는데 다른 언어로 구현하고 난 뒤 

child_process.spawn을 통해서 Node로 다른 언어를 실행시킬 수 있다.

 

아래 spawn.js는 Node로 python 코드를 실행시키는 예제이다.

 

spawn.js

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

const 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());
}); // 실행 에러

test.py

print('hello python')

대신 python이 설치되어있어야 한다..!(다른 언어도 마찬가지)

Node가 python을 대신 실행시켜주는 것이 아닌 실행시켜달라고 요청하는 것이기 때문이다.

 

child_process 외에 Node.js 내장 모듈은 아래와 같이 여러가지 있다.

좀 더 디테일한 내용들은 공식 문서를 보고 상황에 맞춰서 사용하면 될 것 같다.

  • assert : 값을 비교하여 프로그램이 제대로 동작하는지 테스트하는데 사용
  • dns : 도메인 이름에 대한 IP 주소를 얻어내는데 사용
  • net : HTTP보다 로우 레벨인 TCP나 IPC 통신을 할 때 사용
  • string_decoder : 버퍼 데이터를 문자열로 바꾸는 데 사용
  • tls : TLS와 SSL에 관련된 작업을 할 때 사용
  • tty : 터미널과 관련된 작업을 할 때 사용
  • dgram : UDP와 관련된 작업을 할 때 사용
  • v8 : V8 엔진에 직접 접근할 때 사용
  • vm : 가상 머신에 직접 접근할 때 사용

이상으로 Node.js 내장 모듈에 대해 알아보았다..!

 

 

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

Node.js - 버퍼/스트림 이해하기  (0) 2023.05.17
Node.js 내장 모듈 - fs  (0) 2023.05.16
Node.js 내장 모듈 - worker_threads  (2) 2023.05.12
Node.js 내장 모듈 - util  (0) 2023.05.10
Node.js 내장 모듈 - crypto  (0) 2023.05.06
    'Node.js' 카테고리의 다른 글
    • Node.js - 버퍼/스트림 이해하기
    • Node.js 내장 모듈 - fs
    • Node.js 내장 모듈 - worker_threads
    • Node.js 내장 모듈 - util
    김핵센
    김핵센
    개발 공부 관련 글을 적는 블로그입니다.

    티스토리툴바