Node의 내장 모듈들 (3)

BirdsOnTree·2022년 12월 30일
0

Node.js

목록 보기
3/8
post-thumbnail

단방향 암호화 (crypto)

  • 암호화는 가능하지만 복호화는 불가능하다
    암호화: 평문을 암호로 만듦
    복호화: 암호를 평문으로 해독

  • 단방향 암호화의 대표 주자는 해시 기법
    문자열을 고정된 길이의 다른 문자열로 바꾸는 방식

hash 사용하기 (sha512)

  • createHash(알고리즘): 사용할 해시 알고리즘을 넣어준다.
    md5, sha1, sha256, sha512 등이 가능하지만, md5, sha1은 이미 취약점이 발견되었다.
    현재는 sha512 정도로 충분하지만, 나중에 sha512마저도 취약해지만 더 강력한 알고리즘으로 바꾸어야 한다.

  • update(문자열): 변환할 문자열을 넣어준다.

  • digest(인코딩): 인코딩할 알고리즘을 넣어준다.
    base64, hex, latin1이 주로 사용되는데, 그중 base64가 결과 문자열이 가장 짧아 애요된다. 결과물로 변환된 문자열을 반환해준다.

pdkdf2

컴퓨터의 발달로 기존 암호화 알고리즘이 위협 받고 있다.

  • crypto, randomBytes로 64바이트 문자열 생성 -> salt 역할
  • pdkdf2 인수로 순서대로 비밀번호, salt, 반복 횟수, 출력 바이트, 알고리즘
  • 반복 횟수를 조정해 암호화하는데 1초 정도 걸리게 맞추는것이 권장

worker_threads

노드에서 멀티 스레드 방식으로 작업할수 있다.
isMainThread: 현재 코드가 메인 스레드에서 실행되는지, 워커 스레드에서 실행되는지 구분
메인 스레드에서는 new Worker를 통해 현재 파일(__filename)을 워커 스레드에서 실행시킴
worker.postMessage로 부모에서 워커로 데이터 보냄
parentPort.on('message')로 부모로부터 데이터를 받고, postMessage로 데이털르 보냄
(극히 드물다.)

... 프로세스를 사용하는 방법 ...

파일 시스템 접근

fs

  • 파일/폴더 생성, 삭제, 읽기, 쓰기 가능
  • 웹 브라우저에서는 제한적이었으나 노드에서는 권한을 가지고 있다.
  • 보안상 조심해야한다.

파일 읽기

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를 붙여주자.

0개의 댓글