본 내용은 해당 강의 토대로 작성
Synchronous & Asynchronous
업무를 진행할 때, 보통은 순차적으로 일을 한다. 하나의 일을 끝나면 하나의 일을 착수하는 식으로. 이러한 것을 Synchronous(동기적)이라고 한다. 반면, 어떤일을 누군가에게 시켜놓고 바로 다음일을 처리한다. 이렇게 동시에 일을 처리함에따라 훨씬 효율적으로 일을 진행할 수 있다. 이를 Asynchronous(비동기적)이라고 한다. 아래의 표와 그림을 보면 이해가 잘 될 것이다.
동기적 | 비동기적 |
---|---|
순차적인 실행 | 병렬적인 실행 |
Node.js는 명령어를 비동기적으로 처리할 수 있다.
구체적인 예시
두 명령어의 출력을 비교해서 동기와 비동기는 어떤 차이가 있는지 알아보자.
console.log('A');
var result = fs.readFileSync('syntax/sample.txt','utf8');
console.log(result);
console.log(‘C’);
fs.readFileSync
는 명령을 동기적으로 처리한다는 의미이다. 콘솔에서 출력은 아래와 같이나온다.
입력한 순서대로 A,B,C가 나온다.
console.log('A');
fs.readFile('syntax/sample.txt','utf8',function(err, result){
console.log(result);
});
console.log('C');
fs.readFile
은 명령을 비동기적으로 처리한다는 의미이다. 여기서, 변수선언 var
를 삭제하였는데 그 이유는 sync
는 리턴값을 줘서 변수를 적용할 수 있지만, 비동기적인 명령어는 그렇지 않다. 그리고 함수를 인자로 주는데 이 함수의 1번 인자는 err
이다. 2번 인자는 파일의 내용을 해당 인자에 넣도록 함이다. 이 명령의 출력은 아래와 같다.
이렇게 출력이 A,C,B인 이유는 처음 명령이 실행 되고 다음이 실행되는데, 그와 동시에 세 번째 명령이 실행되고 먼저 처리가 되기 때문이다. 즉, 비동기적인 명령어 수행으로 인해 위와 같이 나온다.
Callback
위의 비동기 명령어를 분석해보자.
fs.readFile('syntax/sample.txt','utf8',function(err, result){
console.log(result);
});
이 명령어는 Node.js에게 readFile기능을 이용해서 해당 파일을 읽어오라고 시킨다. 그리고 그 작업이 끝난 다음에 함수를 실행을 명령한다. 이렇게 나중에 실행시키는 것을 Callback 이라고 한다.
var a = function(){
console.log('A');
}
function slowfunc(callback){
callback();
}
slowfunc(a)
변수 a에 문자'A'를 콘솔 출력하라는 명령어가 입력되어 있다. 그리고 slowfunc라는 함수는 callback이라는 인자에 callbakc()
함수를 실행한다. 마지막에, slowfuc(a)
는 callback인자에 함수 a가 들어가므로 콘솔창에서 이를 실행하면, 아래처럼 출력이 된다.
Package manager와 PM2
Package란, 독립적으로 실행되거나 프로그램 안에서 부품으로 사용되는 것이다. 그리고 그런 것을관리하는 것을 Packgae manager라고 한다. 이 Package manager는 컴퓨터 언어, 운영체제들 각각에 중요한 역할을 한다. Node.js에서 제일 광범위 하게 사용되는 Package manager는 NPM이다. 이제 NPM을 통해서 PM2라는 Package를 설치해서 이용해 본다.
npm install pm2 -g
터미널에 위 명령어를 입력해서 실행한다. 여기서 -g
는 컴퓨터 어디서든지 사용할 수 있다는 의미이다. 만약, error가 발생해서 설치가 안 된다면, 명령어 앞에 관리자 권한인 sudo
를 붙이면 잘 될 것이다.
PM2가 정상적으로 설치 되었다면, 이제 PM2 명령어를 터미널에서 사용할 수 있다. 아래에 PM2 명령어를 정리하였다.
1. 실행
pm2 start main.js
입력시 파일을 실행하고 이름과 상태들을 보여준다.
2. 상태 조회
pm2 monit
실행되고 있는 파일의 상태를 시각적으로 보여준다.
3. 프로세스 리스트
pm2 list
4. 프로세스 종료
pm2 stop main.js
5. 파일 감시
pm2 start main.js--watch
파일이 수정될 때 자동으로 종료,실행하여 실시간 적용한다.
6. 로그 조회
pm2 log
느낀점
Node.js의 Package를 배울 수 있었다. 이 수업에서 엄청난 이득을 보았는데, 예전에 블로그에 Markdown형식으로 글을 올릴려다가 당시 내 지식의 한계로 실패했던 경험이 있다. 그러나, 오늘 배우고 난 뒤에 티스토리 Markdown 연동 Package를 설치할 수 있었고 그 결과, 이렇게 올릴 수 있게 되었다. 이게 바로 배움의 기쁨이구나!
'programming study > Node.js' 카테고리의 다른 글
[생활코딩]WEB2-Node.js (7)(2020.12.22) (0) | 2020.12.22 |
---|---|
[생활코딩]WEB2-Node.js (6)(2020.12.19~21) (0) | 2020.12.21 |
[생활코딩]WEB2-Node.js (4)(2020.12.17) (0) | 2020.12.17 |
[생활코딩]Node.js (3)(2020.12.14) (0) | 2020.12.16 |
[생활코딩]WEB2-Node.js (2)(2020.12.13) (0) | 2020.12.13 |