Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 제이쿼리
- 인턴
- AngularJS
- CoffeeScript
- 750R
- 테스트
- 빅데이터
- git
- NoSQL
- github
- 자바스크립트
- 개발환경
- CSS
- 오픈소스
- 웹디자인
- Python
- non-blocking
- Microsoft
- Javascript
- 마이크로소프트
- MongoDB
- npm
- 크로스브라우징
- node.js
- 마소
- JQuery
- callback function
- 콜백 함수
- Ajax
Archives
- Today
- Total
Inspired World
Node.js에서 진정한 Non-blocking 코드 구현, forAsync 모듈! 본문
Node.js 에서의 장점은 non-blocking 입니다.
하지만 이것이 하기에 따라 오히려 독이 될 수도 있는데요.
blocking 코드를 Node.js 에서 작성하게 되면
Node.js 가 돌아가는 이벤트 루프의 특성상
모든 일이 blocking 코드가 다 할때까지 기다리게 됩니다.
예를 들어
웹 어플리케이션 중간에 이런 부분이 있다면
다른 사람들의 작업은 물론 HTTP 요청마저 받아들이지 못하고
서버가 이 작업 하나 밖에 할 수 없기 때문에 서버가 멈춘 것처럼 되어버립니다.
그래서 이 방법을 해결할 수 있는 방법이
사용하는 원리는 setTimeout 과 비슷하지만 setTimeout보다 벤치마킹 해보면
setTimeout result: 6156ms
nextTick result: 196ms
이렇게 나온다는 얘기가 있군요 ㅎㅎ
일반적으로 DB에서 뭉탱이(?) 를 가져와 하나씩 처리를 해줘야할 때가 있는데
이럴때는 forEach 같은 명령어를 써서 여러 데이터를 하나 하나씩 parsing 해줘야 합니다.
간단한 for loop 부터 forEach loop을 non-blocking 으로 구현한 모듈을 제가 하나 만들었습니다.
이 process.nextTick을 이용한건데요.
바로 forAsync 입니다!
설치는 npm install forAsync 해주시고
이렇게 Node.js 소스 상단에 배치하면 사용가능합니다.
사용방법 또한 간단합니다!
up 은
For Loop을 돌리면서 숫자가 커지는 경우 시작하는 숫자 0, 목표 10, 증가 숫자 1, 그리고
하고 싶은 일을 그 다음 함수에서 하시면 됩니다.
물론 i 값을 이용해서 반복되는 배열이나 객체에 접근할 수 있습니다.
down 은
up과 다른 점은 숫자가 큰 숫자에서 작은 숫자로 줄어드는 것 뿐입니다.
forEach 는
객체를 그대로 forEach 함수에 넣고 그 다음 함수에서 key, value 를 인자로 받아서
하고 싶은 일을 하실 수 있습니다.
마지막으로 이 세 함수 모두 다 콜백 함수를 가지고 있어서 이 함수가 작업을 마치고
하고 싶은 일은 콜백 함수 안에다가 정의해주시면 됩니다.
하지만 이것이 하기에 따라 오히려 독이 될 수도 있는데요.
blocking 코드를 Node.js 에서 작성하게 되면
Node.js 가 돌아가는 이벤트 루프의 특성상
모든 일이 blocking 코드가 다 할때까지 기다리게 됩니다.
예를 들어
for(var i=0; i<10000; i++) { // Some heavy works }이와 같이 무거운 작업을 10000번을 한다고 하면
웹 어플리케이션 중간에 이런 부분이 있다면
다른 사람들의 작업은 물론 HTTP 요청마저 받아들이지 못하고
서버가 이 작업 하나 밖에 할 수 없기 때문에 서버가 멈춘 것처럼 되어버립니다.
그래서 이 방법을 해결할 수 있는 방법이
process.nextTick( callback );process.nextTick 입니다.
사용하는 원리는 setTimeout 과 비슷하지만 setTimeout보다 벤치마킹 해보면
setTimeout result: 6156ms
nextTick result: 196ms
이렇게 나온다는 얘기가 있군요 ㅎㅎ
일반적으로 DB에서 뭉탱이(?) 를 가져와 하나씩 처리를 해줘야할 때가 있는데
이럴때는 forEach 같은 명령어를 써서 여러 데이터를 하나 하나씩 parsing 해줘야 합니다.
간단한 for loop 부터 forEach loop을 non-blocking 으로 구현한 모듈을 제가 하나 만들었습니다.
이 process.nextTick을 이용한건데요.
바로 forAsync 입니다!
설치는 npm install forAsync 해주시고
var forAsync = require('forAsync');
이렇게 Node.js 소스 상단에 배치하면 사용가능합니다.
사용방법 또한 간단합니다!
//Upward Loop Function forAsync.up( 0, 10, 1, function(i) { // Do something }, function() { // callback }); // Downward Loop Function forAsync.down( 10, 1, 2, function(i) { // Do something }, function() { // callback }); // forEach Loop Function forAsync.forEach( Array, function(k, v) { // Do something }, function() { // callback });보시는 바와 같이
up 은
For Loop을 돌리면서 숫자가 커지는 경우 시작하는 숫자 0, 목표 10, 증가 숫자 1, 그리고
하고 싶은 일을 그 다음 함수에서 하시면 됩니다.
물론 i 값을 이용해서 반복되는 배열이나 객체에 접근할 수 있습니다.
down 은
up과 다른 점은 숫자가 큰 숫자에서 작은 숫자로 줄어드는 것 뿐입니다.
forEach 는
객체를 그대로 forEach 함수에 넣고 그 다음 함수에서 key, value 를 인자로 받아서
하고 싶은 일을 하실 수 있습니다.
마지막으로 이 세 함수 모두 다 콜백 함수를 가지고 있어서 이 함수가 작업을 마치고
하고 싶은 일은 콜백 함수 안에다가 정의해주시면 됩니다.
'Node.js' 카테고리의 다른 글
Node.js 에서 require를 활용해 소스를 정리해보자 (0) | 2012.02.27 |
---|---|
Node.js 에서 멀티코어(Multi-core)를 사용해보자! (0) | 2012.02.08 |
Node.js 를 이용한 웹 개발 - Express Framework (0) | 2012.02.01 |
Node.js 설치 및 개발환경 세팅하기 (2) | 2012.01.30 |
Node.js 호스팅 (IaaS, PaaS) 서버 구축 (4) | 2012.01.29 |
Comments