[Node.js 교과서] 섹션 1 - 노드의 정의와 특성

2024. 10. 11. 19:52·Node.js

노드의 정의

노드란 뭘까? 공식문서에서는 노드를 이렇게 설명한다.

Node.js는 Chrome V8 Javascript 엔진으로 빌드된 자바스크립트 런타임입니다.

노드는 서버가 아닌 런타임이다.


자바스크립트 런타임(RunTime)

런타임은 특정 언어로 만든 프로그램들을 실행할 수 있는 환경을 말한다.

자바스크립트 자체는 원래 브라우저에서 밖에 실행 할 수 없었다. 그 이유는 브라우저에는 자바스크립트 런타임이 내장되었기 때문이다. 그래서 자바스크립트를 브라우저 이외에서 실행 하려면 별도의 런타임이 필요하다. 그게 바로 Node.js다.

Node.js는 2008년 구글에서 만든 크롬에 탑재된 V8엔진을 사용해 개발되었다.

노드는 V8엔진과 비동기작업을 처리하는 libuv 라이브러리를 사용한다.

이렇기 때문에 노드는 서버가 아닌 런타임이라 말하고 서버로 동작하는 코드를 실행해 서버가 만들어지는거다.

노드기반으로 만들어진 프레임워크

  • 웹 프레임워크: Angular, React, Vue, Meteor등
  • 모바일 앱 프레임워크: React Native
  • 데스크탑 개발 도구: Electron

노드의 특성

노드의 특성으로 세가지가있다

  • 노드는 이벤트 드리븐 방식으로 동작한다.
  • 노드는 논블로킹 방식으로 I/O작업 등을 처리한다.
  • 노드는 싱글 스레드 방식으로 작업을 수행한다.

노드는 이벤트 드리븐 방식으로 동작한다

이벤트 드리븐(event-driven)또는 이벤트 기반이란 이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식을 말한다.

노드는 이벤트 기반 방식으로 동작하기에 이벤트가 발생하면 이벤트 리스너에 등록해둔 콜백 함수를 호출한다.

노드는 호출한 이벤트를 처리하거나 호출된 이벤트가 없으면 이벤트가 발생할때까지 대기한다.

여러 이벤트가 동시에 발생했을때 어떤 순서로 콜백함수를 호출할지 이벤트 루프가 판단해 호출한다.


노드는 논블로킹 방식으로 I/O 작업 등을 처리한다

작업에는 두가지 종류로 나뉜다.

  • 비동기 작업: 동시에 실행될 수 있는 작업
  • 동기 작업: 동시에 실행될 수 없는 작업

기본적으로 자바스크립트 코드는 동시에 실행될 수 없다. 하지만 자바스크립트상에서 돌아가는것이 아닌 I/O 작업 같은 것은 동시에 처리될 수 있다.


블로킹과 논블로킹

노드는 동시에 실행될 수 없는 작업을 수행할 때 논블로킹(non-blocking) 방식으로 작업을 수행한다.

  • 논블로킹(non-blocking) : 작업이 완료될 때까지 대기하지 않고 다음 작업을 수행하는 것을 의미한다.
  • 블로킹(bocking) : 이전 작업이 끝나야만 다음 작업을 수행하는 것을 말한다.

논블로킹과 동시가 같은 의미가 아니다. 동시성은 동시처리가 가능한 작업을 논블로킹 처리해야 얻을 수 있다.

노드에서는 동기와 블로킹이 유사하고, 비동기와 논블로킹이 유사한 개념으로 쓰인다.


노드는 싱글스레드 방식으로 동작한다.

싱글 스레드란 스레드가 하나뿐이라는 의미다. 싱글 스레드를 알기 위해서는 프로세스와 스레드의 차이를 알아야한다.

  • 프로세스(Proccess): 운영체제에서 할당하는 작업의 단위다. 작업중인 프로세스는 개별적으로 동작하고, 프로세스 간 메모리등의 자원을 공유하지 않는다.
  • 스레드(Thread): 프로세스 내에서 실행되는 흐름의 단위다. 프로세스는 스레드를 여러 개 생성해 여러 작업을 동시에 처리할 수 있다. 스레드는 부모 프로세스의 자원을 공유한다.

노드는 실행하면 먼저 프로세스가 하나 생성된다. 그 프로세스에서 여러 스레드를 생성하지만, 그중에 직접 제어할 수 있는 스레드는 단 하나이기 때문에 노드는 싱글 스레드 방식으로 동작한다고 흔히들 말한다.

