node.js 의 장점과 단점

2016. 1. 22. 14:32·프레임워크/[JS] node.js

[장점]

- 싱글스레드, 비동기 IO 처리에 기반한 빠른 속도

- 파일 I/O나 네트워크 처리를 이벤트 드리븐 방식으로 처리하기 때문에 빠른 처리가 가능함

- CPU의 대기시간을 최소화 할 수 있음

- CPU 부하가 적고, 많은 커넥션을 동시에 처리해야 하는 구조에 적합

- 자바스크립트를 이용해서 개발할 수 있기 때문에 프론트엔드 개발자의 진입장벽이 낮음

- 기존 Java 서버에 비해 생산성이 높음


[단점]

- 싱글스레드 모델이기 때문에 하나의 작업에 시간이 오래걸리면 시스템 전체의 성능이 급격하게 떨어짐

- 이벤트 콜백 중심으로 코드가 중첩될 경우 가독성이 떨어짐

- 에러가 발생할 경우 프로세스 자체가 죽어버리므로 주의해야 함(watch dog 등으로 처리 가능)

- 멀티코어 활용을 위해서 cluster 모듈을 이용해야 하고, 세션을 공유할 경우 부가적인 작업이 필요함


[종합]

- 개발이 빠르고 쉬운 장점이 있지만 운영 과정의 어려움이 존재함

- REST API 서버, Push 서버등에 사용해야 할 것 같음





[node.js 의 장점]
    - 성능이 매우 빠른 고성능 서버로 알려져 있다.
    - 이 고성능은 자바스크립트에서 오는 것이 아니라, node.js 의 기본적인 구조인 Single Thread 기반의 비동기 IO 처리에서 온다.
    - 하나의 스레드가 ruequest를 받으면, 처리를 하고, File IO나 네트워크 처리등이 있을 경우에는 IO 요청을 보내놓고, 작업을 처리하다가, IO 요청이 끝나면 이벤트를 받아서 처리하는 이벤트 방식을 사용한다.
    - 이로 인해 CPU가 IO 응답을 기다리는 시간이 필요 없고, 대부분의 연산 작업에 사용되기 때문에 높은 효용성을 가질 수 있으며, 특히 하나의 스레드로 여러개의 요청을 처리하는 구조로 되어 있기 때문에, C10K문제를 처리할 수 있는데 아주 최적화 되어 있다.
    - 상대적으로 CPU 부하가 많은 작업이 없고, 많은 커넥션을 동시에 처리해야 하는 시나리오에 대해서는 node.js 의 성능이 압도적으로 높다.
    - 데이터베이스 트랜잭션이 암ㅎ은 애플리케이션의 경우 WAS + MySQL 이 nodejs + MySQL 구조보다 많이 빠름을 볼 수 있다.

    - node.js 는 백엔드 개발에 대한 집입 장벽이 낮아진다.
    - 생산성이 향상된다.
    - socket.io를 이용한 푸시서버 개발에 유리하다.


[단점]
    - 싱글스레드 모델이기 대문에 하나의 작업 자체가 시간이 많이 걸리면, 전체 시스템의 성능이 아주 급격하게 떨어진다.
    - 따라서 가벼운 작업 위주로 개발 되어야 한다.
    - 자바스크립트 언어에서 오는 문제점으로 명시성이 떨어지고, , 이벤트 콜백이 중첩될 경우 코드의 가독성이 낮다.
    - 에러가 발생할 경우 프로세스가 죽어버리기 때문에 구현상에 주의해야 한다.
    - 하나의 스레드가 하나의 코어를 사용하기 때문에 멀티코어 활용을 위해서는 cluster 모듈을 이용해야 하고, 세션등을 공유해야 할 경우 redis와 같은 부가적인 인프라가 필요하다.
    - V8 엔진이 GC 기반의 메모리 관리를 하기 때문에, GC 사용시 CPU 사용률이 높아지면 순간적으로 서버를 멈추게 할 수 있다.
    - DB 연결시에도 싱글스레드를 이용하기 때문에 자바에 비해 기능이 제한적이므로 고가용성에 대한 고민이 필요하다.
    - 프로그래밍 컨셉이 이벤트 중심으로 변하기 때문에 그에 대한 대응이 중요하다.
    - 비동기 IO의 경우 윈도우즈는 IOCP, UNIX계열에서는 select, epoll, kqueue 등을 사용하기 때문에 각각의 구현에 따른 장단점이 존재한다.

