[Node.js] 01 - 노드의 시작하기(특성 및 역할)

2024. 4. 22. 01:46·Dev/Node.js

특성

1. Single Thread

✅ 노드 프로세스는 멀티 스레드지만 사용자가 직접 제어할 수 있는 스레드는 하나이기 때문에 싱글 스레드.

- Single Thread라 주어진 일을 하나밖에 처리하지 못한다.

- 대신 Non-blocking I/O 기능으로 일부 코드(I/O)를 백그라운드(다른 프로세스)에서 실행 가능하다.

- Single Thread 모델은 에러를 처리하지 못하는 경우 멈춘다.

- 프로그래밍 난이도가 쉽고, CPU, 메모리 자원을 적게 사용한다.

 

✅ 멀티 스레드 활용 가능(Node 14ver.)

- 멀티 스레드를 사용할 수 있도록 worker_threads 모듈 도입

- CPU를 많이 사용하는 작업인 경우에 활용 가능

 

2. Non-blocking I/O - 비동기 방식

- Blocking(= Synchronous): 이전 작업이 끝나야만 다음 작업을 수행

- Non-blocking(= Asynchronous): 이전 작업이 완료될 때까지 대기하지 않고 다음 작업을 수행

- Node.js 표준 라이브러리의 모든 I/O 메서드를 Non-blocking인 비동기 방식을 제공

 

3. Event-Driven

✅ 이벤트가 발생할 때 미리 지정해 둔 작업을 수행하는 방식

- Event e.g. 클릭, 네트워크 요청, 타이머 등

- Event listener: 이벤트를 등록하는 함수

- Callback function: 이벤트가 발생했을 때 실행될 함수

function first() {
    second();
    console.log('first');
}
function second() {
    third();
    console.log('second');
}
function third() {
    console.log('third');
}
first();

// 결과
// third
// second
// first

 

3-1. Event Loop

✅ Event Loop

- 이벤트 발생 시 호출할 콜백 함수들을 관리하고 호출할 순서를 결정

- 노드가 종료될 때까지 이벤트 처리를 위한 작업을 반복

 

✅ Thread-Pool(Background threads)

- 타이머나 I/O 작업(DB, File System, Network) 콜백, 이벤트 리스너들이 대기하는 공간

- 여러 작업이 동시에 실행될 수 있음

 

✅ Task queue

- 이벤트 완료 후 콜백 함수들이 순서대로 기다리는 공간

 


역할

1. 서버로서의 노드

✅ 노드는 서버를 구성할 수 있게 하는 모듈을 제공

✅ 노드 서버의 장점

- I/O 작업이 많은 서버에 적합하다. (빠른 실행 가능)

- 실시간 SNS 서비스, 데이터 중심의 서비스 등에 적합하다.

- Multi Thread 방식보다 쉽고 컴퓨터 자원을 적게 사용한다. 

✅ 노드 서버의 단점

- CPU 작업이 많은 서버로는 부적합하다. but, 노드 14부터 멀티 스레드를 사용할 수 있도록 모듈 도입.

- 싱글 스레드로 만들어졌기 때문에 멈추지 않도록 잘 관리해야 한다.

 

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

 

2. 서버 외의 노드

✅ 자바스크립트 런타입이기 때문에 용도가 서버에만 한정되지 않는다.

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

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

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

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

'Dev > Node.js' 카테고리의 다른 글

[Node.js] 06 - REPL/JS 파일 사용법  (0) 2024.04.22
[Node.js] 05 - AJAX / JSON  (1) 2024.04.22
[Node.js] 04 - async/await  (0) 2024.04.22
[Node.js] 03 - Promise  (1) 2024.04.22
[Node.js] 02 - Callback  (3) 2024.04.22
'Dev/Node.js' 카테고리의 다른 글
  • [Node.js] 05 - AJAX / JSON
  • [Node.js] 04 - async/await
  • [Node.js] 03 - Promise
  • [Node.js] 02 - Callback
min8282
min8282
  • min8282
    min8282
    min8282
  • 전체
    오늘
    어제
    • 분류 전체보기 (110)
      • Security (33)
        • System & Network (2)
        • Application (5)
        • Cloud (20)
      • Dev (18)
        • Node.js (12)
        • Hadoop (3)
        • BOJ (2)
      • Web3 & Blockchain (2)
        • Web3 (2)
      • K-Shield.Jr (15)
      • Web Security Academy (3)
      • Wargame (13)
        • Dreamhack (3)
        • Bandit (10)
      • NS (16)
        • CTF (6)
  • 블로그 메뉴

    • 홈
  • 링크

    • github
  • 공지사항

  • 인기 글

  • 태그

    web3
    prepared statement
    정처기
    메타코드
    정처기필기
    ESC1
    메타코드M
    web3 보안
    amazon s3 트리거
    web security academy
    Session Manager
    splunk db connect
    aws 트리거
    정처기 필기
    metacode
    오블완
    systems manager
    ELB
    Path Traversal
    aws lambda
    AWS SSM
    보안 그룹
    metacodem
    AWS CLI
    정보처리기사
    스마트 컨트랙트
    티스토리챌린지
    File Upload
    스마트컨트랙트
    탈중앙화
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
min8282
[Node.js] 01 - 노드의 시작하기(특성 및 역할)
상단으로

티스토리툴바