3.1 REPL 사용하기

  • Read : 읽기
  • Eval : 해석하기
  • Print : 결과물 반환
  • Loop : 반복

터미널(콘솔)에서 node를 입력하면 직접 자바스크립트 코드를 입력 할 수 있음

$ node
> const str = 'Hello world, heelo node';
undefined
> console.log(str);
Hello World, hello node
undefined
>

3.2 JS 파일 실행하기

helloWorld.js를 실행하기

 $ node helloWorld

3.3 모듈로 만들기

var.js

const add = '홀수입니다';
const even = '짝수입니다';

module.exports = {
    odd,
    even,
};

func.js

const { odd, even } = require('./var');

function checkOddOrEven(num) {
    if(num % 2) { // 홀수 일 때
        return odd;
    }
    return even;
}

module.exports = checkOddOrEven;

index.js

const { odd, even } = require('./var');
const checkNumber = require('./func');

function checkStringOddOrEven(str) {
    if(str.length % 2) { // 홀수 일 떄
        return odd;
    }
    return even;
}

console.log(checkNumber(10));
console.log(checkStringOddOrEven('hello'));
$ node index
짝수입니다
홀수입니다

노드에서 import, export default (es6) 사용시 파일 확장자를 mjs로 지정해야 하며, 실행시 node --experimental-modules를 입력 해주어야 하는 제한이 있음

3.4 노드 내장 객체

3.4.1 global

브라우저의 window 객체와 같은 전역 객체이며, node 에는 window가 없으므로 window 의 역할을 대체함 global 객체에는 매우 많은 속성이 있음 (global 객체 남용 주의)

3.4.2 console

브라우저의 console과 동일

3.4.3

  • setTimeout(func, ms) : ms초 이후에 func 함수 실행
  • setInterval(func, ms) : ms초 마다 func 함수 실행
  • setImmediate(func) : func를 즉시 실행

  • clearTimeout : setTimeout을 취소

  • clearInterval : setInterval을 취소
  • clearImmediate : setImmediate를 취소

3.4.4

  • __filename : 현재 파일명
  • __dirname : 현재 파일 경로

3.4.5 module, exports

var.js

exports.odd = '홀수입니다';
exports.even = '짝수입니다';

index.js

const { odd, even } = require('./var');

console.log(odd);
console.log(even);
홀수입니다
짝수입니다

3.4.6 process

$ node

> process.version
v10.0.0 // 설치된 노드의 버전

> process.arch
x64 // 프로세서 아키텍처 정보입니다.

> process.platform
win32 // 운영체제 플랫폼

> process.pid
14736 // 현재 프로세서의 아이디

> process.uptime()
199.36 // 프로세스가 시작된 후 흐른 시간(초)

> process.execPath
C:\\Program Files\\nodejs\\node.exe // 노드의 경로

> process.cwd()
C:\\Users\\zerocho // 현재 프로세스가 실행되는 위치

> process.cpuUsage()
{ user: 390000, system: 203000 } // 현재 cpu 사용량

process.env

환경 변수(environment variable) 가 출력됨
비밀번호, api secret key 등 코드에 노출되기 민감한 정보를 저장하는 공간으로도 사용

3.5 노드 내장 모듈 사용하기

3.5.1 os

브라우저와 달리 노드는 운영체제 정보를 가져 올수 있음
process 객체와 겹치는 부분이 있음

3.5.2 path

폴더와 파일의 경로를 쉽게 조작하도록 도와주는 모듈(os 별로 경로 구분자가 다름)

3.5.3 url

3.5.4 querystring

querystring.parse : url의 query 부분을 자바스크립트 객체로 분해
querystring.stringify : 객체를 문자열로 조립

3.5.5 crypto

3.5.5.1 단방향 함호화

복호화 할 수 없는 암호화 방식

  • createHash(알고리즘) : 사용할 해시 알고리즘을 넣어줌(md5, sh1, sha256, sha512)
  • update(문자열) : 변환할 문자열을 넣어줌
  • digest(인코딩) : base64, hex, latin1 등 결과물로 변환된 문자열을 반환함

pbkdf2

pbkdf2.js

const crypto = require('crypto');

crypto.randomBytes(64, (err, buf) => {
    const salt = buf.toString('base64');
    console.log('salt:', salt);
    crypto.pbkdf2('비밀번호', salt, 100000, 64, 'sha512', (err, key) => {
        console.log('password:', key.toString('base64'));
    });
});
node pbkdf2
salt: OnesIj8wznyKghava1......
password: b4/FpSrZulVY28trzNX.........

3.5.5.2 양방향 암호화

암호화된 문자열을 복호화 할 수 있음(키를 사용)

cipher.js

const crypto = require('crypto');

const cipher = crypto.createCipher('aes-256-cbc', '7열쇠7');
let result = cipher.update('?암호?', 'utf8', 'base64');
result += cipher.final('base64');
console.log('암호화:', result);

const decipher = crypto.createDecipher('aes-256-cbc', '7열쇠7');
let result2 = decipher.update(result, 'base64', 'utf8');
result2 += decipher.final('utf8');
console.log('복호화:', result2);
node cipher
암호화: Jwekljrlsdjvlzjsdlkfjslkjtweljrlksdfjlk
복호화: ?암호?

3.6 파일 시스템 접근하기

3.7 이벤트 이해하기

3.8 예외 처리하기