$ node
VS Code
Ctrl
+ '
JS 파일 실행
- 확장자(.js
) 생략 가능
$ node (js 파일 경로)
Ctrl
+ C
두 번 누르기 or .exit
입력변수 사용
var
,let
,const
키워드 사용 시, 변수 값 출력되지 않음$ node x = 10; # 10 var y = 5; # undefined
Multi-Line 표현식
$ node do { ... x++; ... console.log("x: " + x); ... } while ( x < 3 );
// var.js
const odd = '홀수';
const even = '짝수';
module.exports = { // 변수들을 담은 객체 대입
odd,
even,
};
// func.js
const { odd, even } = require('./var'); // 불러올 모듈 경로(확장자 생략 가능)
function checkOddOrEven(num) { ... }
module.exports = checkOddOrEven;
// index.js
// 모듈 하나에서 여러 개의 모듈 사용 가능
// 모듈 하나가 여러 개의 모듈에서 사용 가능
const { odd, even } = require('./var');
const checkNumber = require('./func'); // 변수 이름 다르게 저장할 수 있음
// 생략
ES2015 모듈
- 자바스크립트의 자체 모듈 시스템
// func.mjs import { odd, even } from './var' // require -> import ... from ... // 생략 export default checkOddOrEven; // module.exports -> export default
- 노드 9 버전부터 ES2015의 모듈 시스템 사용 가능
- 파일 확장자.mjs
로 지정
setImmediate(콜백) vs setTimeout(콜백, 0)
- 특수한 경우(파일 시스템 접근, 네트워킹 같은 I/O 작업)에 setImmediate가 먼저 실행
- 항상 먼저 호출되는 건 아님
- setTimeout(콜백, 0) 사용하지 않는 것을 권장
// exports 사용
exports.odd = '홀수';
exports.even = '짝수';
// 기존 방식 - module.exports 사용
module.exports = {
odd,
even,
};
노드에서의 this
// 최상위 스코프의 this는 module.exports(or exports) 객체 console.log(this); // {} (module.exports) console.log(this === module.exports); // true console.log(this === exports); // true // 함수 내부에서의 this는 global 객체 function whatIsThis () { console.log('function', this === exports, this === global); // function false true } whatIsThis();
require.main === module
운영체제 별로 다른 경로 구분자
- 윈도: C:\Users\name
- POSIX(맥, 리눅스): /home/name
searchParams
라는 특수한 객체로 반환const url = require('url');
const querystring = require('querystring');
const parsedUrl = url.parse('http://www.gilbut.co.kr/?page=3&limit=10');
const query = querystring.parse(parsedUrl.query);
console.log(query); // 객체 반환
console.log(querystring.stringify(query)); // page=3&limit=10
const crypto = require('crypto');
console.log('base64:', crypto.createHash('해시 알고리즘').update('변환할 문자열').digest('인코딩 알고리즘'));
해시 기법
- 어떤 문자열을 고정된 길이의 다른 문자열로 바꾸는 방식
const fs = require('fs');
fs.readFile('./readme.txt', (err, data) => {
if(err) throw err;
console.log(data); // 버퍼(메모리의 데이터) 형식
console.log(data.toString()); // 버퍼 -> 문자열로 변환
});
// <Buffer ec a0 80 .... >
// hello world
const fs = require('fs').promise;
fs.readFile('./readme.txt')
.then( ... )
.catch( ... )
);
동기와 비동기 / 블로킹과 논 블로킹
- 동기와 비동기: 백그라운드 작업 완료 확인 여부
- 블로킹과 논 브로킹: 함수가 바로 return되는지 여부
동기-블로킹 방식
/비동기-논 블로킹 방식
으로 구성
- 버퍼링: 영상을 재생할 수 있도록 데이터를 모으는 동작
- 스트리밍: 영상 데이터를 조금씩 전송하는 동작
프로세스 종료하기
$ lsof -i tcp:포트 $ kill -9 프로세스아이디