본문 바로가기

Programming/Node.js

4. Node 기능 살펴보기 (4) - 노드 내장 모듈 8 [util]

node js logo image

 

 

 

 

util은 말 그대로 편의 기능을 모아놓는 모듈이라고 보시면 됩니다. 당연히 계속해서 API가 추가되고 있고, 반대로 deprecated되어 사용되지 않는 경우도 많습니다. deprecated는 주로 새로운 기능의 개발로 인해, 기존 기능의 중요도가 낮아지고 사라질 예정이라는 의미죠. 당장 기능을 삭제하는 것은 아니며 이전 사용자들을 위해 남겨두지만 더이상 업데이트도 되지 않고, 없어질 예정이므로 가능한 사용하지 말라는 의미가 되겠습니다. 

 

이번 아티클에서는 util 모듈의 대표적 메서드 두 개를 살펴보겠습니다. 

 

· util.deprecate : 함수가 deprecated 처리 되었음을 알려줍니다. 첫 번째 인수로 넣은 함수를 사용할 때 경고 메시지가 출력되는데, 두 번째 인수로 경고 메시지를 넣습니다. 사라지거나 변경될 예정인 함수에 사용합니다.

· util.promisify : 콜백 패턴을 프로미스 패턴으로 변경합니다. 변경할 함수를 인수로 제공하면 되죠. 이를 사용하면 async/await 패턴까지 사용이 가능합니다. randomBytes와 비교해 보시기 바랍니다. 참고로 프로미스를 콜백으로 바꾸는 util.callbackify는 자주 사용되지 않습니다. 

 

 

이 예제에 앞서, 우리가 살펴보았던 randomBytes함수에 대해서도 다시 복습해 보겠습니다. 

 

 

 

4. Node 기능 살펴보기 (4) - 노드 내장 모듈 7 [crypto] : 단방향 암호화 2

앞선 과정에서 단방향 암호화 방식을 살펴보았습니다. 이 과정을 간단히 요약하면, [비밀번호] → [해시 함수] → [다이제스트]의 과정을 거치게 된다고 볼 수 있죠. 단방향이므로 해시 함수에서

nozeroslope.tistory.com

 

 

const crypto = require('crypto');

crypto.randomBytes( 64, (err, buf) => {
    const salt = buf.toString('base64');
    console.log('salt:', salt);
    crypto.pbkdf2('passwordString', salt, 10000, 64, 'sha512', (err, key) => {
        console.log('password:', key.toString('base64'));
    });
} );

/*출력 -- 실행 시 마다 변경
salt: s+QGH3e9defp/IslOtOoM4+pxeBzBYgcky0PcaPbH0f4JCEqtwpTu9BgAMoP9TRRUjty0Tsiyfm9yIkGiPLi/w==
password: fHqhCco00NVtxGKd6Ji5kRlwMvVIIH1UYec/CLMWBvP4qkDa0x4fy7ZkLDCBzbXgkskq3ZFkd5nK/V020FK56g==
*/

 

위와 같이 randomBytes에 64를 넣어 64바이트의 문자열을 생성하게 됩니다. 여기서 콜백 함수를 통해 salt를 생성하는 등의 동작이 진행되었죠? 여기서 pbkdf2 이전의 동작까지를 예제에서 다뤄보겠습니다.

 

 

 

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

const donUseFunc = util.deprecate( (x, y) => {
    console.log(x + y);
}, '해당 함수 사용 금지' );

donUseFunc(99, 23);

const randomBytesPromise = util.promisify(crypto.randomBytes);
randomBytesPromise(64)
    .then((buf) => {
        console.log(buf.toString('base64'));
    })
    .catch((error) => {
        console.error(error);
    });
    
/* 출력
122
(node:17180) DeprecationWarning: 해당 함수 사용 금지
(Use `node --trace-deprecation ...` to show where the warning was created)
6kOVxo7AfISGJMqeaCQWQc+hG6Qf4Usw0IJmI83XsnE6nsHDuyhxi9MmZTLHZ3sL3QcaAr0KdG02HkBMF4oTpA==
*/