[종합]
    - 개발 관점에서는 빠르고 쉬운 장점이 있지만, 운영과점에서는 테스트, 장애대응, 디비깅에 신경써야할 부분이 많아지게 된다.





출처 조대협님 블로그: http://bcho.tistory.com/876

반응형
저작자표시 비영리 (새창열림)

'프레임워크 > [JS] node.js' 카테고리의 다른 글

node.js와 mysql 연동하기  (0) 2016.02.17
node.js의 LTS 버전과 Stable 버전의 차이  (1) 2016.01.27
[nodejs][cheerio] cheerio 를 이용하여 HTML 파싱하기 - 에어코리아 미세먼지 정보 파싱  (0) 2016.01.14
request 모듈을 이용하여 HTML 가져오기  (1) 2016.01.11
node.js 란?  (0) 2015.12.24
'프레임워크/[JS] node.js' 카테고리의 다른 글
  • node.js와 mysql 연동하기
  • node.js의 LTS 버전과 Stable 버전의 차이
  • [nodejs][cheerio] cheerio 를 이용하여 HTML 파싱하기 - 에어코리아 미세먼지 정보 파싱
  • request 모듈을 이용하여 HTML 가져오기
hs_seo
hs_seo
Hello World!
    반응형
  • hs_seo
    개발자로 살아남기
    hs_seo
  • 전체
    오늘
    어제
    • 전체 (1140)
      • 개발자 (21)
        • 개발에 유의할 점 (0)
        • 면접 (5)
      • IT 소식 (5)
        • 업계 (1)
      • java (51)
        • 디자인패턴 (3)
        • apache-common (1)
      • 개념 (47)
        • 자료구조 (4)
        • 함수형사고 (8)
        • 디자인패턴 (1)
      • 데이터분석 (1)
      • python (67)
        • 코드조각 (12)
        • 라이브러리 (2)
      • 빅데이터 (418)
        • zookeeper (5)
        • hadoop (78)
        • hdfs (12)
        • hive (127)
        • hbase (16)
        • spark (40)
        • scala (4)
        • trino (3)
        • oozie (41)
        • Hue (9)
        • R (5)
        • sqoop (6)
        • flume (3)
        • elasticsearch (2)
        • airflow (16)
        • kafka (3)
        • kubernetes (10)
        • openstack (3)
        • flink (2)
        • redis (2)
      • 빅데이터 강좌 (2)
      • 알고리즘 (131)
        • 알고리즘 (1)
        • 백준 (61)
        • 정올 (41)
        • 더블릿 (5)
        • 프로그래머스 (1)
      • 프로그래밍 언어 (30)
        • go (4)
        • js (9)
        • .Net (6)
        • Jsp (1)
        • ansible (3)
        • terraform (6)
      • Tools (56)
        • docker (2)
        • macbook (6)
        • maven (3)
        • sublime (1)
      • 프레임워크 (25)
        • [JS] angularjs (2)
        • [JS] node.js (19)
        • [Java] spring (2)
        • Android (2)
      • 데이타베이스 (43)
        • SQLD (5)
        • Oracle (1)
        • MySQL (8)
        • ADsP (2)
      • 리눅스 (25)
        • Bash (61)
      • GCP (5)
      • AWS (34)
        • EC2 (2)
        • EMR (14)
      • 정보보안기사 (4)
        • 네트워크 (1)
      • 개인 (80)
        • 업무실수 (0)
        • 책 (9)
        • 교육 (3)
        • 여행 (17)
        • 영화 (12)
        • 음악 (2)
        • 피규어 (4)
        • 게임 (3)
        • 생각 (7)
        • 기타 (10)
        • 좋은글 (5)
        • 좋은 사이트 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 미디어로그
    • 위치로그
    • 방명록
  • 링크

    • 빅데이터-하둡,하이브로 시작하기
    • 빅데이터-스칼라, 스파크로 시작하기
    • Kaggle에서 파이썬으로 데이터 분석 시작하기
    • 쉘스크립트 개발 시작하기
    • 개발자가 데이터 분석 준전문가 되기
    • 데브쿠마
  • 공지사항

  • 인기 글

  • 태그

    yarn
    k8s
    오류
    SPARK
    ubuntu
    airflow
    Python
    백준
    Tez
    mysql
    정올
    error
    java
    AWS
    HIVE
    알고리즘
    bash
    emr
    build
    하둡
    HDFS
    다이나믹
    oozie
    hbase
    Linux
    파이썬
    하이브
    S3
    Hadoop
    nodejs
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
hs_seo
node.js 의 장점과 단점
상단으로

티스토리툴바