-
[Node.js] 비동기/동기(Sync)와 콜백, request생활코딩/WEBn 2020. 9. 15. 22:33
[강의 출처] opentutorials.org/course/3332
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); }); } }
'생활코딩 > WEBn' 카테고리의 다른 글
[Node.js] 입출력 데이터의 보안 이슈 (0) 2020.09.18 [Node.js] 인코딩 - encodeURI(), charset=utf-8 (0) 2020.09.17 [HTML] form (0) 2020.09.14 [Node.js] NPM, PM2 (0) 2020.09.14 [Node.js] 기타 - read/write JSON, function import, css/js response, favicon (0) 2020.09.11