2 minute read

08_Node.js Sync-Async-Callback

  • Node.js - 동기와 비동기 그리고 콜백

synchronous & asynchronous
동기 & 비동기

node.js 공식 홈페이지 - 문서 - API - File System (fs 라고도 한다)

Sync가 붙어있는 것과 그렇지 않은 함수가 있다.
sync가 붙지 않은 것에 callback 함수가 포함됨.

fs.readFile(path[, options], callback) Asynchronously reads the entire contents of a file.

fs.readFileSync(path[, options]) Returns the contents of the path.
path <string> | <Buffer> | <URL> | <integer> filename or file descriptor

sync.js 의 readFile 과 readFileSync 비교하기.

  • readFileSync(‘’, ‘’) 예제. 첫 번째 인자에는 읽고자 하는 파일 이름.

    console.log('A');
    var result = fs.readFileSync('data/sample.txt', 'utf8');
    console.log(result); //sample.txt의 결과
    console.log('C');
    //결과 AB C
    

readFileSync는 return 값을 주지만 readFile은 return 값이 아니다.
함수를 세 번째 인자 값으로 주고, node.js가 파일 읽는 작업을 끝내면 함수를 실행시킨다.
첫 번째 인자에는 error, 두번째 파라미터에는 파일의 내용을 인자로써 공급한다

Sync : 동기적인 방식으로 처리하는 명렁어.
Sync 없으면 비동기적. nodejs는 비동기적 처리를 선호한다.

  • readFile 예제. Sync가 붙지 않았다.

    console.log('A');
    fs.readFile('data/sample.txt', 'utf8', function(err, result){
      console.log(result);
    });
    console.log('C');
    //결과 A C B
    

readFile의 결과를 가져오기도 전에 C를 바로 가져오고 함수의 결과를 실행한다.
동기와 비동기의 차이.
nodejs의 성능을 내려면 반드시 비동기 방식으로 작업해야한다.

  • Java Script - callback

callback 이란 파일을 읽게하고 나중에 함수를 실행시키는 것.
nodejs 의 readfile 기능으로 파일을 읽고, 전달한 함수를 실행시킨다.
nodejs는 파일을 읽고 작업이 끝난 뒤에 세 번째 인자인 함수function를 실행시킨다.

  • Node.js의 패키지 매니저와 PM2

패키지란 소프트웨어를 부르는 방식 중 하나이다.
패키지 매니저란 그 소프트웨어를 관리(생성, 설치, 업데이트, 삭제)하는 프로그램.

NPM은 nodejs에서 많이 사용하는 패키지 매니저로, nodejs 설치하면 함께 설치된다.

패키지 매니저 PM2는 실행중인 프로그램(프로세스)를 관리해준다.

.js 파일을 수정하면 nodejs를 다시 껐다 켜야하는데, PM2는 파일이 수정되는지 확인하고
자동을 프로그램을 다시 껐다 켜준다.

npm을 이용해 PM2를 설치하기.
많은 nodejs로 만들어진 프로그램은 npm을 통해 인터넷으로 쉽게 설치할 수 있다.

  • pm2 설치

    npm install pm2 -g
    //install 은 설치
    

-g 은 독립된 소프트웨어로, 컴퓨터 어디에서든 사용할 수 있다.

sudo npm install pm2 -g //리눅스 계열
//에러가 뜨면 관리자 권한으로 설치한다.

pm2 실행
pm2 start app.js
pm2 start main.js

status가 online이면 실행중이라는 뜻이다.

현재 실행중 인 프로그램이 보인다.

pm2 monit

실행중인 프로그램을 강제로 종료하면 monit에서 다시 시작시키는 걸 확인 할 수 있다.

프로세스 종료

pm2 stop [id]
//pm2 stop main (main.js)
pm2 kill

status 가 stopped 로 변경된다

현재 실행중인 프로세스 리스트 확인

pm2 list

pm2가 소스코드를 변경됐을 때 자동으로 nodejs를 껐다 켜준다.
더이상 ctrl+c 로 종료했다가 node.js를 다시 켜지 않아도 됨.

pm2 start main.js --watch

–watch 옵션을 꼭 붙여야 한다.
.js 파일을 수정하고 새로고침만 해도 변경 사항을 확인 할 수 있다.

node main.js 로 코드를 실행할 때 에러나 문제점이 생긴다면 화면에 보여진다.
하지만 재시작하는 명령어 없이 바로 코드가 실행될 때,

pm2 log

명령을 입력하면 변경사항이나 에러사항을 보여준다.