목록자바스크립트 (92)
바르고 뜨겁게
events 모듈const EventEmitter = require('events'); const endCallback = ()=>{ console.log('안녕히 가세요'); } // 이벤트를 만들 수 있게 해주는 모듈 // myEvent.addListener(이벤트명, 콜백리스너); const myEvent = new EventEmitter(); // '방문'이라는 이름의 이벤트 생성 myEvent.addListener('방문', ()=>{ console.log('안녕하세요? xxx 홈페이지 입니다') }); // addListener = on (같은 기능:별명) myEvent.on('종료', ()=>{ console.log('종료 되었습니다'); }); // 같은 이벤트에 ..
FS(파일시스템) 모듈 - 동기와 비동기노드는 파일시스템에 접근이 가능하다.const fs = require('fs'); // 파일 읽기 fs.readFile('./readme.txt', (err,data)=>{ if (err){ throw err; } console.log(data); // 버퍼형태 console.log(data.toString()); }); // 파일 쓰기 fs.writeFile('./writefile.txt', '노드로 생성된 파일입니다.', (err)=>{ if(err){ throw err; } fs.readFile('./writefile.txt', (err,data)=>{ if (err){ throw err; } console.log(data.toString()); }..
util 모듈(deprecate, promisify)deprecateconst util = require('util'); const dontUseMe = util.deprecate((x,y)=>{ console.log(x+y); },'이 함수는 2019-01-01 까지만 지원합니다.'); dontUseMe(1,2);3 (node:20972) DeprecationWarning: 이 함수는 2019-01-01 까지만 지원합니다. promisify(error,data)=>{}형태의 콜백은 프로미스로 만들 수 있다.프로미스 형태는 async/await 변경 가능하다const util = require('util'); const crypto = require('crypto'); // 아래와 같은 콜..
crypto 양방향 암호화(cipher)const crypto = require('crypto'); // hiddenKey 를 알아야 복호화 가능 // utf8 문자열을 base64 암호문으로 변경 const cipher = crypto.createCipher('aes-256-cbc', 'hiddenKey'); let result = cipher.update('password', 'utf8', 'base64'); result += cipher.final('base64'); console.log('암호화된 암호: ', result); // 복호화 // 잘못된키 입력시 Error: error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad de..
OS 모듈require('os') 로 임포트(?)해서 사용가능// OS 내장 모듈 console.log('---- OS 모듈 ----'); const os = require('os'); console.log('os.arch(): ',os.arch()); console.log('os.platform(): ',os.platform()); console.log('os.type(): ',os.type()); console.log('os.uptime() 운영체제의 실행시간: ',os.uptime()); console.log('os.hostname(): ',os.hostname()); console.log('os.release(): ',os.release()); console.log('os.homedir(): ',..
global 내장객체기존 환경에는 window라는 전역객체가 있어서 window.setTimeout등을 사용가능했음.노드에는 window 대신 global이 존재.global 객체는 전체 공유가 됨.// globalA.js module.exports = () => global.message;// globalB.js const A = require('./globalA'); global.message = '안녕하세요'; console.log(A());안녕하세요 __filename, __dirname, processconsole.log('파일 경로: ',__filename); console.log('파일이 위치한 경로: ',__dirname); // process 객체에는 현재 실행중인 노트 프..
모듈이 될 파일은 module.exports = 값; 을 마지막에 넣어야된다// var.js const odd = '홀수입니다'; const even = '짝수입니다'; console.log(odd); even = even + 'zero'; module.exports = { odd, even, }; // 이전 문법 module.exports = { odd: odd, even: even, };const 변수 = require('파일경로');// func.js const variable = require('./var.js'); console.log(variable.odd); console.log(variable.even);비구조화할당으로 간단하게 표현// func.js const..
이벤트 루프는 가능하다면 언제나 시스템 커널에 작업을 떠넘겨서 Node.js가 논 블로킹 I/O 작업을 수행하도록 해줍니다.(JavaScript가 싱글 스레드임에도 불구하고)대부분의 현대 커널은 멀티 스레드이므로 백그라운드에서 다수의 작업을 실행할 수 있습니다. 이러한 작업 중 하나가 완료되면 커널이 Node.js에게 알려주어 적절한 콜백을 poll큐에 추가할 수 있게 하여 결국 실행되게 합니다. function run(){ console.log('1초후 실행'); } console.log('시작' ); setTimeout(run, 1000); console.log('끝');시작 끝 3초후 실행태스크큐에 들어가는 경우 : setTimeout, setInterval, setImmediate, Promi..
노드는 런타임 가상머신(Vm)이다.노드를 깔면 노드안에 가상머신이 있기 때문에 어느 환경에서나 자바스크립트를 사용가능하다.원래 자바스크립트는 웹브라우저내에서 동작하지만 노드의 등장으로 웹브라우저 밖에서도 사용할 수 있게 되었다. node 결과는 크롬의 개발자 도구의 console 창과 똑같다. 둘다 REPL(Read, Evaluate, Print, Loop) 방식을 사용하기 때문이다.노드의 특징: 이벤트기반, 논블로킹 I/O모델, 싱글쓰레드 이벤트 기반 (event-driven)호출스택과 태스크큐에 작업이 없더라도, 이벤트 리스너가 이벤트를 기다리고 있는 것 논블로킹 I/O호출스택에서 태스크큐로 보내서 눈에 보이는 코드와 다르게 실행 순서를 바꾸는 개념자바스크립트는 싱글쓰레드이기 때문에 동시작업이 불가능..
async/await은 ES2017 부터 지원//// Promise 사용 //// Users.findOne('kim') .then((user) => { console.log(user); return Users.update('kim', 'jeong'); }) .then((updateUser) => { console.log(updateUser); return Users.remove('jeong'); }) .then((removeUser) => { console.log(removeUser); }) .catch((err) => { console.error(error); }); console.log('종료'); // 종료가 먼저 호출되고 promise가 실행된다. //// async/await 사용 ///..