Node.js 란?

Node.js란 구글의 크롬V8 자바스크립트 엔진을 기반으로 한

고성능 네트워크 서버이다 싱글스레드 기반의

Event Loop를 기반으로 하며 파일, 네트웍 등에 대해서

비동기 IO처리를 하는 서버 미들웨어이다.


Node.js는 일반적으로 성능이 매우 빠른 고성능 서버로 알려져 있다.

이 고성능은 자바스크립트에서 오는것이 아니라 Node.js의 기본적인

구조인 싱글스레드 기반의 비동기 IO처리에서 온다.

하나의 쓰레드가 request를 받으면 처리를하고, File IO나

네트웍 처리(DB접근) 등이 있을 경우에는 IO 요청을 보내 놓고

작업을 처리하다가 IO요청이 끝나면 이벤트를 받아서 처리하는

이벤트 방식을 사용한다. 때문에 CPU가 IO응답을 기다리는 시간이 필요없고

대부분의 연산작업에 사용되기 때문에 높은 효용성을 가질 수 있다


Node.js의 이벤트 중심 아키텍처는 실시간 애플리케이션

특히 채팅 애플리케이션 및 게임에 적합하다. 클라이언트 측과

서버측 모두 JavaScript로 작성되므로 동기화 프로세스가

더 빠르다. 웹 소킷 프로토콜이 여기에 포함된다.


Node.js는 자바스크립트와 싱글스레드 모델에서 오는 장점이

있는 반면 여기서 오는 단점역시 많다.

기본적으로 싱글스레드 이기 때문에 하나의 작업 자체가

시간이 많이 걸리면, 전체 시스템의 성능이 아주 급격하게

떨어진다. 그래서 가벼운 작업 위주로 개발이 되어야 하고

자바스크립트에서 오는 문제점은 자바나 다른 언어에 비해서

명시성이 떨어지기 때문에 코드의 가독성이 상대적으로 떨어져

유지보수가 어려워질 수 있다.


또한 V8엔진을 기반으로 하는데, 이 V8엔진은

가비지컬렉션 기반의 메모리 관리를 하기 때문에

GC시 CPU사용률이 오버 되면서 순간적으로

서버가 나갈수 있다는 문제점을 가진다.


확장 모듈에서도 싱글 스레드 기반의 비동기 IO를 지원해야

하기 때문에 노드 전용 모듈을 사용해야 하는데

예를들어 Mysql 커넥션풀과 같은 경우에도 기존의

자바 기반의 DBCP 와같은 커넥션풀에 비해서

고급 기능이 적기 때문에 세밀한 기능 구현 등에서 한계를 가진다.


개발관점에서는 빠르고 쉬운 장점이 있지만 운영및 유지보수 에서는

테스트, 에러대처, 디버깅 등에 대해서는 신경 써야할 부분이 많다


끝으로 Node.js로 할수 있는 일을 간단하게 정리하자면

Node.js 는 동적 페이지 콘텐츠를 생성 할 수 있고

서버에서 파일을 CRUD 할수 있고 양식 데이터를 수집하며

Node.js는 데이터베이스의 데이터를 추가 삭제 수정 할수 있다 


댓글

Designed by JB FACTORY