2 분 소요

2022. 07. 12. 수업내용 정리 #1/3

node.js .. 기본 개념


  • node.js

    Chrome V8 Javascript 엔진으로 빌드 된 Javascript 런타임입니다.

    node.js는 프로그램(환경)으로 웹 서버와 같이 확장성 있는 네트웤크 프로그램을 제작하기 위해 만들어졌습니다.

    확장성이 있는 네트워크 어플리케이션 개발에 사용되는 소프트웨어 플랫폼입니다.

    실시간 온라인 채팅, 실시간 온라인 게임과 같은 실시간 기능이나 로그인, 점수 관리 등의 데이터베이스 기능 구현이 가능합니다.


  • 사용이유

    자바스크립트는 스크립트언어이므로 특정한 프로그램(ex web..) 안에서만 동작을 합니다.

    여기에 Node.js가 추가되면, 터미널프로그램을 통해 웹의 도움 없이 바로 코드를 실행시킬 수 있습니다.

    Node.js는 서버를 만들 수 있고 이를 이용해 다른 언어(Ruby, Java)의 힘을 빌릴 필요 없이 Javascript 한 가지 언어만으로 전체 웹페이지 작업이 가능합니다.


  • 자바스크립트 런타임

    특정 언어로 만든 프로그램을 실행할 수 있는 환경을 뜻합니다.

    따라서 노드는 자바스크립트 프로그램을 컴퓨터에서 실행할 수 있게 하는 자바스크립트 실행기입니다.


  • 이벤트 기반

    노드는 V8과 더불어 libuv라는 라이브러리를 사용합니다.

    libuv 라이브러리는 노드의 특성인 이벤트 기반, 논 블로킹 I/O 모델을 구현하고 있습니다.

    이벤트 기반이란 이벤트가 발생할 때 미리 지정해둔 작업을 이벤트 리스너(evnetlistner)에 콜백함수를 등록하는 방식을 의미합니다.

    이후 이벤트가 발생하면 리스너에 등록해둔 콜백함수를 호출하며, 이벤트가 끝난 후 노드는 다음 이벤트가 발생할 때까지 대기합니다.


  • 이벤트 루프

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

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

    node예시



  • 논 블로킹 I/O

    이벤트 루프를 잘 활용하면 오래 걸리는 작업을 효율적으로 처리할 수 있는데, 이 작업에는 두 가지 종류가 있습니다.

    동시에 실행될 수 있는 작업과 동시에 실행될 수 없는 작업입니다.

    파일 시스템 접근, 네트워크를 통한 요청 작업은 입려(input)/출력(output)의 일종이며, 이러한 작업을 할 때는 노드는 비동기 방식으로 블로킹을 만들지 않게(논블로킹) 처리합니다.

    여기서 비동기는 이전 작업이 완료될 때까지 대기하지 않고 동시에 작업을 수행하는 것, 동기는 이전 작업이 끝나야만 다음 작업을 수행하는 것입니다.


  • 싱글 스레드

    이벤트 기반, 논 블로킹 모델과 더불어 노드를 설명하는 키워드 중 하나는 싱글 스레드입니다.

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

    • 프로세스: 운영체제에서 할당하는 작업의 단위, 노드나 웹 브라우저 같은 프로그램은 개별적인 프로세스입니다.

      프로세스 간에는 메모리 등의 자원을 공유하지 않습니다.

    • 스레드: 프로세스 내에서 실행되는 흐름의 단위, 프로세스는 스레드를 여러 개 생성해 여러 작업을 동시에 처리할 수 있습니다.

    스레드들은 부모 프로세스의 자원을 공유하고 같은 주소의 메모리에 접근 가능하므로 데이터를 공유할 수 있습니다.

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



  • 결론

    노드는 서버 작업에 적합하고 스레드 하나에서 처리되기 때문에 CPU 부하가 큰 작업에는 적합하지 않습니다.

    즉, 개수는 많지만 크기는 작은 데이터를 실시간으로 주고받는데 노드는 적합합니다. ex) 네트워크, 데이터베이스, 디스크 작업, 실시간 채팅 어플리케이션, 주식 차트.. 등

    스레드 방식에 비해 적은 컴퓨터 자원을 사용하고 I/O 작업이 많은 서버로 적합하며 웹 서버가 내장되어 있어 별도의 웹서버를 설치할 필요가 없습니다.

    자바스크립트 기반이므로 JSON 형식과 쉽게 호환이 됩니다.



  • Node.js의 프레임워크 Express

    프레임워크는 어떠한 작업을 쉽게 완성하기 위한 라이브러리의 집합입니다.

    작업의 시작부터 끝까지 라이브러리로 지원한다는 점이 단순한 라이브러리와의 차이점입니다.

    예로 jQuery는 Javascript 라이브러리로 다양한 용도를 가지고 있지만, jQuery 자체가 무엇 하나를 이루기 위한 목적을 가지고 있지는 않습니다.

    Express는 Node.js를 이용하여 웹 애플리케이션을 만들기 위한 틀을 제공하는 라이브러리의 집합입니다.

댓글남기기