티스토리 뷰
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 |
'Web > Node.js' 카테고리의 다른 글
[Sequelize] 기본개념 / MySQL Query 대신에 Sequelize로 구현한 후기 및 코드 공유 (0) | 2021.05.17 |
---|---|
[Express] Express Framework 프로젝트 생성 및 구조 / Nunjucks 표현식 (0) | 2021.04.29 |
[NodeJS] 패키지 관리/ 외부 모듈(패키지) / npm (0) | 2021.04.29 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 자바스크립트Promise
- dynamic-project
- 생성자필드메소드
- os
- 백준
- es6모듈
- jdk
- method와 function
- 정적멤버
- 클래스와객체
- @functools.wraps
- @functools.singledispatch
- 사용자정의예외클래스
- 인스턴스멤버
- Git
- 백준2206 파이썬 풀이
- @functools.lru_cache
- 객체지향개념
- yarn start
- nunjucks
- sequelize.fn
- java
- ES6
- 메이븐 저장소
- 자바빌드도구
- 자바스크립트Call-back
- nodejs
- 자바스레드
- 익명자식객체
- jre
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함