ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Node.js] Node.js 란?
    Node.js 2022. 7. 21. 09:58


    Node.js 란?

     

    Node.js는 Chrome V8 JavaScript 엔진으로 빌드된 JavaScript 런타임이다.
    • Node.js는 JavaScript를 서버에서도 사용할 수 있도록 만든 프로그램이다.
    • Node.js는 V8이라는 JavaScript 엔진 위에서 동작하는 자바스크립트 런타임(환경)이다.
    • Node.js는 서버사이트 스크립트 언어가 아니다. 프로그램(환경)이다.
    • Node.js는 웹서버와 같이 확장성 있는 네트워크 프로그램을 제작하기 위해 만들어졌다.

    확장성 있는 네트워크 애플리케이션(특히 서버 사이드) 개발에 사용되는 소프트웨어 플랫폼이다.

    Node.js를 설치하면 터미널 프로그램(윈도우의 cmd, 맥 OS의 terminal 등)에서 JavaScript 코드를 바로 실행할 수 있다.


     Node.js 특징

     

    비동기 I/O 처리(Non-Blocking I/O)

     

    비동기 처리는 하나의 쓰레드가 요청을 받으면 응답이 올 때까지 기다리는 것이 아니라 다른 작업을 처리하다가 먼저 요청한 작업이 끝나면 응답을 보낸다. 동시에 요청이 많이 들어오더라도 기다리지 않기 때문에 서버 과부하가 적다.

     

    * 반대로 동기는 하나의 요청이 응답이 올 때까지 기다린다.

     

    이벤트 루프

     

    이벤트 루프는 여러 이벤트가 동시에 발생했을 때 어떤 순서로 콜백 함수를 호출할지를 이벤트 루프가 판단한다.

    노드는 이벤트가 종료될 때까지 이벤트 처리를 위한 작업을 반복하므로 루프라고 부른다.

     

    싱글 스레드 (Single Thread)

     

    스레드(Thread) : 스레드는 프로세스 내에서 실행되는 흐름의 단위이다. 프로세스는 스레드를 여러 개 생성해 여러 작업을 동시에 처리할 수 있다. 스레드들은 부모 프로세스의 자원을 공유한다. 같은 주소의 메모리에 접근 가능하므로 데이터를 공유할 수 있다.

     

    Node.js는 싱글스레드, 논 블로킹 모델로 싱글 스레드가 혼자서 일을 처리하지만 들어오는 요청 순서가 아닌 논 블로킹 방식으로 이전 작업이 완료될 때까지 대기하지 않고 다음 작업을 수행한다.

     

    이벤트 기반

     

    • 노드는 V8과 더불어 libuv라는 라이브러리를 사용한다.
    • libuv 라이브러리는 노드의 특성인 이벤트 기반, 논 블로킹 I/O 모델을 구현하고 있다.
    • 이벤트 기반(Event-driven)이란 이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식을 의미한다.
    • 즉, 이벤트 기반 시스템에서는 특정 이벤트가 발생할 때 무엇을 할지 미리 등록해두고, 이를 이벤트 리스너에 콜백 함수를 등록한다.
    • 이후 이벤트가 발생하면 리스너에 등록해둔 콜백함수를 호출하며, 이벤트가 끝난 후 노드는 다음 이벤트가 발생할 때까지 대기한다.

    ✅ Node.js 사용 이유

    • JavaScript 를 웹 브라우저에서 독립시킨 것으로 Node.js를 설치하게 되면 터미널프로그램(윈도우의 cmd, 맥의 terminal 등)에서 브라우저 없이 바로 실행할 수 있다.
    • JavaScript와 때문에 문법은 같다.
    • 이렇게 Node.js를 이용하여 웹 브라우저와 무관한 프로그램을 만들 수 있게 되었다.
    • Node.js를 이용하여 서버를 만들 수 있다.
    • 이전까지 Server-Client 웹사이트를 만들 때 웹에서 표시되는 부분은 JavaScript 를 사용하여 만들어야만 했으며, 서버는 Reby, Java 등 다른 언어를 써서 만들었어야 했는데 마침내 한 가지 언어로 전체 웹 페이지를 만들 수 있게 된 것이다.

    ✅ 장점

    • Java Script 사용해서 서버단 로직을 처리할 수 있다.
    • 개발이 빠르고 쉽다. 서버 설치부터 화면 띄우는 것까지 금방 처리된다.
    • Non-blocking I/O와 단일 스레드 이벤트 루프를 통한 높은 처리 성능
    • 이벤트 기반 비동기방식이라 서버 무리가 적다.
    • npm(node package manager)을 통한 다양한 모듈(패키지) 제공

    ✅ 단점

    • 이벤트 기반 비동기방식이라 서버단 로직이 복잡한 경우 콜백 함수의 늪에 빠질 수 있다.
      예를 들어, 한번의 요청에 대해 DB에서 조회한 결괏값에 따라 다른 로직을 처리해야 하며, 이런 로직이 여러 개인 경우 콜백 함수 늪 (Callback Hell) 에 빠진다.
    • 싱글 쓰레드(Single Thread)이기 때문에 하나의 작업 자체가 많이 걸리는 웹서비스에는 어울리지 않다. 
      게시판형태와
      같이 가벼운 I/O가 많은 웹서비스에 어울린다. 
    • 코드가 수행되어야 코드에 에러가 있는지 알 수 있으며, 에러가 날 경우 프로세스가 내려가기 때문에 테스트가 엄청 중요하다. 반드시 모든 케이스에 대해 소스코드를 검증해야 한다.

    Node.js 는 I/O 처리가 많은 서버 및 비동기 처리(스트리밍, 채팅)에 잘 어울린다.


     

    출처 : https://hanamon.kr/nodejs-%EA%B0%9C%EB%85%90-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0/

     

    출처 : https://junspapa-itdev.tistory.com/3

     

    'Node.js' 카테고리의 다른 글

    [Node.js] Node.js 설치  (0) 2022.07.26
    [Node.js] NPM  (0) 2022.07.26
Designed by Tistory.