노드JS에서 비동기로 소스 파일을 변경해보자


안녕하세요.
고코더 입니다.


Node.js의 가장 큰 특징중 하나는 비동기로 처리가 가능하다는 것입니다.
이전에도 설명을 자세히 다루었지만 다시 정의하자면 하나의 요청이 처리가 완료 되기 전에 다음 요청으로 진행이 가능합니다.
Node의 최대 성능을 처리해야 한다면 동기를 사용해야 합니다. 하지만 개발자의 의도에 따라 동기 처리와 비동기 처리가 가능합니다.



동기(synchronous) 예제


 1. 동기 방식으로 순차적으로 실행 가능한 Node 소스를 개발하였습니다. 파일을 읽어 올수 있도록 FileSystem(fs) 모듈을 이용해 파일을 불러오는 방식입니다. callback을 지정하지 않아 동기식으로 차례대로 실행을 합니다. 
1
2
3
4
5
6
7
var fs = require('fs'); //filesystem module
 
//동기(synchronous)
console.log(1new Date().getTime());
var data = fs.readFileSync('synchronous.js');
console.log(2new Date().getTime(),'File length:'+data.length);
console.log(3new Date().getTime());
cs

 2. 결과 모습입니다. 순서대로 실행되어 순번대로 1부터 3까지 실행 합니다. 



비동기(ansynchronous) 예제


 3. 이번에는 비동기식 예제를 개발합니다. 이전에 소스를 비동기 방식으로 만들어서 사용해보겠습니다. 
기존 readFileSync은 콜백을 사용할 수 없으므로 readFile으로 함수를 변경하고 콜백(callback)을 입력하였습니다. 
1
2
3
4
5
6
7
8
var fs = require('fs'); //filesystme module
 
//비동기(ansynchronous)
console.log(1new Date().getTime());
fs.readFile('ansynchronous.js'function(err, data) {
    console.log(2new Date().getTime(),'File length:'+data.length);
});
console.log(3new Date().getTime());
cs

 4. 이번에 순서를 보면 2번이 마지막에 실행되었고 3번이 먼저 실행되었습니다. 비동기로 노드를 사용하였기에 요청 이후에 바로 다음단계로 넘어가서 3번을 실행하였기 때문에 먼저 처리된 3번 log가 먼저 찍혀있습니다.




비동기에서 순차적으로 실행하기 


 5. 비동기를 기본 정책으로 사용하지만 로직에 따라 필요한 부분에서 순차적으로 실행되야 하는 경우가 발생합니다.
콜백(callback) 함수를 이용해 실행 순서를 제어 하는 방법입니다. 
1
2
3
4
5
6
7
8
9
10
11
12
var fs = require('fs'); //filesystme module
 
 
//비동기(ansynchronous) 순차실해
console.log(1new Date().getTime());
fs.readFile('ansynchronous_sync.js'function(err, data) {
    console.log(2new Date().getTime(),'File length:'+data.length);
    fs.readFile('ansynchronous.js'function(err, data) {
        console.log(3new Date().getTime(),'File length:'+data.length);
        console.log(4new Date().getTime());
    });
});
cs

 6. 콜백 함수를 이용해 개발자가 원하는 순서대로 실행 되도록 하였습니다.



마무리


비동기는 이제 필수 입니다.


댓글을 달아 주세요