티스토리 뷰

[노드 내장 객체]

:: 바로 가져다 쓸 수 있다. require 불필요

  • 글로벌
  • 콘솔
  • 타이머
  • 파일 네임 / 디렉토리 네임 : 경로 불러오기
  • module.exports (내보내기)// require('./var') (불러오기)
  • 프로세스 :: 노드제이에스가 실행되는 정보. 버전. 아키텍처
  • env
  • 프로세스.넥스트틱 제일 먼저 실행시킴
  • 프로세스.exit() 실행 종료

[노드 내장 모듈]

: require 모듈 형태로 불러야 할 때

  • os
  • path
  • url모듈
  • 쿼리 스트링
  • 크립토 : 암호화
  • 유틸 : 각종 편의 기능 모음
  • 스레드 : 멀티 스레드로 바꿔줌 Worker를 통해서 조정 가능.
  • 차일드 프로세스 :: 노드 js 아닌 프로그램도 사용 가능 exec 터미널에서 쓰는 쉘 접근 가능 터미널 명령어 정상 처리되면 : stdout // 정상처리 안되면 stderror
  • 스폰 spawn 다른 프로그램 실행시킬 때 :: 파이썬 // 이벤트 리스너 달아서 // 정상 처리되면 : stdout // 정상처리 안되면 stderror

 

 

>>>노드 내장 객체

[Timer]

setTimeout(콜백함수,밀리초): 정해진 시간 이후에 함수 실행

setInterval(콜백함수,밀리초): 주어진 밀리 초마다 반복 실행

seImmediate(콜백함수) : 제일 빨리 실행시키고 싶은 함수. 즉시 실행

const timeout = setTimeout(()=>{
  console.log('setTimeout');
},1000)

clearTimeout(timeout)//타이머 취소하기

 const interval = setInterval(()=>{
   console.log('interval');
 },1000)

 clearInterval(interval)

const immediate = setImmediate(()=>{
  console.log('즉시실행');
})

clearImmediate(immediate)

*응용

const timeout = setTimeout(()=>{
  console.log('1.5초 후 실행')
},1500)

const interval = setInterval(()=>{
  console.log('1초마다');
},1000)

const timeout2 = setTimeout(()=>{
  console.log('4초 후 실행')
},4000)

setTimeout(()=>{
  clearTimeout(timeout2)
  clearInterval(interval)
},3500)

const immediate = setImmediate(() =>{
console.log('즉시실행');
})
//즉시실행
//1초마다
// 1.5초 후 실행
// 1초마다
// 1초마다

[module.exports]

module.exports = 'haha'

require('./var')
console.log(require.main.children[0],exports);

 

[process]

: 현재 실행되고 있는 노드 포로 세스에 대한 정보를 담고 있다.

window cmd 콘솔에 입력

PS C:\\Users\\user> node
Welcome to Node.js v16.13.1.
Type ".help" for more information.
> process.version
'v16.13.1'
> process.uptime
[Function: uptime]
> process.

프로세스의 정보를 검색해 볼 수 있다.

환경변수를 볼 수 있다.

nextTIck은 immdiate보다도 빨리 작동한다.

prodess.exit();은 과정을 종료시킨다.


>>>노드 내장 모듈

[os모듈]

: 자기 컴퓨터 정보를 확인할 수 있다.

웹브라우저 JS는 os확인 불가능

