Node.js: Difference between revisions
From IT위키
(새 문서: ;V8(자바스크립트 엔진) 위에서 동작하는 이벤트 처리 I/O 프레임워크 == 특징 == * 비동기: 비동기 I/O를 구현하여 고속의 서버기능 구...) |
(→장단점) |
||
(7 intermediate revisions by 6 users not shown) | |||
Line 1: | Line 1: | ||
[[분류:네트워크]][[분류:인터넷]] | |||
;[[V8|V8(자바스크립트 엔진)]] 위에서 동작하는 이벤트 처리 I/O 프레임워크 | ;[[V8|V8(자바스크립트 엔진)]] 위에서 동작하는 이벤트 처리 I/O 프레임워크 | ||
Line 5: | Line 6: | ||
* 싱글스레드: 멀티스레드 모델을 배제하고 싱글스레드 모델로 스레드 레벨의 Context Switching의 자원 효율적 사용 | * 싱글스레드: 멀티스레드 모델을 배제하고 싱글스레드 모델로 스레드 레벨의 Context Switching의 자원 효율적 사용 | ||
* Event Loop: Callback 함수를 통한 Event Loop로 사용자의 요구사항을 처리하는 구조 | * Event Loop: Callback 함수를 통한 Event Loop로 사용자의 요구사항을 처리하는 구조 | ||
== 장단점 == | |||
{| class="wikitable" | |||
! 구분 | |||
! 장단점 | |||
! 내용 | |||
|- | |||
| rowspan="4" | 장점 | |||
| NPM (Node Package Manager) 지원 | |||
| 확장 기능을 제공하는 모듈 수십만 개 | |||
|- | |||
| 비동기 I/O | |||
| 작업이 완료될 때까지 기다리지 않아 응답속도 빠름 | |||
|- | |||
| 싱글 스레드 | |||
| 이벤트 기반 싱글 스레드로 Context change 오버헤드 없음 | |||
|- | |||
| 간결한 코드 | |||
| 자바 대비 코드량 33% 감소 | |||
|- | |||
| rowspan="3" | 단점 | |||
| OS 필요 | |||
| 리눅스와 같은 OS가 필요하여 임베디드로 활용 어려움 | |||
|- | |||
| 콜백 Hell 발생 | |||
| Callback이 중첩될 경우 가독성, 구현성 크게 떨어짐 | |||
|- | |||
| 싱글 스레드 | |||
| 하나의 작업 지연으로 시스템 성능 저하, 멀티코어 머신 최적화 어려움 | |||
|} | |||
== node.js 동작 구조 == | |||
[[파일:Nodejs.jpg]] | |||
== 구성 요소 == | == 구성 요소 == | ||
* V8 : | * '''V8''': 구글의 오픈소스 Javascript 엔진(크롬에서 사용됨) | ||
* libeio : 이벤트 기반의 모든 게 비동기로 동작하는 C언어용 I/O | * '''libuv''': 이벤트 기반의 비동기 I/O, 이벤트처리 라이브러리. 아래 두 라이브러리는 현재 libuv로 대체됨 | ||
* libev : 다양한 기능을 | ** libeio(현재 미사용): 이벤트 기반의 모든 게 비동기로 동작하는 C언어용 I/O | ||
* Node | ** libev(현재 미사용): 다양한 기능을 가진 고성능 이벤트 루프 라이브러리 | ||
* Node | * '''Low-Level Components''': HTTP 파서, OpenSSL 등 C로 개발된 모듈 | ||
* '''Node Binding''': C와 자바스크립트 바인딩 처리 | |||
* '''Node Standard Library''': 자바스크립트로 이루어진 기본 라이브러리 영역 |
Latest revision as of 13:06, 17 September 2020
- V8(자바스크립트 엔진) 위에서 동작하는 이벤트 처리 I/O 프레임워크
특징[edit | edit source]
- 비동기: 비동기 I/O를 구현하여 고속의 서버기능 구현가능
- 싱글스레드: 멀티스레드 모델을 배제하고 싱글스레드 모델로 스레드 레벨의 Context Switching의 자원 효율적 사용
- Event Loop: Callback 함수를 통한 Event Loop로 사용자의 요구사항을 처리하는 구조
장단점[edit | edit source]
구분 | 장단점 | 내용 |
---|---|---|
장점 | NPM (Node Package Manager) 지원 | 확장 기능을 제공하는 모듈 수십만 개 |
비동기 I/O | 작업이 완료될 때까지 기다리지 않아 응답속도 빠름 | |
싱글 스레드 | 이벤트 기반 싱글 스레드로 Context change 오버헤드 없음 | |
간결한 코드 | 자바 대비 코드량 33% 감소 | |
단점 | OS 필요 | 리눅스와 같은 OS가 필요하여 임베디드로 활용 어려움 |
콜백 Hell 발생 | Callback이 중첩될 경우 가독성, 구현성 크게 떨어짐 | |
싱글 스레드 | 하나의 작업 지연으로 시스템 성능 저하, 멀티코어 머신 최적화 어려움 |
node.js 동작 구조[edit | edit source]
구성 요소[edit | edit source]
- V8: 구글의 오픈소스 Javascript 엔진(크롬에서 사용됨)
- libuv: 이벤트 기반의 비동기 I/O, 이벤트처리 라이브러리. 아래 두 라이브러리는 현재 libuv로 대체됨
- libeio(현재 미사용): 이벤트 기반의 모든 게 비동기로 동작하는 C언어용 I/O
- libev(현재 미사용): 다양한 기능을 가진 고성능 이벤트 루프 라이브러리
- Low-Level Components: HTTP 파서, OpenSSL 등 C로 개발된 모듈
- Node Binding: C와 자바스크립트 바인딩 처리
- Node Standard Library: 자바스크립트로 이루어진 기본 라이브러리 영역