블로킹이 심하게 일어나는 작업이 아니라면 싱글스레드로 충분하다. 하지만 블로킹이 심하게 일어나는 작업이 있다면 논블로킹 방식으로 바꿔 대기시간을 최소화하게 해야한다.

  • 멀티스레드: 여러 작업을 동시에 처리할수 있는 방식
  • 싱글스레드: 작업을 단 하나만 처리할 수 있는 방식

노드는 논블로킹 싱글 스레드 모델이다.

노드는 여러 이벤트가 동시에 들어온다면 그 이벤트들을 일단 모두 받고나서 우선 처리할 이벤트를 처리한다. 이 방식으로 동작한다면 하나의 프로세스로 많은 작업을 처리할 수 있다는 장점이 있지만, 하나의 프로세스는 하나의 작업만 할 수있기 때문에 그 작업이 오래걸린다면 그 작업을 처리하느라 다른 이벤트에 대한 작업은 덩달아 오래 걸릴수 밖에 없다.

그렇다면 멀티 스레드 방식으로 작업하면 되겠지만 그것은 매우 어렵기 때문에 멀티 프로세싱 방식으로 프로세스를 여러개 만들어 그 작업을 처리한다.

멀티 스레딩 멀티 프로세싱
하나의 프로세스 안에서 여러 개의 스레드 사용 여러 개의 프로세스 사용
CPU 작업이 많이 사용될 때 사용 I/O 요청이 많을 때 사용
프로그래밍이 어려움 비교적 쉬움

I/O 작업을 처리할 때는 멀티 스레딩보다 멀티 프로세싱이 효율적이다.


서버로서의 노드

서버에는 기본적으로 I/O요청이 많이 발생하므로 노드를 서버로 사용한다면 좋다.

노드 서버는 어디에서 사용하면 좋을까?

노드는 논블로킹 싱글스레드 방식으로 동작한다는 특성이 있다.

이 특성에 맞게 개수는 많지만 크기는 작은 데이터를 주고받는 서버에 적합하다.

노드는 멀티 스레드 기능이 있기는 하지만 싱글스레드에 강점이 있기 때문에 이미지나 비디오 처리, 대규모 데이터 처리와 같이 CPU를 많이 사용하는 작업을 이용한 서버에는 적합하지 않다.

이러한 작업에 노드를 사용하려면 AWS람다(AWS Lambda), 구글 클라우드 펑션스(Google Cloud Functions)을 이용해 CPU를 많이 사용하는 작업을 위임한다.

노드서버의 장단점

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

참고

 

Node.js 교과서 : 네이버 도서

네이버 도서 상세정보를 제공합니다.

search.shopping.naver.com

 

[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지 강의 | 제로초(조현영) - 인프런

제로초(조현영) | 노드가 무엇인지부터, 자바스크립트 최신 문법, 노드의 API, npm, 모듈 시스템, 데이터베이스, 테스팅 등을 배우고 5가지 실전 예제로 프로젝트를 만들어 나갑니다. 클라우드에 서

www.inflearn.com

 

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

[Node.js 교과서] 섹션 6 - 익스프레스 웹 서버 만들기  (0) 2024.11.03
[Node.js 교과서] 섹션 5 - 패키지 매니저  (1) 2024.10.25
[Node.js 교과서] 섹션 4 - http 모듈로 서버 만들기  (1) 2024.10.23
[Node.js 교과서] 섹션 3 - 노드의 기본 기능 익히기  (1) 2024.10.19
[Node.js 교과서] 섹션 2 - 알아두어야 할 자바스크립트  (0) 2024.10.12
'Node.js' 카테고리의 다른 글
  • [Node.js 교과서] 섹션 5 - 패키지 매니저
  • [Node.js 교과서] 섹션 4 - http 모듈로 서버 만들기
  • [Node.js 교과서] 섹션 3 - 노드의 기본 기능 익히기
  • [Node.js 교과서] 섹션 2 - 알아두어야 할 자바스크립트
bearn_soo
bearn_soo
추상적으로 받아들이되 구체적으로 이해하라
  • bearn_soo
    초밥구이
    bearn_soo
  • 전체
    오늘
    어제
    • 분류 전체보기 (78)
      • Javascript (16)
      • Node.js (18)
      • 알고리즘 (8)
      • 네트워크 (2)
      • 데이터베이스 (10)
      • 운영체제 (11)
      • 자료구조 (6)
      • 공부기록 (7)
  • 인기 글

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
bearn_soo
[Node.js 교과서] 섹션 1 - 노드의 정의와 특성
상단으로

티스토리툴바