WIL 23-06-11

level·2023년 6월 11일

TIL

목록 보기
24/95

Node.js 란?
자바스크립트가 실행될 수 있게 도와주는 런타임 플랫폼이다.
처음 들으면 무슨말인지 모르겠다.

IDE 란?
통합 개발 환경의 약자로, 여러가지 개발자 툴을 결합하여 개발에 관련된 모든 작업을 한개의 프로그램에서 처리할 수 있도록 환경을 제공하는 소프트웨어를 말한다.
VSCODE는 마이크로소프트에서 개발하고 관리중인 오픈소스 IDE로, 메모장처럼 아주 가벼우며 여러가지 EXTENSION들을 설치해서 기능을 확장 할 수 있다는 장점이 있다.

Javascript 란?
자바스크립트는 웹페이지를 동적으로 표현하기 위해 만들어 졌다. 동적이란는 것은 맥락, 상황을 반영할 수 있는 페이지이다.

다시, Node.js 란?
공식 사이트에서는 Chrome V8 Javascript 엔진으로 빌드된 javascript 런타임 이라고 설명하고 있다.
(V8 엔진: 구글에서 JAVASCRIPT가 브라우저가 없어도 작동할 수 있도록 만든 것)
즉 자바스크립트를 컴퓨터(로컬)에서 브라우저 없이 실행하게 도와주는 환경이 노드JS

Node.js를 사용해야하는 이유?

  • 논 블로킹 I/O
    함수가 실행되는 중에도 다른 작업을 동시에 진행할 수 있다
    시스템의 호출 종료를 기다리지 않고 다음 처리로 넘어갈 수 있어 사용자 프로세스는 다른 일을 처리 할 수 있다.
  • 싱글 스레드
    스레드를 하나 사용하는 것으로, 동시에 하나의 작업만 처리가능
    연결 요청마다 스레드를 생성하는 체계에 비해 스레드 생성부하 및 스레드 유지에 대한 부담이 없어 효율적으로 사용 가능
    공유자원이 없으므로 여러 스레드가 하나의 오류로 모두 문제를 일으키는 상황 없음. 차라리 새로운 프로세스를 생성해 각 스레드가 서로 독립적이므로 문제가 생겨도 모든프로세스가 종료될 확률은 낮음. 따라서 서버확장이 매우 자유로움.
  • 이벤트 루프
    node.js가 하나의 스레드만으로 여러 비동기 작업들을 블로킹 없이 수행할 수 있는 기반

ES6 란?
ECMAScript의 6번째 버전, ECMAScript는 브라우저에서 언어를 개발할 때 표준화작업이 필요해서 생겨났으며, es6는 2015년에 발표된 버전이라 ECMA 2015라고도 함

REPL 이란?
Read Evaluate Print Loop -> REPL 환경
입력하는 코드의 결과 값을 즉시 확인 할 수 있어 간단한 문법 테스트 등으로 아주 적합한 개발 환경이라고 할 수 있다
NODE.JS는 REPL 환경을 제공하고 있어 쉽게 이용할 수 있다

웹브라우저의 콘솔도 REPL이 맞지만 노드가 제공하는 API를 사용할 수 없고 브라우저의 API를 사용해 DOM을 제어할 수 있다는 차이가 있다

+)
1. Node.js의 장단점

  • 장점
    단일 스레드, 논블로킹 이벤트 기반 비동기 방식으로 처리되어 처리 성능이 높다
    내장 http 서버 라이브러리를 포함하고 있어 웹 서버에서 별도의 소프트웨어 없이 동작하는것이 가능하다
    자바스크립트 언어로 백엔드 개발 환경을 구성할 수 있어 생산성이 높고 러닝커브가 줄어든다 (러닝커브:ㅣ학습곡선. 특정 기술 또는 지식을 실제 필요한 업무와 같은 환경에서 효율적으로 사용하기 위해 드는 학습 비용)
    다양한 패키지 매니저를 기반으로 다양한 모듈을 제공하며 효율성이 좋다
  • 단점
    모든 api가 비동기 기반이므로 콜백지옥에 빠질 수 있다
    단일스레드 이므로 작업시간이 오래 걸리는 웹서비스일 경우 성능 저하 가능성
    해당코드를 수행이 되어야 코드 에러 확인 가능
    세션공유시 부가적인 인프라 필요

2. node.js의 동작원리 구성,
3. 이벤트루프, libuv와 node.js의 관계

노드는 자바스크립트와 c++언어로 구성되어있음. v8엔진도 70%이상의 c++로 구성되어 있으며, libuv는 100%의 c++언어로 구성된 라이브러리임. 하지만 c/c++를 몰라도 노드 사용가능. 이는 v8엔진에서 자바스크립트를 c++로 번역해주기 때문. 노드의 코어 라이브러리는 process.binding()을 통해 자바스크립트 환경에서 사용될 수 있음. 노드에 동작하는 이벤트 루프는 libuv 내에서 구현됨. 이벤트 루프가 libuv 내에서 실행된다고 해서 자바스크립트의 스레드와 이벤트 루프의 스레드가 별도로 존재하지는 않음. 노드는 싱글 스레드이므로 하나의 이벤트 루프를 가지며 하나의 스레드가 모든 것을 처리함.

노드에서 작성되는 거의 모든 코드들은 콜백함수로 이루어져 있으며 콜백함수들은 libuv내에 위치한 이벤트 루프에서 관리 및 처리됨. 이벤트루프는 여러개의 페이즈들을 갖고 있으며, 해당 페이즈들은 각자만의 큐를 가짐. 이벤트루프는 라운드로빈 방식으로 노드 프로세스가 종료될때까지 일정 규칙에 따라 여러개의 페이즈들을 계속 순회. 페이즈들은 각각의 큐들을 관리하고 해당 큐들은 FIFO순서로 콜백함수들을 처리

*라운드로빈 방식: 클라이언트로부터 받은 요청을 로드밸런싱 대상 서버에 순서대로 할당받는 방식

**로드밸런싱: 서버가 처리해야할 업무 혹은 요청을 여러대의 서버로 나누어 처리하는 것

0개의 댓글