Node.js
-
2-14. 노드 pipe와 스트림 메모리 효율 확인하기Node.js 2023. 4. 12. 16:24
I. pipe 방식 const fs = require('fs'); const zlib = require('zlib'); const readStream = fs.createReadStream('readme4.txt', { highWaterMark: 16 }); const zlibStream = zlib.createGzip(); const writeStream = fs.createWriteStream('writeme3.txt'); readStream.pipe(writeStream); 위 코드를 해석하면, "readme4.txt 를 16바이트씩 읽어서 writeme3.txt 라는 파일을 만들고 거기에 16바이트씩 써라" 라는 뜻이다. 한마디로 파일을 복사하라는 것이다. pipe 끼리 여러번 연결할 수도 있다...
-
2-13. 노드 버퍼와 스트림의 모든 것Node.js 2023. 4. 12. 16:01
I. 버퍼와 스트림 버퍼 : 일정한 크기로 모아두는 데이터 - 일정한 크기가 되면 한 번에 처리 - 버퍼링 : 버퍼에 데이터가 찰 때까지 모으는 작업 스트림 : 데이터의 흐름 - 일정한 크기로 나눠서 여러 번에 걸쳐서 처리 - 버퍼의 크기를 작게 만들어서 주기적으로 데이터를 전달 - 스트리밍 : 일정한 크기의 데이터를 지속적으로 전달하는 작업 II. 버퍼 사용하기 const buffer = Buffer.from('저를 버퍼로 바꿔보세요'); console.log('from():', buffer); console.log('length:', buffer.length); console.log('toString():', buffer.toString()); const array = [Buffer.from('띄엄 ..
-
2-12. 노드 파일 시스템 사용하기Node.js 2023. 4. 12. 14:11
I. fs 모듈 파일 시스템에 접근하는 모듈 - 파일/폴더 생성, 삭제, 읽기, 쓰기 가능 - 웹 브라우저에서는 제한적이었으나 노드는 권한을 가지고 있음 - 파일 읽기 예제 // readFile.js const fs = require('fs'); fs.readFile('./readme.txt', (err, data) => { if (err) { throw err; } console.log(data); console.log(data.toString()); }); 위의 예제를 promises 를 사용하여 구현해보면 아래와 같이 된다. //readFilePromise.js const fs = require('fs').promises; fs.readFile('./readme.txt') .then((data) =..
-
2-11. 노드 child_processNode.js 2023. 4. 12. 12:20
I. child_process 란? 위와 같이, 해당 경로에서 dir 이라는 명령어를 입력하면 해당 경로에 있는 파일명들을 보여준다. child_process는 이러한 명령어들을 노드에서도 사용할 수 있게 해준다. 한마디로, child_process를 사용하면 node말고 다른 프로세스를 하나 더 사용한다고 볼 수 있다. const exec = require('child_process').exec; var process = exec('dir'); process.stdout.on('data', function(data) { console.log(data.toString()); }); // 실행 결과 process.stderr.on('data', function(data) { console.error(dat..
-
2-10. 노드 worker_threadsNode.js 2023. 4. 12. 12:11
I. worker_threads 란? 노드에서 멀티 스레드 방식으로 작업할 수 있음 - isMainThread : 현재 코드가 메인 스레드에서 실행되는지, 워커 스레드에서 실행되는지 구분 - 메인 스레드에서는 new Worker 를 통해 현재 파일(__filename)을 워커 스레드에서 실행시킴 - worker.postMessage로 부모에서 워커로 데이터를 보냄 - parentPort.on('message')로 부모로부터 데이터를 받고, postMessage 로 데이터를 보냄 const { Worker, isMainThread, parentPort, } = require('worker_threads'); if (isMainThread) { // 부모일 때(메인스레드일 때) const worker = n..
-
2-9. 노드 crypto(암호화) 와 utilNode.js 2023. 4. 12. 11:46
I. 단방향 암호화 (crypto) 1. 암호화는 가능하지만 복호화는 불가능 - 암호화 : 평문을 암호로 만듦 - 복호화 : 암호를 평문으로 만듦 2. 단방향 암호화의 대표 주자는 해시 기법 - 문자열을 고정된 길이의 다른 문자열로 바꾸는 방식 - abcdefgh 문자열 => qvew II. Hash 사용하기(sha512) 1. createHash(알고리즘) : 사용할 해시 알고리즘을 넣어준다. - md5, sha1, sha256, sha512 등이 가능하지만, md5와 sha1은 이미 취약점이 발견되었다. - 현재는 sha512 정도로 충분하지만, 나중에 이것마저도 취약해지면 더 강화된 알고리즘으로 바꿔야 한다. 2. update(문자열) : 변환할 문자열을 넣어준다. 3. digest(인코딩) : 인..
-
2-8. 노드 url, dns, searchParamsNode.js 2023. 4. 12. 10:53
I. URL 인터넷 주소를 쉽게 조작하도록 도와주는 모듈 ① 노드 버전 7에서 추가된 WHATWG(웹 표준을 정하는 단체의 이름) 방식의 url => 요즘은 이거만 사용 ② 예전부터 노드에서 사용하던 방식의 url 위의 코드에서, 상단의 두개는 지워도 무방하다. URL 은 노드 내장 객체이기 때문이다. II. searchParams 객체 search부분은 보통 주소를 통해 데이터를 전달할 때 사용된다. search는 물음표(?)로 시작하고, 그 뒤에 키=값 형식으로 데이터를 전달한다. 여러 키가 있을 경우에는 &로 구분하고, search 부분을 다루기 위해 searchParams 라는 특수한 객체가 생성된다. const { URL } = require('url'); const myURL = new URL..
-
2-7. 노드 os 와 pathNode.js 2023. 4. 11. 19:03
I. os 란? 1. 운영체제의 정보를 담고 있음 - 모듈은 require로 가져옴 (내장 모듈이라 경로 대신 이름만 적어줘도 됨) 2. os 모듈 메서드 - os.arch() : process.arch와 동일하다. - os.platform() : process.platform 과 동일하다. - os.type() : 운영체제의 종류를 보여준다. - os.uptime() : 운영체제 부팅 이후 흐른 시간(초)을 보여준다. - os.hostname() : 컴퓨터의 이름을 보여준다. - os.release() : 운영체제의 버전을 보여준다. - os.homedir() : 홈 디렉터리 경로를 보여준다. - os.tmpdir() : 임시 파일 저장 경롤르 보여준다. - os.cpus() : 컴퓨터의 코어 정보를 ..