암호화는 가능하지만 복호화는 불가능하다
암호화: 평문을 암호로 만듦
복호화: 암호를 평문으로 해독
단방향 암호화의 대표 주자는 해시 기법
문자열을 고정된 길이의 다른 문자열로 바꾸는 방식
createHash(알고리즘): 사용할 해시 알고리즘을 넣어준다.
md5, sha1, sha256, sha512 등이 가능하지만, md5, sha1은 이미 취약점이 발견되었다.
현재는 sha512 정도로 충분하지만, 나중에 sha512마저도 취약해지만 더 강력한 알고리즘으로 바꾸어야 한다.
update(문자열): 변환할 문자열을 넣어준다.
digest(인코딩): 인코딩할 알고리즘을 넣어준다.
base64, hex, latin1이 주로 사용되는데, 그중 base64가 결과 문자열이 가장 짧아 애요된다. 결과물로 변환된 문자열을 반환해준다.
컴퓨터의 발달로 기존 암호화 알고리즘이 위협 받고 있다.
노드에서 멀티 스레드 방식으로 작업할수 있다.
isMainThread: 현재 코드가 메인 스레드에서 실행되는지, 워커 스레드에서 실행되는지 구분
메인 스레드에서는 new Worker를 통해 현재 파일(__filename)을 워커 스레드에서 실행시킴
worker.postMessage로 부모에서 워커로 데이터 보냄
parentPort.on('message')로 부모로부터 데이터를 받고, postMessage로 데이털르 보냄
(극히 드물다.)
... 프로세스를 사용하는 방법 ...
const fs = require('fs');
fs.readFile('./reademe.txt', (err, data) => {
if (err) {
throw err
}
console.log(data)
console.log(data.toString)
})
promise로 쓸수 있다.
const fs = require('fs').promises;
fs.readFile('./reademe.txt')
.then(() => {
console.log(data)
console.log(data.toString)
})
.catch((err) => {
throw err;
})
const fs = require('fs').promises;
fs.writeFile('./writeme.txt', '글을 입력하다')
.then(() => {
})
.catch((err) => {
throw err;
})
버퍼: 일정한 크기로 모아두는 데이터
일정한 크기가 되면 한번에 처리
버퍼링: 버퍼에 데이터가 찰 때까지 모으는 작업
스트림: 데이터의 흐름
일정한 크기로 나눠서 여러번에 걸쳐서 처리
버터의 크기를 작게 만들어서 주기적으로 데이터를 전달
스트리밍: 일정한 크기의 데이터를 지속적으로 전달하는 작업
스트림 방식이 메모리를 더 아낄수 있다.
버퍼
const buffer = Buffer.from('버퍼로 바꾸다.')
console.log(buffer);
console.log(buffer.length);
console.log(buffer.toString));
const buffer = Buffer.from('버퍼로 바꾸다.')
const array = [Buffer.from('띄엄 '), Buffer.from('띄엄 '), Buffer.from('띄어쓰기')]
console.log(Buffer.concat(array).toString());
// 띄엄 띄엄 띄어쓰기
스트리밍
const fs = require("fs");
const readStream = fs.createReadStream("./readme3.txt", { highWaterMark: 16 });
// 16바이트씩 나눠서 보내달라.
const data = [];
readStream.on("data", (chunk) => {
data.push(chunk);
console.log("data:", chunk, chunk.length);
});
readStream.on("end", () => {
console.log("end", Buffer.concat(data).toString());
});
readStream.on("error", (err) => {
console.log("error", err);
});
예외: 처리하지 못한 에러
노드 스레드가 멈춤
노드는 기본적으로 싱글 스레드라 스레드가 멈춘다는 것은 프로세스가 멈춘다는것
에러처리는 필수이다.
에러가 발생할 만한 곳은 try catch로 감싸준다.
promise에는 catch를 붙여주자.