Node.js

개념
- 이벤트 기반의 비동기 I/O Framework로 확장성 있는 네트워크 애플리케이션(Server-Side) 개발에 사용되는 소프트웨어 플랫폼.

I. Single Thread 기반의 비동기 IO 지원, Node.js 의 개요

가. Node.js 의 정의

- 이벤트 기반의 비동기 I/O Framework로 확장성 있는 네트워크 애플리케이션(Server-Side) 개발에 사용되는 소프트웨어 플랫폼.

 

나. Noe.js의 특징

특징

설명

비동기 I/O

비동기 I/O를 구현하여 고속의 서버 기능 구현 가능

 

Single Thread

Multi Thread 모델 배제, Single Thread 모델로 Thread 레벨의 Context Switching 자원 효율적 사용

Event Loop

Callback함수를 통한 Event Loop로 사용자의 요구사항을 처리하는 구조

NW Application Framework

복잡한 네트워크 전문 지식 없이도 간단한 코딩으로 네트워크 프로그램 개발 가능한 프레임워크

서버 사이드

Server –Side 기반의 자바 스크립트 개발 지원

 

스크립트 기반

고수준의 동시성 프로그램을 스크립트만으로 작성 가능

 

 

 

II. Node.js 구성도 및 구성요소

가. Node.js의 구성도

- 노드는 C/C++과 자바스크립트로 생성되며 C/C++은 레이어와 시스템 통합을 위해 사용 

 

나. Node.js의 구성요소

구성요소

내용

Node Standard

Library

V8과 연결되어 기능수행을 도와주는 자바스크립트 기본 라이브러리 , 노드바인딩과 연결

Node

Bindings

c/c++로 구성된 시스템 바인딩 레이러

소켓 , http 등 통신 기능 제공 (DOM 관련 기능 제공 안됨)

V8 Engine

구글에서 개발된 오픈소스 JIT 가상머신 형식의 자바스트립트 엔진

Thread Pool

Libeio라는 비동기 I/O 라이브러리로 구성

POSIX API에 기반을 두고 있으며 파일 처리 관련 작업 수행

Event Loop

다양한 기능을 가진 고성능 이벤트 루프 라이브러리 Libev로 구성 (libevent라는 라이브러리와 유사)

 

 

III. Node.js의 장단점 및 Angular.js와 비교.

가. Node.js의 장단점

구분

장단점

내용

장점

단순한 개발구조

  • Javascript 기반이고, 개발 구조가 매우 단순화 되어

있어서 빠르게 개발이 가능

용이한 웹

Push 구현

  • socket.io를 이용한 웹 push 구현이 매우 쉽게 구현 가능
  • push 메커니즘은 socket.io API 내에 추상화 되어 있기 때문에, 어떤 기술로 구현이 되어 있던 간에 개발자 입장에서는 socket.io만 쓰면 간단하게 웹 기반의 push 서비스가 구현이 가능

non-blocking IO 모델 지원

  • node.js는 non-blocking I/O 컨셉을 사용., I/O 요청이 있으면, I/O 처리를 던져 놓고, thread나 process는 다른 일을 하고 있다가, I/O 처리가 끝나면 이에 대한 이벤트를 받아서 응답을 처리하여 CPU를 효율적으로 사용

단점

응답시간 저하

가능

  • CPU 작업이 많은 애플리케이션에는 절대 적당하지 않음.
  • Node.js는 single thread 구조이고, 하나의 request를 처리할 때 CPU를 많이 사용하면 다른 요청 처리가 지연되게 되고, 전체적인 응답시간 저하로 연결

인터페이스가 많은 웹 개발에 부적절

  • 기존의 Ruby on Rails나 Python, PHP 등의 웹 프레임웍의 성숙도가 높기 때문 CRUD가 많고 페이지가 많은 웹개발에는 적절하지 않다 (다소 이견 있음)

 

나. Node.js와 Angular.js와 비교.

구분

Node.js

Angular.js

정의

이벤트 기반의 비동기 I/O Framework로 확장성 있는 네트워크 애플리케이션 (Server-Side) 개발에 사용되는 소프트웨어 플랫폼

화면을 조작하는 라이브러리나 프레임워크가 아닌 모든 애플리케이션을 개발하는 프론트앤드 프레임워크

특징

- Asynchronous I/O 기반

- Single Thread 사용

- Server-Side 개발 지원

- Two Way Data-Binding

- Dependency Injection

- Directives

구조

목적

미들웨어 역할 수행

MVC 프레임워크 역할 수행

댓글