ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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의 특징 및 장단점

    Index

    goodgid.github.io

     

    댓글

Designed by black7375.