서버로서의 노드

 >> 서버 : 네트워크를 통해 클라이언트에 정보나 서비스를 제공하는 컴퓨터 또는 프로그램

 >> 클라이언트 : 서버에 요청을 보내는 주체(브라우저, 데스크탑 프로그램, 모바일 앱, 다른 서버에 요청을 보내는 서버)

 >> 예시

   - 브라우저(클라이언트, 요청)가 길벗 웹사이트(서버, 응답)에 접속

   - 핸드폰(클라이언트)을 통해 앱스토어(서버)에서 앱 다운로드

 >> 노드 != 서버

 

 >> 노드서버의 장단점

장점 단점
멀티 스레드 방식에 비해 컴퓨터 자원을 적게 사용함 싱글 스레드라서 CPU 코어를 하나만 사용함
I/O 작업이 많은 서버로 적합 CPU 작업이 많은 서버로는 부적합
멀티 스레드 방식보다 쉬움 하나뿐인 스레드가 멈추지 않도록 관리해야 함
웹 서버가 내장되어 있음 서버 규모가 커졌을 때 서버를 관리하기 어려움
자바스크립트를 사용함 어중간한 성능
JSON 형식과 호환하기 쉬움  

 

 >> CPU 작업을 위해 AWS Lambda나 Google Cloud Functions 같은 별도 서비스 사용

 >> 페이팔 , 넷플리스, 나사 , 월마트, 링크드인, 우버 등에서 메인 또는 서브 서버로 사용

 

 

서버 외의 노드 

 >> 자바스크립트 런타임이기 때문에 용도가 서버에만 한정되지 않음

 >> 웹, 모바일, 데스크탑 애플리케이션에도 사용

  - 웹 프레임워크 : Angular, React, Vue, Meteor 등

  - 모바일 앱 프레임워크 : React Native

  - 데스크탑 개발 도구 : Electron(Atom, Slack, VSCode, Discord 등 제작)

 

 

 

'Javascript > Node' 카테고리의 다른 글

var const let 자바스크립트 변수 상수  (0) 2024.10.30
Node.js 다운로드 설치 최신버전 22버전  (0) 2024.10.29
노드의 특성  (0) 2024.10.27
노드의 정의  (0) 2024.10.26
노드 교과서 섹션0  (0) 2023.09.07

자바스크립트는 스크립트 언어라서 즉석에서 코드를 실행할 수 있음

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

'Javascript > Node' 카테고리의 다른 글

노드 교과서 섹션0  (0) 2023.09.07
노드 교과서 섹션 1  (0) 2023.09.06
노드 교과서 섹션 3  (0) 2023.09.01
노드 교과서 섹션 4  (0) 2023.08.31
노드 교과서 섹션 5  (0) 2023.08.29

+ Recent posts