node.js란 무엇인가

이서현·2021년 8월 3일
0

nodeJS

목록 보기
8/10
post-thumbnail

1. node.js란 무엇인가

Node.js 는 확장성 있는 네트워크 애플리케이션 개발에 사용되는 소프트웨어 플랫폼이다. 작성 언어로 javascript를 활용하며 Non-blocking I/O와 단일 스레드 이벤트 루프를 통한 높은 처리 성능을 가지고 있다. V8(자바스크립트 엔진)으로 빌드된 이벤트 기반 자바스크립트 런타임이다.

내장 HTTP 서버 라이브러리를 포함하고 있다. 웹서버에서 아파치 등의 별로의 소프트웨어 없이 동작하는 것이 가능하며 이를 통해 웹서버의 동작에 있어 더 많은 통제를 가능하게 한다.

  • Non-blocking I/O ??
    Blocking I/O는 I/O 작업이 진행되는 동안 유저 프로세스는 자신의 작업을 중단한 채 대기하는 방식이다.
    Non-blocking I/O는 I/O 작업이 진행되는 동안 유저 프로세스의 작업을 중단시키지 않는 방식이다.

  • 단일 스레드 이벤트 루프 란?
    우선, 자바스크립트는 단일 스레드 기반의 언어이다. 자바스크립트 엔진이 단일 호출 스택을 사용하기 때문이다. 하지만 실제로 자바스크립트가 구동되는 환경인 node.js에서는 여러개의 스레드가 사용된다.(node.js기반의 웹 서버에서는 동시에 여러 HTTP 요청을 처리하기도 한다.) 이러한 구동 환경이 단일 호출 스택을 사용하는 자바스크립트 엔진과 상호 연동하기 위해 사용하는 장치가 이벤트 루프인 것이다.

Java는 스레드 기반 동기 방식을 사용한다. 하나의 스레드가 request를 받으면 모든 처리가 완료될 때 까지 기다린다. 처리가 끝나면 다시 응답을 보낸다. 동시 request가 많은 경우 많은 스레드가 필요하게 된다.
nodeJS는 단일스레드 이벤트 루프 기반 비동기 방식을 사용하여 하나의 스레드가 request를 받으면 바로 다음 처리에 요청을 보내고 다른 작업을 처리한다. 먼저 요청한 작업이 끝나면 이벤트를 받아서 응답을 보낸다. 동시 request가 올때 처리가 완료될 때 까지 기다리지 않아도 된다.

node.js 의 장점

  • 자바스크립트를 사용한다.
    프론트앤드는 자바스크립트로 개발을 한다. 서버도 마찬가지로 다른 언어를 배울 필요없이 자바스크립트로 로직을 처리할 수 있다.
  • 빠르고 쉽다.
    서버 설치부터 화면으로 띄우는 것까지 쉽고 빠르게 할 수 있다.
  • Non-blocking I/O와 단일 스레드 이벤트 루프
  • 가볍게 돌아간다.
  • 이벤드 기반 비동기 방식
    앞서 말한듯이 비동기로 처리되기 때문에 서버에 무리가 적다.
  • npm을 통해 다양한 묘듈제공

node.js 의 단점

  • 콜백 지옥🔥
    이벤트 기반 비동기 방식이라 서버단의 로직이 복잡할 경우 콜백지옥에 빠질 수 있다.
  • 단일 스레드이기 때문에 하나의 작업이 많이 걸리는 것은 어울리지 않는다.
  • 코드를 순차적으로 실행하지 않는다.
    java와 다르게 비동기 방식으로 이벤트를 보내고 응답이 오면 처리한다.
  • 테스트가 중요하다.
    코드에 에러가 날 경우 프로세스가 내려간다. 따라서 모든 케이스에 대해 소스코드를 검증해야 한다.

참조

Node.js 위키백과
자바스크립트와 이벤트 루프 - NHN Cloud
블로킹/논블로킹, 동기/비동기 I/O란?
[Node.js 1강]node js 란? 장점, 단점, 어떤 웹서비스에 사용해야할까?

profile
안녕하세요. 이서현입니다( ღ'ᴗ'ღ )

0개의 댓글