생활코딩/WEBn
[Node.js] 비동기/동기(Sync)와 콜백, request
hayjo
2020. 9. 15. 22:33
[강의 출처] opentutorials.org/course/3332
WEB2 - Node.js - 생활코딩
수업소개 이 수업은 JavaScript를 이용해서 Node.js를 제어해 동적으로 HTML 코드를 생성하는 웹애플리케이션을 만드는 방법에 대한 수업입니다. 수업대상 예를들어 1억개의 페이지로 이루어진 웹사
opentutorials.org
Node.js에서의 비동기처리
- 동기(Synchronous): 작업을 순차적으로 처리
- 비동기(Asynchronous): 작업을 병렬적으로 처리
- 비동기로 처리하면 대기시간이 없어 빠르기 때문에 퍼포먼스가 중요한 작업에 권장됨
- node.js에서는 비동기가 default로, 동기처리용 함수는 Sync 형태로 제공됨(ex fs.readFile, fs.readFileSync)
- 비동기의 경우, 작업이 완료되면 callback 함수를 호출해서 다음 작업(병렬 처리)으로 넘어감
동기(Synchronous) 처리
var fs = require('fs');
console.log('A');
var result = fs.readFileSync('./sample.txt', 'utf-8');
console.log(result);
console.log('C');
/* 순차적으로 실행되어
A
B
C
*/
동기(Asynchronous) 처리
console.log('A');
fs.readFile('./sample.txt', 'utf-8', function(err, result){
console.log(result);
});
console.log('C');
/*
readFile 함수가 실행되는 동안에 그 다음줄인 console.log('C');가 먼저 실행되어
A
C
B
*/
request.on()
- 전송 받은 데이터를 여는 방법
- [참고] stackoverflow.com/questions/4295782/how-to-process-post-data-in-node-js
- Node.js에서는 post방식으로 데이터를 전송 받을 때, (전송량 과다로 생기는 이슈 방지를 위해)
- 일정량의 데이터를 수신할 때마다 callback 함수를 호출하고, 그 callback 함수의 인자에 수신한 데이터를 담아서 넘겨준다.
- 따라서 아래 코드는 callback을 호출할 때마다 body에 수신한 데이터를 추가하는 형태로 작성되어 있다.
var qs = require('querystring');
function(request, response) {
if(request.method == "POST") {
var body = '';
request.on('data', function(data) {
body += data;
// 만약 데이터가 너무 많으면 연결 종료 - 일종의 보안장치
if (body.length > 1e6){
request.connection.destroy();
};
});
request.on('end', function() {
var post = qs.parse(body);
});
}
}