-
[Node.js] 특징 및 장단점언어/Node.js 2020. 4. 1. 16:20
Node.js 특징
- Node.js는 Single-Thread의 non-blocking I/O 이벤트 기반 비동식 방식으로 작동한다.
- JavsScript 엔진(V8 Engine)으로 빌드 된 JavaScript 런타임이다.
- 따라서, 사용자의 요청은 한 곳에서 받지만 작업은 실질적으로 멀티쓰레드로 운영하여 결과를 구현한다.
- 예를들어, 푸드코트의 경우 주문은 한 곳에서 받지만 음식은 각 입점된 식당에서 만든다.
- 음식이 완성된 순서대로 각 식당에서 호출벨을 통해 손님을 부르고 손님은 음식을 픽업하게 된다.
- 여기서, 계산을 담당하는 직업은 싱글스레드이고, 각 요리를 완성해 벨을 호출하는 식당들은 비동기 방식이다.
- 입력은 하나의 스레드에서 받지만 순서대로 처리 하지 않고 먼저 처리된 결과 값을 이벤트로 반환해주는 방식이
바로 노드가 사용하는 싱글 스레드 비동기 방식이다.
- 싱글 쓰레드 방식은 일이 아무리 많아도 쓰레드는 1개이기 때문에 메모리 사용량과 시스템 리소스 사용량에는 변화가 거의 없다.
- 따라서 대규모 네트워크 프로그램을 개발하기 적합한 형태이다.
- 하지만 쓰레드 하나가 무너진다면 프로그램 전체에 문제가 발생하게 된다.
Node.js의 쓰레드 풀
- Node.js는 application 자체에서는 단일 스레드로 실행되지만 Background에서 thread pool을 구성해 작업을 수행한다.
- 따라서, 위 예제에서의 각 식당은 thread pool을 의미하게 된다.
- 중요한 것은 쓰레드 풀을 관리하는 것이 개발자가 아니라 플랫폼이다.
- 개발자는 쓰레드 하나를 관리하듯 프로그래밍하면 플랫폼이 여러 쓰레드를 효율적으로 운용하게 된다.
Node.js 장점
- 자바스크립트를 동일하게 사용해서 서버단 로직을 처리할 수 있다는게 가장 큰 장점
새로운 언어를 습득하지 않고도 자바스크립트를 활용해 서버기술을 빨리 향상시킬 수 있다. - 이벤트 기반 비동기방식이라 서버 무리가 적다.
- npm(node package manager)을 통한 다양한 모듈(패키지) 제공
npm을 이용해 자신이 필요한 라이브러리와 패키지를 검색해서 설치하고 사용할 수 있기 때문에 효율성이 좋다. - 구글이 만드는 JavaScript 엔진을 사용한다.
구글은 V8 엔진 성능 업그레이드를 계속 하고 있다. - C++로 개발된 V8 JavaScript 엔진이기 때문에 확장성이 좋다.
Node.js 단점
- 이벤트 기반 비동기방식이라 서버단 로직이 복잡한 경우 콜백함수의 늪에 빠질 수 있다.
예를 들어, 한번의 요청에 대해 DB에서 조회한 결과값에 따라 다른 로직을 처리해야 하며, 이런 로직이 여러개인 경우 콜백함수 늪 (Callback Hell) 에 빠진다. - 단일 쓰레드(Single Thread)이기 때문에 하나의 작업 자체가 많이 걸리는 웹서비스에는 어울리지 않다.
게시판형태와 같이 가벼운 I/O가 많은 웹서비스에 어울린다. - 코드가 수행되어야 코드에 에러가 있는지 알 수 있으며, 에러가 날 경우 프로세스가 내려가기 때문에 테스트가 엄청 중요하다. 반드시 모든 케이스에 대해 소스코드를 검증해야 한다.
Node.js 가 어울리는 웹서비스
- 간단한 로직.
- 대용량(동시에 여러 request를 처리)
- 빠른 응답시간 요구
- 빠른 개발 요구
- 비동기방식에 어울리는 서비스(네트워크 스트리밍 서비스, 채팅 서비스 등)
Node.js 가 어울리지 않는 웹서비스
- 단일 처리가 오래 걸리는 경우 : 싱글 쓰레드이기 때문
- 서버 체크로직이 많은 경우 : 비동기방식이기 때문에 CallBack Hell에 빠지지 않기 위해
- 업무 복잡도/난이도가 높은 경우 : 에러가 나면 서버가 죽기 때문에 코드 품질 중요
아래 블로그를 참고한 포스팅입니다!
goodgid.github.io/Node-Pros-and-Cons/
'언어 > Node.js' 카테고리의 다른 글
Node.JS & Express 프로젝트 설치 (0) 2020.04.02 [Node.js] 동기와 비동기, 블로킹과 논블로킹 (0) 2020.04.01 [Node.js] 구조 및 동작 원리 (0) 2020.04.01 댓글
- Node.js는 Single-Thread의 non-blocking I/O 이벤트 기반 비동식 방식으로 작동한다.