웹프로그래밍/node.js

util 모듈 && fs 모듈

hyun_jo_o 2019. 8. 7. 23:05

util 모듈

util.deprecate는 지원이 조만간 중단될 메서드임을 알려줄 때 사용한다.

const util = require('util');
const crypto = require('crypto');

//deprecated는 지원이 조만간 중단될 메서드임을 알려줄 때 사용
const dontuseme = util.deprecate((x,y)=>{
    console.log(x+y);
});

dontuseme(1, 2);

함수를 사용하면 콘솔에 값은 나오지만 경고도 함께 출력 된다.

 

util.promisify로 promise를 지원하지 않는 (err, data) => {} 꼴의 콜백 또한 프로미스로 만들 수 있다. 

const randomBytesPromise = util.promisify(crypto.randomBytes);
const pbkdf2Promise = util.promisify(crypto.pbkdf2);

crypto.randomBytes(64, (err, buf) => {
    const salt = buf.toString('base64');
    console.log('salt', salt);
    console.time('암호화');
    crypto.pbkdf2('현주바보', salt, 651395, 64, 'sha512', (err, key) => {
        console.log('password', key.toString('base64'));
        console.timeEnd('암호화');
    });
});

//promise를 지원하지 않는 (err, data) => {} 꼴의 콜백은
//util.promisify로 프로미스로 만들 수 있다.

randomBytesPromise(64)
    .then((buf) => {
        const salt = buf.toString('base64');
        return pbkdf2Promise('현주바보', salt, 651395, 64, 'sha512');
    })
    .then((key) => {
        console.log('password', key.toString('base64'));
    })
    .catch((err) => {
        console.error(err);
    });

    (async()=> {
        const buf = await randomBytesPromise(64);
        const salt = buf.toString('base64');
        const key = await pbkdf2Promise('현주바보', salt, 651395, 64, 'sha512');
        console.log('password', key.toString('base64'));
    })();

fs 모듈

파일 읽기

const fs = require('fs');
//fs가 프로미스를 10버전에서 지원 그래서 콜백으로
fs.readFile('./readme.txt', (err, data) => {
    if(err) {
        throw err;
    }
    console.log(data);
    console.log(data.toString());
});

파일 쓰기

const fs = require('fs');

fs.writeFile('./writeme.txt', '글을 써주세요', (err) => {
    if(err) {
        throw err;
    }
    fs.readFile('./writeme.txt', (err, data) => {
        console.log(data.toString());
    })
});

 

파일스트림으로 읽어오기 (버퍼링)

const fs = require('fs');

const readStream = fs.createReadStream('./readme3.txt', {highWaterMark: 16});
const data = [];

readStream.on('data', (chunck) => {
    data.push(chunck);
    console.log('data', chunck, chunck.length);
});

readStream.on('end', () => {
    console.log('end', Buffer.concat(data).toString());
});

readStream.on('error', (err) => {
    console.log('error', err);
})
// 스트림은 이벤트 기반으로 동작합니다. data,end,error...
// 버퍼(청크)들이 들어올 때 마다 data이벤트가 발생합니다.

스트림은 데이터가 버퍼에 채워지면 보내기를 반복한다. 

버퍼들의 흐름을 스트림이라고한다.