[Node] 1. Node 시작

BBaeng·2022년 1월 8일
0

Node

목록 보기
1/1

프로젝트를 위해 공부하고 있는 Node에 대한 강의를 수강하면서 정리할 예정이다.

1. Node.js 란?

Node.js 는 Chrome V8 자바스크립트 엔진으로 빌드된 자바스크립트 런타임이다. (공식홈피)

  • Not Server
  • 서버의 역할도 수행할 수 있는 런타임
  • 자바스크립트로 작성된 서버, 프로그램을 실행하게 해줌.

런타임 : 특정 언어로 만든 프로그램들을 실행하게 해주는 가상머신의 상태

❓ 그러면 Node 있기 전에는?

원래는 브라우저(엣지, 사파리 등), HTML 이 스크립트를 읽어줬다.
=> 자바스크립트는 종속.

❗Node 탄생 후!

  • javascript 는 브라우저, html 의 종속성에서 벗어남.
  • javascript 코드 빠르게 돌릴 수 있음.

이전에도 자바스크림트 런타임을 만들려 했지만 엔진 속도 문제로 실패.

2. Node 특성

1. 이벤트 기반

  • 이벤트(클릭, 네트워크 요청 등)가 발생할 때 미리 지정해둔 작업을 수행하는 방식
  • 이벤트 기반 시스템에 특정 이벤트가 발생할 때 무엇을 할지 미리 등록

이해를 돕기 위해 버튼을 클릭할 때 경고창을 띄우도록 설정하는 것을 예로 들어보자.

  1. 이벤트 리스너에 콜백 함수 등록
  • 특정 이벤트가 발생할 때 무엇을 할지 미리 등록해두는 것이다.
  • 클릭 이벤트 리스너에 경고창을 띄우는 콜백 함수를 등록한다.
  1. 이벤트 발생
  • 사용자가 버튼을 클릭
  1. 등록된 콜백 함수 호출
  • 경고창을 띄우는 콜백 함수 호출
  • 이벤트 리스너: 이벤트를 등록하는 함수
  • 콜백 함수: 이벤트가 발생했을 때 실행될 함수

2. 논블로킹 I/O

이벤트 루프를 잘 활용해 오래 걸리는 작업을 효율적으로 처리가 가능하다.
작업에는 동시에 실행될 수 있는 작업(동기식 작업) 과 동시에 실행되지 않는 작업 (비동기식 작업) 이 있다.
기본 적으로 자바스크립트 코드는 비동기식 작업이지만 I/O 작업은 동기식 작업이 가능하다.

이러한 I/O 작업 시에 노드는 논 블로킹 방식으로 처리하는 방식을 제공한다.

논 블로킹 : 오래 걸리는 함수를 백그라운드로 보내 다음코드 먼저 실행한다. 그 후 오래 걸리는 함수는 나중에 실행

블로킹 : 이전 작업이 끝나야만 다음 작업을 수행하는 것.

그림을 통해 우리는 블로킹 방식보다 논 블로킹 방식이 같은 작어블 더 짧은 시간내에 처리할 수 있음을 알 수 있다.

이렇게 작업 순서에 따라 성능이 크게 달라지기에 논 블로킹 방식을 의식하면서 코딩하는 습관을 들이자!

이제부터 코드의 예시를 볼 것이다.

먼저 블로킹 방식의 코드를 보자.

function longRunningTask() {
  // 오래 걸리는 작업
  console.log('작업 끝');
}

console.log('시작');
longRunningTask();
console.log('다음 작업');

이에 대한 결과는

시작
작업 끝
다음 작업

과 같다.

오래 걸리는 작업인 longRunningTask 함수가 있어서 이 작업이 완료되기 전까지는 console.log('다음 작업')이 호출되지 않는다.

다음 예제는 논블로킹 방식의 코드이다.

function longRunningTask() {
  // 오래 걸리는 작업
  console.log('작업 끝');
}
console.log('시작');
setTimeout(longRunningTask, 0);
console.log('다음 작업');

이에 대한 결과는

시작
다음 작업
작업 끝

과 같다.

setTimeout의 콜백 함수인 longRunningtask가 테스크 큐(?)로 보내져 순서대로 실행 되지 않는다.

📄 setTimeout(콜백, 0)
밀리초를 0 으로 설정했지만 브라우저와 노드에는 기본적인 지연 시간의 존재로 바로 실행되지 않는다.

❓ 다만, 아무리 논 블로킹 방식으로 코드를 작성하여도 코드가 전부 우리가 작성한 것이라면 전체 소요 시간이 짧아지지는 않는다.

❗우리의 코드는 서로 동시에 실행되지 않기 때문이다. 즉, 단순히 실행 순서만 바꾸어 주어 간단한 작업들이 대기하는 상황을 방지하는데 의의가 있다.

논 블로킹동시는 같은 의미가 아니다. (추가)

###3. 프로세스 vs 스레드

프로세스와 스레드

  • 프로세스: 운영체제에서 할당하는 작업의 단위, 프로세스간 자원 공유 X
  • 스레드 : 프로세스 내에서 실행되는 작업의 단위, 부모 프로세스의 자원 공유 O

그렇다면 노드 프로세스는

멀티 스레드!!!

노드를 실행하면 먼저 프로세스가 하나 생성된다. 그리고 그 프로세스에서 스레드들을 생서하는데, 내부적으로 스레드를 여러 개 생성한다. But 직접 제어가 가능한 스레드는 하나뿐이다. 그래서 우리는 싱글 스레드라고 표현한다.

  • 노드 14버전부터 멀티 스레드 다룰 수 있음!
  • 멀티 스레드의 단점: 프로그래밍이 어렵다. 프로그래밍 효율 x

3. 서버로서의 노드

  • 서버 : 네트워크를 통해 클라이언트에 정보나 서비스를 제공하는 프로그램
  • 클라이언트: 서버에 요청을 보내는 주체(브라우지, 앱)

EX)

  • 브라우저(클라이언트, 요청)가 네이버 웹사이트(서버, 응답)에 접속

✔️ 노드 != 서버

🗝️ But 노드는 서버를 구성할 수 있게 하는 모듈 (http) 제공

노드 서버의 장단점

// 언어로 할 수 있는 한계까지 갔을 때 성능이 ㄱㅊ으면 ㄱㅊ 못해서 안하는 것 x

📢 서버 외의 노드
서버에만 한정 x
웹, 모바일, 데스크탑 어플리케이션에도 사용

  • 웹 프레임워크: Angular, React, Vue, Meteor 등
  • 모바일 앱 프레임워크: React Native
  • 데스크탑 개발 도구: Electron(Atom, Slack, VSCode, Discord)

출처:

🔍 더 깊게 공부하기 위한 사이트

0개의 댓글