Zero To One
node - os, process, path, fs 본문
1. os 정보 : 다양한 운영체제에서 내 서버가 동작하고 있는 환경에 대한 정보를 얻어올 수 있다.
const os = require('os')
console.log(os.totalmem());
console.log(os.freemem());
console.log(os.type());
console.log(os.userInfo());
console.log(os.cpus());
console.log(os.homedir());
console.log(os.hostname());
출력 결과
> node app.js
16507834368
10154803200
Linux
{
uid: 1000,
gid: 1000,
username: 'jaehyeok',
homedir: '/home/jaehyeok',
shell: '/usr/bin/zsh'
}
[
{
model: '11th Gen Intel(R) Core(TM) i5-11320H @ 3.20GHz',
speed: 2500,
times: { user: 266640, nice: 10, sys: 83570, idle: 4815600, irq: 0 }
},
{
model: '11th Gen Intel(R) Core(TM) i5-11320H @ 3.20GHz',
speed: 2500,
times: { user: 262690, nice: 90, sys: 85460, idle: 4784350, irq: 0 }
},
{
model: '11th Gen Intel(R) Core(TM) i5-11320H @ 3.20GHz',
speed: 3160,
times: { user: 265210, nice: 350, sys: 85420, idle: 4818610, irq: 0 }
},
{
model: '11th Gen Intel(R) Core(TM) i5-11320H @ 3.20GHz',
speed: 2500,
times: { user: 264160, nice: 70, sys: 87650, idle: 4811660, irq: 0 }
},
{
model: '11th Gen Intel(R) Core(TM) i5-11320H @ 3.20GHz',
speed: 2500,
times: { user: 265410, nice: 70, sys: 83010, idle: 4820950, irq: 0 }
},
{
model: '11th Gen Intel(R) Core(TM) i5-11320H @ 3.20GHz',
speed: 2500,
times: { user: 274920, nice: 70, sys: 80180, idle: 4812140, irq: 0 }
},
{
model: '11th Gen Intel(R) Core(TM) i5-11320H @ 3.20GHz',
speed: 2500,
times: { user: 260410, nice: 100, sys: 82140, idle: 4824950, irq: 0 }
},
{
model: '11th Gen Intel(R) Core(TM) i5-11320H @ 3.20GHz',
speed: 3997,
times: { user: 263160, nice: 310, sys: 83190, idle: 4814060, irq: 0 }
}
]
/home/jaehyeok
jaehyeok-Inspiron-15-5510
2. process : node가 동작하고 있는 프로세스에 대한 정보를 가져올 수 있다.
const process = require('process')
console.log(process.execPath); //현재 실행되고 있는 노드의 위치
console.log(process.version); //노드의 버전
console.log(process.pid); //프로세스 ID
console.log(process.ppid); //프로세스 부모의 ID
console.log(process.platform); //플랫폼에 대한 정보
console.log(process.env); //현재 컴퓨터에 저장된 환경변수
console.log(process.uptime()); //얼마나 실행되고 있었는지
console.log(process.cwd()); //현재 실행하고 있는 노드의 경로
console.log(process.cpuUsage()); //CPU 사용량
3. path : 파일의 경로에 대해 접근하거나 경로에 대해 무언가를 처리해야할 때 사용한다.
const path = require('path');
//os마다 표현되는 경로가 다르다
//path를 이용해서 운영체제별로 경로표기법이 달라져도 잘 동작할 수 있도록 만들어야 한다.
console.log(__dirname);
console.log(__filename);
console.log(path.sep); //경로 구분자
console.log(path.delimiter); //환경변수 구분자
//basename
console.log(path.basename(__filename)); //파일정보만 보여줌, app.js
console.log(path.basename(__filename, '.js')); //.js 확장자 제거, app
//dirname
console.log(path.dirname(__filename)); //디렉토리 이름만 가져올때, /home/jaehyeok/node-study/8.path
//ectension
console.log(path.extname(__filename)); //확장자만 출력, .js
//전체경로를 하나씩 분리할 수 있다. (objct 형태)
//parse,
const parsed = path.parse(__filename);
console.log(parsed);
// {
// root: '/',
// dir: '/home/jaehyeok/node-study/8.path',
// base: 'app.js',
// ext: '.js',
// name: 'app'
// }
//parse를 string형태로 나타내기
const str = path.format(parsed);
console.log(str);
// isAbsolute (절대경로인지 상대경로인지 알아보기)
console.log('isAbsolute?', path.isAbsolute(__dirname)); //isAbsolute? true
console.log('isAbsolute?', path.isAbsolute('../')); //isAbsolute? false
// normalize (잘못된 경로를 알아서 수정해줌 )
console.log(path.normalize('./jaehyeok//////study')); //jaehyeok/study
// join
console.log(__dirname + '/' + 'image'); //os별로 경로가 상이하기때문에 좋은 방법은 아님 (worst)
console.log(__dirname + path.sep + 'image'); //path.sep를 이용하여 각 os별로 구분자를 넣어줄 수 있음 (good)
console.log(path.join(__dirname, 'image')); //path.join을 이용하여 경로를 만듬 (best)
4. fs : 파일을 읽기,쓰기,이름변경 등을 할 수 있는 file모듈
- api를 사용할 때, 인자는 어떤 것들이 있는지, 추가적으로 전달해야하는 옵션과 같은 인지가 있는지
- 함수에서 return되는 값은 무엇인지
- promises라면 catch를 이용하여 error를 잡기
const fs = require('fs');
// 3가지 형태의 api
// 1. rename(...., callback(error, data)) //비동기
// 2. try { renameSync(....) } catch(error) { } //동기
// 3. promises.rename().then().catch(0)
// fs.renameSync('./file1.txt', './file-new.txt') -> 오류발생되면 다음것이 실행이 안됨
// 에러가 발생될 수 있는 것은 try catch 이용
try{
fs.renameSync('./text.txt', './file-new.txt')
} catch (error){
console.error(error)
}
fs.rename('./file-new.txt', './mytext.txt', (error) => { //callback함수로 전달
console.log(error);
})
console.log('hello')
fs.promises
.rename('./mytext.txt', './mytext-new.txt')
.then(() => console.log('Finish!')) //없어도 됨
.catch(console.error)
const path = require('path');
//fs(filesystem)이란 변수는 fs모듈안에 있는 promises들을 가리킨다
const fs = require('fs').promises;
// read a file
fs.readFile('./mytext-new.txt')
.then(data => console.log(data)) // <Buffer 68 65 6c 6c 6f 21> 버퍼형태로 읽어옴
.catch(console.error)
fs.readFile('./mytext-new.txt','utf-8')
.then(data => console.log(data)) // hello!
.catch(console.error)
// write a file
fs.writeFile('./mytext-new.txt', 'hello word!')
.catch(console.error);
// append a file
fs.appendFile('./mytext-new.txt', path.dirname(__filename))
.catch(console.error);
// copy a file
fs.copyFile('./mytext-new.txt', './file.txt') //비어있음
.catch(console.error);
//파일을 추가한 다음에 copy
// Why? 코드를 순서대로 작성했지만 promises이므로 비동기적으로 처리되기 때문에 순서가 보장되지 않는다
// 순서가 중요할 경우, 해당되는 promises가 수행된 다음 then안에서 처리해주어야함
fs.appendFile('./mytext-new.txt', path.dirname(__filename))
.then(()=> {
fs.copyFile('./mytext-new.txt', './file2.txt')
.catch(console.error);
})
.catch(console.error);
// folder
fs.mkdir('sub-folder')
.catch(console.error)
fs.readdir('./')
.then(console.log)
.catch(console.error);'Backend' 카테고리의 다른 글
| MVC 패턴 (0) | 2022.07.25 |
|---|---|
| 디버깅 (0) | 2022.07.13 |
| node -buffer, stream (0) | 2022.07.12 |