본문 바로가기
nodejs

[node.js] 기본 - processing model, module system, async]

by jinbro 2017. 6. 4.
[Node.js processing model]
- 이벤트기반의 비동기 I/O(콜백) 프레임워크


1) 클라이언트가 보내는 요청을 모두 이벤트로 처리 : 이벤트 큐에 쌓기
2) 이벤트 루프 : 이벤트 큐에 쌓인 이벤트를 하나하나 처리(싱글쓰레드) 후 요청 클라이언트에 응답
3) 이벤트 : 가벼운 처리 / 무거운 처리(네트워크, 파일 읽고 쓰기 등)
- 가벼운 처리 : 이벤트 루프 처리 
- 무거운 처리 : 이벤트 루프가 Non-blocking Worker(C++)로 보내 처리 후 이벤트 형태로 큐에 다시 전달, 루프가 큐에서 뽑아 처리(응답)


[모듈 시스템]
- 모듈 : 일정 기능을 하는 코드 덩어리, 서비스를 구현할 때 하나의 소스코드로 만드는게 아니라 기능별로 모듈화해서 만듬
- 브라우저 : window 객체(스코프 겹치지 않도록)를 이용하거나, RequireJS와 같은 의존성 로더(라이브러리) 사용
window.module1 = function(){
     return "module1"
}

window.module2 = function(){
     return "module2"
}


- Node.js : node의 모듈 시스템 스펙 CommonJS, 파일 형태 모듈 관리, 파일을 읽을 수 있음
/* 기본 제공 모듈 */
const http = require('http');
http.createServer();


/* math.js (custom module) */
function sum(a, b) {
     return a + b;
}

module.exports = {
     sum: sum
};


/* index.js */
const math = require('./math.js');
let result = math.sum(1, 2); 
console.log(result); // 3



[비동기]
- 기본적으로 비동기로 동작함 : A 처리가 모두 끝난 뒤에 B를 하는게 아님
- 기본 모듈로 비동기와 동기처리 비교 : readFile / readFileSync

/* sync */
const fs = require('fs');
const data = fs.readFileSync('./data.txt', 'utf-8');
console.log(data);

/* async */
const fs = require('fs');
const data = fs.readFile('./data.txt', 'utf-8', (err, data) => {
     if(err) {
          throw err;
     }

     console.log(data);
});
- 동기처리 : 코드 줄 별로 처리(파일 읽을 때까지 기다림) 후 다음 코드 처리
- 비동기처리 : 콜백함수로 이벤트 처리(이벤트큐), 이벤트 단위 처리(완료된 것부터 응답)



댓글