Node.js 에 대해 알아보자

최예닮·2022년 12월 13일
0
post-thumbnail

나는 Node.js 프로그램을 사용하는 백엔드 초.보 개발자이다.

근데 정확히 Node.js 를 정의를 해본적이 없다.... 그냥 공기마냥 그냥... 그냥 쓰는건데요 ...?

그래서 정의를 좀 정리할 필요가 있어서 적게 되었다.

(생각보다 ... 나 Node.js 에 대해 잘 모르고 있어서 충격받은 상태임....)

(Node.js 에 대해 물어볼때 나의 모습....)

Node.js 는 Chrome V8 JavaScript 엔진으로 빌드 된 JavaScript 런타임 이다.

즉, Node.js 를 통해 다양한 자바스크립트 애플리케이션을 실행할 수 있고, 서버를 실행하는 데 많이 이용된다.

Node.js 란?

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

Node.js 의 특징

Non-blocking I/O와 단일 스레드 이벤트 루프를 통한 높은 처리 성능을 가지고 있다.

Non-blocking I/O ?

  • 이벤트 루프를 잘 활용하면 오래 걸리는 작업을 효율적으로 처리할 수 있다.
  • 작업에는 두 가지 종류가 있는데 동시에 실행될 수 있는 작업과 동시에 실행될 수 없는 작업이다.
  • 특히 파일 시스템 접근, 네트워크를 통한 요청 작업은 입력(Input)/출력(Output)의 일종이다.
  • 이러한 작업을 할 때 노드는 비동기 방식으로 블로킹을 만들지 않게 끔(논 블로킹) 처리한다.
  • 비동기이란 이전 작업이 완료될 때까지 대기하지 않고 동시에 작업을 수행한다.
  • 반대로 동기는 이전 작업이 끝나야만 다음 작업을 수행한다.
  • 자세하게 풀어서 아야기하면 함수 호출 시 당장 실행하는 것이 아니라(동기→블로킹) 일단 어느 곳에 쌓아 놓고 동시에 요청을 처리하고(비동기→논 블로킹) 요청이 완료된 순서대로처리(스택 이용) 한다는 말이다.
  • 단일 스레드 ?

    자바스크립트 코드는 동시에 실행될 수 없는데 그 이유는 노드가 싱글 스레드 기반이기 때문이다.

    • 프로세스 : 운영체제에서 할당하는 작업의 단위이다. 노드나 웹 브라우저 같은 프로그램은 개별적인 프로세스이다. 프로세스 간에는 메모리 등의 자원을 공유하지 않는다.
    • 스레드 : 스레드는 프로세스 내에서 실행되는 흐름의 단위이다. 프로세스는 스레드를 여러 개 생성해 여러 작업을 동시에 처리할 수 있다. 스레드들은 부모 프로세스의 자원을 공유한다. 같은 주소의 메모리에 접근 가능하므로 데이터를 공유할 수 있다.

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

    이벤트 루프 ?

    • 이벤트 루프(event loop)는 여러 이벤트가 동시에 발생했을 때 어떤 순서로 콜백함수를 호출 할지를 이벤트 루프가 판단한다.
    • 노드는 이벤트가 종료될 때까지 이벤트 처리를 위한 작업을 반복하므로 루프(loog)라고 부른다.

    이해를 돕기 위해 그림 하나를 보여주겠다.

    • Heap : 자바스크립트의 객체의 주소값, 구조화되지 않은 메모리 영역이 쌓인다.
    • Call Stack : 일반적으로 우리가 호출하는 함수들이 쌓인다.
    • Web API : 브라우저에서 제공되는 API. 비동기 작업을 실행하며 결과를 Task Queue에 넘겨준다.
    • Task Queue : Stack이 비어있어야 실행된다. 그전까지는 Event Loop를 돈다.
      여기서 정말 중요한 개념이 나왔다. Task Queue는 Stack이 비어있기 전까지 Event Loop를 돌며 Stack이 비었나 확인한다. 비어있지 않으면 Queue 안의 API들을 내보내지 않는다.

    마무리

    자, 정리하자면 자바스크립트는 싱글 스레드이기 때문에 한 번에 한 동작만 실행할 수 있다고 생각할 수 있지만 그렇지 않다. 동시에 이벤트를 처리할 수 있는 페이지를 많이 볼 수 있다.

    바로 자바스크립트의 동시성 때문이다. 이 동시성을 지원해주는 개념이 바로 이벤트 루프 이다.

    profile
    산을 오르려고 하는데 이제 주차장에 막 주차한 초보개발자

    0개의 댓글