자바스크립트는 스크립트 언어라서 즉석에서 코드를 실행할 수 있음
REPL : R(Read), E(Evaluate) , P(Print), L(Loop)
실행방법 : node helloworld.js
export , import 방법
//var.mjs
export const odd = "MJS 홀수입니다."
export const even = "MJS 짝수입니다."
//func.mjs
import {odd , even} from './var.mjs';
function checkOddEven(num){
if (num % 2){
return odd ;
}
return even;
}
export default checkOddEven;
//index.mjs
import {odd, even} from './var.mjs';
import checknumber from './func.mjs';
function checkStringOddEven(str){
if (str.length % 2){
return odd ;
}
return even;
}
console.log(checknumber(10));
console.log(checkStringOddEven('hello'));
//process 실행결과
> process.version
'v20.16.0'
> process.uptime()
23.5491616
> process.cwd()
'D:\\code\\node'
//환경변수는 process.env 로 접근 가능
const secretId = process.env.SECRET_ID;
const secretCode = process.env.SECRET_CODE;
// path.js
const path = require('path');
console.log(path.join(__dirname,'/var.js'));
console.log(path.resolve(__dirname,'/var.js')); // 절대 경로가 있으면 앞에가 무시됨
//수행 결과
D:\code\node>node path.js
D:\code\node\var.js
D:\var.js
//readmefiles.js
const fs = require('fs').promises;
fs.readFile('./readme.txt')
.then((data)=> {
console.log(data);
console.log(data.toString());
})
.catch((err)=>{
throw err;
});
//수행결과
D:\code\node>node readmefiles.js
<Buffer ec a0 80 eb a5 bc 20 ec 9d bd ec 9c bc ec 84 b8 ec 9a 94 2e>
저를 읽으세요.
>> 버퍼 : 일정한 크기로 모아두는 데이터
- 일정한 크기가 되면 한 번에 처리
- 버퍼링 : 버퍼에 데이터가 찰 때까지 모으는 작업
>> 스트림 : 데이터의 흐름
- 일정한 크기로 나눠서 여러 번에 걸쳐서 처리
- 버퍼(또는 청크)의 크기를 작게 만들어서 주기적으로 데이터를 전달
- 스트리밍 : 일정한 크기의 데이터를 지속적으로 전달하는 작업
//buffer.js
const buffer = Buffer.from('저를 버퍼로 바꿔보세요.');
console.log(buffer);
console.log(buffer.length);
console.log(buffer.toString());
const array = [Buffer.from('띄엄 '), Buffer.from('띄엄 '), Buffer.from('띄어쓰기')];
console.log(Buffer.concat(array).toString());
console.log(Buffer.alloc(5));
//실행 결과
D:\code\node>node buffer.js
<Buffer ec a0 80 eb a5 bc 20 eb b2 84 ed 8d bc eb a1 9c 20 eb b0 94 ea bf 94 eb b3 b4 ec 84 b8 ec 9a 94 2e>
33
저를 버퍼로 바꿔보세요.
띄엄 띄엄 띄어쓰기
<Buffer 00 00 00 00 00>
//createReadStream.js
const fs = require('fs');
const readStream = fs.createReadStream('./readme3.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('error',(err)=>{
console.log('error:', err);
});
//실행결과
D:\code\node>node createReadStream.js
data <Buffer ec a0 80 eb 8a 94 20 ec a1 b0 ea b8 88 ec 94 a9> 16
data <Buffer 20 ec a1 b0 ea b8 88 ec 94 a9 20 eb 82 98 eb 88> 16
data <Buffer a0 ec 84 9c 20 ec a0 84 eb 8b ac eb 90 a9 eb 8b> 16
data <Buffer 88 eb 8b a4 2e 20 eb 82 98 eb 88 a0 ec a7 84 20> 16
data <Buffer ec a1 b0 ea b0 81 ec 9d 84 20 63 68 75 63 6b eb> 16
data <Buffer 9d bc ea b3 a0 20 eb b6 80 eb a6 85 eb 8b 88 eb> 16
data <Buffer 8b a4 2e 0d 0a ec 95 88 eb 85 95 ed 95 98 ec 84> 16
data <Buffer b8 ec 9a 94 2e 20 ed 97 ac eb a1 9c 20 eb 85 b8> 16
data <Buffer eb 93 9c 20 ed 97 ac eb a1 9c 20 ec 8a a4 ed 8a> 16
data <Buffer b8 eb a6 bc 20 ed 97 ac eb a1 9c 20 eb b2 84 ed> 16
data <Buffer 8d bc> 2
end: 저는 조금씩 조금씩 나눠서 전달됩니다. 나눠진 조각을 chuck라고 부릅니다.
안녕하세요. 헬로 노드 헬로 스트림 헬로 버퍼
//createWriteStream.js
const fs = require('fs');
const { writeHeapSnapshot } = require('v8');
const writeStream = fs.createWriteStream('./writeme2.txt');
writeStream.on('finish',()=>{
console.log('파일 쓰기 완료');
});
writeStream.write('이 글을 씁니다.\n');
writeStream.write('한 번 더 씁니다.');
writeStream.end();
//실행결과
D:\code\node>node createWriteStream.js
파일 쓰기 완료
//writeme2.txt 가 생성 되고 내용 확인 가능
>> 예외 처리
- 노드 스레드를 멈춤
- 노드는 기본적으로 싱글 스레드라 스레드가 멈춘다는 것은 프로세스가 멈추는 것
- 에러 처리는 필수
>> 기본적으로 try catch문으로 예외를 처리
- 에러가 발생할 만 곳을 try catch로 감쌈
//error.js
setInterval(()=>{
console.log('시작');
try {
throw new Error('서버를 고장낸다');
}catch(err){
console.error(err);
}
}, 1000);
// 실행결과
D:\code\node>node error.js
시작
Error: 서버를 고장낸다
at Timeout._onTimeout (D:\code\node\error.js:4:15)
at listOnTimeout (node:internal/timers:581:17)
at process.processTimers (node:internal/timers:519:7)
시작
Error: 서버를 고장낸다
at Timeout._onTimeout (D:\code\node\error.js:4:15)
at listOnTimeout (node:internal/timers:581:17)
at process.processTimers (node:internal/timers:519:7)
^C