> os.totalmem()
16985473024
> os.cpus()
[
  {
    model: 'Intel(R) Core(TM) i5-10210U CPU @ 1.60GHz',
    speed: 2112,
    times: { user: 707843, nice: 0, sys: 665375, idle: 16730109, irq: 155250 }
  },
  {
    model: 'Intel(R) Core(TM) i5-10210U CPU @ 1.60GHz',
    speed: 2112,
    times: { user: 371890, nice: 0, sys: 241031, idle: 17489609, irq: 7781 }
  },
  {
    model: 'Intel(R) Core(TM) i5-10210U CPU @ 1.60GHz',
    speed: 2112,
    times: { user: 1304875, nice: 0, sys: 604515, idle: 16193140, irq: 16515 }
  },
  {
    model: 'Intel(R) Core(TM) i5-10210U CPU @ 1.60GHz',
    speed: 2112,
    times: { user: 533203, nice: 0, sys: 298218, idle: 17271093, irq: 21906 }
  },
  {
    model: 'Intel(R) Core(TM) i5-10210U CPU @ 1.60GHz',
    speed: 2112,
    times: { user: 1026750, nice: 0, sys: 485531, idle: 16590234, irq: 22734 }
  },
  {
    model: 'Intel(R) Core(TM) i5-10210U CPU @ 1.60GHz',
    speed: 2112,
    times: { user: 402515, nice: 0, sys: 266718, idle: 17433281, irq: 15640 }
  },
  {
    model: 'Intel(R) Core(TM) i5-10210U CPU @ 1.60GHz',
    speed: 2112,
    times: { user: 807437, nice: 0, sys: 476781, idle: 16818296, irq: 21437 }
  },
  {
    model: 'Intel(R) Core(TM) i5-10210U CPU @ 1.60GHz',
    speed: 2112,
    times: { user: 466234, nice: 0, sys: 348281, idle: 17288000, irq: 7765 }
  }
]
> os.homedir()
'C:\\\\Users\\\\user'
> os.type()
'Windows_NT'
> os.cpus().lenth
undefined
>

[path모듈]

폴더와 파일 경로를 쉽게 조작

var url = require('url');
var urlObject = url.parse('<http://localhost:3000/path/abc.php?id=student&page=12#hash>');
 
console.log(urlObject); // url 객체 정보 출력
console.log(url.format(urlObject)); // url 객체를 문자열로 출력
console.log('url.parse() : ', urlObject);

url의 풀 경로


[crypto]

비밀번호 → 암호화

암호화를 도와주는 모듈

  • 단방향 암호화 createHash

인코드 가능 디코드 불가능

//암호화
const crypto = require('crypto')

crypto.randomBytes(64,(err,buf) => {
  const salt = buf.toString('base64')
  console.log('salt',salt)
  crypto.pbkdf2('비밀번호',salt,100000,64, 'sha512',(err,key)=>{
    console.log('password:', key.toString('base64')
    )
  })
})
PS C:\\Users\\user\\Desktop\\java\\code> node url
salt CqZcjfUp81sE6qMhV5ZIEnq2gxiMrUEuQ7nZYnrqWjncTN2aGuuw6AI4MvJ1qwyXtGpBQg7qw0T7reKbiGB56A==
password: OsYky0X9cDvGeGH/KKu/rdjuvDXOlAjZXW9mNGKcINyfTje+eL2kJHQ93lB1lKqmfZVmrpLaFVoKiN0obOPnRQ==
  • 양방향
키값과 
알고리즘이 동일하다면
암호화 복구가능
chipher
decipher


[util]

: 각종 편의 기능을 모아둔 모듈

deprecated : 이 버전은 나중에 사용되지 않을 것이다 : 경고해줄 때

promisify ... 콜백 대신. then으로 쓰게 깔끔하게 바꿔줄 수 있게 하는 기능


[worker_threads]

스레드 : 작업자 수

잘 안 쓴다


[child_process]

다른 프로그램을 실행시키고 싶을 때 쓰는 모듈

 

[fs 모듈] : 파일 시스템 접근

파일 시스템에 접근하려면 fs 모듈이 필요하다.

버퍼 : 데이터를 한 번에 때려박을떄

stream : 배열 안에 내 데이터를 쪼개서 넣음

버퍼로 받은 데이터.toString() 해야 한다.

