티스토리 뷰

1. Node.js  개념 및 내부 구조 

  • 크롬 V8 자바스크립트 엔진으로 빌드된 자바스크립트 런타임 
  • 런타임: 프로그램들을 실행할 수 있게 해주는 가상 머신이다. 

[내부 구조] 

  • V8 엔진 : 오픈 소스 자바스크립트 엔진 
  • libuv : 노드의 특성인 이벤트 기반, 논블로킹 I/O 모델을 구현한 라이브러리 
  • 우리는 Node.js Core Library만 알면 되고, 나머지는 내부적으로 작동된다. 

2. Node.js 특징 

1.  이벤트 기반 처리 

이벤트가 발생할 때 이벤트 핸들러(리스너)에 미리 지정해둔 작업(콜백 함수)을 수행하는 방식이다. 

-> 즉, 이벤트 기반 처리기 때문에 비동기가 쉬워진다. 

 

2. 논블로킹(=비동기) I/O 처리 

  • 오래 걸리는 함수를 백그라운드로 보내서 다음 코드가 먼저 실행 
  • I/O 작업(파일 시스템 접근, 네트워크 요청), 압축, 암호화 등을 논블로킹 방식으로 실행 
  • 나머지 코드는 블로킹 방식으로 실행됨 

동기 = 블로킹 

비동기 = 논블로킹 = 백그라운드 = 스레드 

 

3. 싱글 스레드, 논블로킹 모델 사용  ★

  • 노드 프로세스는 멀티 스레드지만 직접 다룰 수 있는 스레드는 하나이다. 
  • V14 부터 멀티 스레드 사용 가능
  • 프로세스 : 운영체제에서 할당하는 작업의 단위, 프로세스 간 자원 공유 X 
  • 스레드 : 프로세스 내에서 실행되는 작업의 단위, 부모 프로세스 자원 공유
  • 논 블로킹 모델을 채택하여 I/O 코드를 백그라운드에서 실행 
  • 요청을 먼저 받고, 완료될 때 응답함 
  • I/O 관련 코드가 아닌 경우 싱글 스레드, 블로킹 모델과 같아짐 

3. 서버로서의 Node.js  vs 클라이언트로서의 Node.js  [장-단점]

▶  서버로서의 Node.js 

  • 기본적으로 웹 서버 기능 탑재 
  • 주요 개발 프레임워크 : express

 

▶  클라이언트로서의 Node.js 

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

cf> 주기억 장치 = RAM 

cf> 연산 장치 = CPU

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

 

4. Node.JS  vs Spring 비교 

실행환경 Node.js  JRE
언어 JavaScript Java
표준 API os, process, path,... java.* , javax.*
웹 서버 프레임워크 Express Spring(Spring Framework, Boot)
SPA 프레임워크 Angular, React, AngularJS, jQuery AngularJS, jQuery
웹 서버  자체 기능 사용  WAS 설치 (Tomcat)
DB 모든 DB(Oracle, MySQL, ...)
ORM(Mapper) Sequelize MyBatis