console.log(__dirname)
//경로확인
console.log(__filename)
//경로 + 파일이름
const fs = require('fs') //fs모듈을 불러온다
fs.readFile("./readme.txt",(err,data)=>{
  if(err){
    throw err
  }
  console.log(data);//data는 버퍼형태로 되어있다
  console.log(data.toString());//data를 스트링 형태로 읽을수 있게 바꿔줌.
// })//파라미터 1.내가읽고싶은거 2.콜백함수callback: (err: NodeJS.ErrnoException, data: Buffer

// //<Buffer ec a0 80 eb a5 bc 20 ec 9d bd ec 96 b4 ec a3 bc ec 84 b8 ec 9a 94 2e>
// //저를 읽어주세요.
//프라미스로 바꿔서 간편하게 사용가능하다.
const fs = require('fs').promises
fs.readFile("./readme.txt")
.then((data)=>{ //덴 사용가능
  console.log(data);
  console.log(data.toString())
})
.catch((err)=>{ //에러 처리
  console.error(err)
})
const fs = require('fs').promises

fs.writeFile('./writeme.txt','파일을 쓰겠습니다.')//경로와 파일이름 , 파일 안에 쓸 내용
// 콘솔에서 실행시키면 파일 생성된다.
.then(()=>{
  return fs.readFile("./writeme.txt")
})
.then((data)=>{
  console.log(data)
  console.log(data.toString())
})
.catch ((err)=>{
  console.error(err)
})
//<Buffer ed 8c 8c ec 9d bc ec 9d 84 20 ec 93 b0 ea b2 a0 ec 8a b5 eb 8b 88 eb 8b a4 2e>
//파일을 쓰겠습니다.
//생성한 파일을 읽을 수 있다.

 

 


const fs = require('fs').promises

//readme file을 읽어라
fs.readFile('./readme.txt')
.then((data)=>{
  console.log(data)
})
.catch((err)=>{
  console.error(err)
})

//readme file1을 읽어라
fs.readFile('./readme1.txt')
.then((data)=>{
  console.log(data)
})
.catch((err)=>{
  console.error(err)
})

//write me 파일을 만들고 파일을 출력해라.
fs.writeFile('./writeme.txt','writeme입니다!')
.then(()=>{
  return fs.readFile('./writeme.txt')
})
.then((data)=>{
  console.log(data.toString());
})
.catch((err)=>{
  console.error(err)
})

//wirteme1 파일을 만들고 그 파일에 path모듈을 사용해서 경로를 출력. 후 그 파일을 출력해라.
fs.writeFile('./writeme1.txt',__dirname)
.then((ata)=>{
  return fs.readFile('./writeme1.txt')
})
.then((data)=>{
  console.log(data.toString());
})
.catch((err)=>{
  console.error(err)
})

 

[버퍼]

버퍼로 바꿔주는것
from

어레이로 버퍼 조각나 있을떄 
합쳐주는 것
concat

빈 버퍼 . 길이 정해줄떄
버퍼.alloc

버퍼 출력 toString()
//버퍼로 바꿔보자
const buffer = Buffer.from('저를 버퍼로 바꿔보세요.')
console.log(buffer);

//버퍼의 렝스 구하기
console.log(buffer.length);
console.log(buffer.toString())

const arr = [
  Buffer.from('1번'),
  Buffer.from('2번'),
  Buffer.from('3번')
]
//나눠놓은것 합친다 concat
const buffer2 = Buffer.concat(arr)
console.log(buffer2.toString());

const buffer3 = Buffer.alloc(10)//빈버퍼 :어록 버퍼길이 정해줌
console.log(buffer3);
//<Buffer 00 00 00 00 00 00 00 00 00 00>

 

[스트림]

const fs = require('fs')
const readStream = fs.createReadStream('./readme.txt',{highWaterMark:16}) //스트림 데이터를 불러온다.:옵션 조각의 길이
const data = []

//이벤트로 받는다.
readStream.on('data',(chunk)=>{ // DATA이벤트발생하면 콜백함수 발생 (인자 CHUNK)
  data.push(chunk) // 배열에 조각난chunk 추가한다
  console.log('data',chunk,chunk.length);
})
//리드미를 다 읽을떄 까지 발생한다.
//다읽으면 end 
readStream.on('end',()=>{
  console.log('end :',Buffer.concat(data).toString());
})

readStream.on('err',(err)=>{
  console.log('err:',err);
})

const fs = require('fs')
const readStream = fs.createReadStream('./readme.txt',{highWaterMark: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('err',(err)=>{
  console.log('err:',err);
})

 

[스트리밍 라이트]

stream write

const fs = require('fs')

const writeStream = fs.createWriteStream('write-stream.txt')

writeStream.on('finisi', ()=>{
  console.log('파일쓰기완료');
})

writeStream.write('이 글을 씁니다. \\n')
writeStream.write('n 다음 행으로 넘어감.')
writeStream.end() //파일쓰기 완료됨 finish

//실행하면 txt 파일 생성된다.

const readStream = fs.createReadStream('./readme.txt')
const writeStream1 = fs.createWriteStream('write-stream_copy.txt')
readStream.pipe(writeStream1) //카피본 만들기

fs : 파일

싱크 async

프로세스.메모리

const fs = require('fs')

console.log('1:sync',process.memoryUsage().rss);
//1
const data1 = fs.readFileSync('./big.txt')
fs.writeFileSync('./big2.txt',data1)

console.log('2:sync',process.memoryUsage().rss);

//2
console.log('3:stream',process.memoryUsage().rss);
const streamData1 = fs.createReadStream('./big.txt')
const streamData2 =fs.createWriteStream('./big3.txt')
streamData1.pipe(streamData2)

streamData1.on('end',()=>{
  console.log('4:stream',process.memoryUsage().rss);

})

 

[이벤트]

const EventEmitter = require('events')
const myEvent = new EventEmitter()

//이벤트 등록
myEvent.on('event1', ()=>{
  console.log('이벤트1');
})
myEvent.on('event1', ()=>{
  console.log('이벤트1 추가발생');
})

myEvent.once('event2',()=>{
  console.log('이벤트 2 발생!');
})//이벤트를 한번밖에 실행을 못시킨다.

//함수로 콜백대신 부르기
const listner = () =>{
  console.log('event4 발생');
}
myEvent.on('event4',listner)

//이벤트 리스너 지우기
myEvent.removeListener('event4',listner)

//한번에 제거
myEvent.removeAllListeners('event1')

//이벤트 발생시키기
myEvent.emit('event1')
myEvent.emit('event1')
myEvent.emit('event2')
myEvent.emit('event2')
myEvent.emit('event4')

//현재 리스너가 몇개 연결되어 있는지 확인
console.log(myEvent.listenerCount('evnet1'));



//이벤트1
//이벤트1 추가발생
//이벤트1
//이벤트1 추가발생
//이벤트 2 발생!

//이벤트2는 한번만 발생.

[예외 처리하기]

process.on('uncaughtException', (err) => {
  console.error('예기치 못한 에러', err);
  process.exit();
});

setInterval(() => {
  throw new Error('서버를 고장내주마!');
}, 1000);

setTimeout(() => {
  console.log('실행됩니다');
}, 2000);
setInterval(() => {
  console.log('시작');
  try {
    throw new Error('서버를 고장내주마!');
  } catch (err) {
    console.error(err);
  }
}, 1000);
console.log(process.argv);
const fs = require('fs');

setInterval(() => {
  fs.unlink('./abcdefg.js', (err) => {
    if (err) {
      console.error(err);
    }
  });
}, 1000);

 

*실습

// 1. fs.copyFile로 readme.txt, writeme.txt로 복사하기 
// 2. then으로 "복사완료" 출력하기
// 3. catch로 오류잡고, err 출력하기
// 4. 복사할 파일이 없을 때, 복사할 파일 생성(readme.txt, 내용은 "복사할 파일입니다. wirteme.txt에 쓰도록 하겠습니다.")하고, 
//    writeme.txt 복사하기 (여러번 실행해서 처리해도 됨!)

const fs = require('fs').promises
fs.copyFile('readme.txt', 'writeme.txt')
  .then(() => {
      console.log("복사완료")
  })
  .catch(err => {
    console.error(err)
    if(err.code === "ENOENT") {
      fs.writeFile('readme.txt', '복사할 파일입니다. writeme.txt에 쓰도록 하겠습니다.')
    }
  })

'Web > Backend_node.js기초' 카테고리의 다른 글

Express : 라우터 관리  (0) 2022.02.07
Node.js_Express 모듈 / 미들웨어  (0) 2022.02.04
Node.js_ htt 모듈  (0) 2022.02.04
Node.js_시작 .  (0) 2022.02.04
AJAX_axios 통신 라이브러리 : 웹 앱  (0) 2022.02.04
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함