node

[Node.js] Node.js 개념 잡기

멋쟁이개굴이 2022. 11. 9. 23:46

React로 프로젝트를 진행하려면 필수인것 같은 node.js에 대해 개념을 잡아보려고 한다. 

 

 

💡 Node.js 란?

JavaScript를 웹 브라우저가 아닌 PC에서도 독립적으로 실행시켜주는 도구

⚡️ Chrome V8 JavaScript 엔진으로 빌드 된 JavaScript 런타임으로 주로 서버사이드 애플리케이션 개발에 사용되는 소프트웨어 플랫폼

 

 

🥕  Node.js는 JavaScript를 사용해 개발한다.

 

🥕  Node.js는 서버사이드 스크립트 언어가 아닌 프로그램 환경이다.

 

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

    ➡️ 데이터를 실시간 처리하여 빈번한 I/O가 발생하는 SPA(Single Page Application)에 적합하다. 

       (하지만 CPU 사용률이 높은 애플리케이션에서는 권장하지 않는다.)

 

🥕  Node.js는 모듈, 파일시스템, HTTP 등 Built-in API를 제공한다.

     ➡️ 내장 HTTP 서버 라이브러리를 포함하고 있어 웹 서버에서 아파치 등의 별도 소프트웨어 없이 동작하는것이 가능하다.

 

🥕 이전에는 Server-Client 웹 사이트를 만들 때 JavaScript + 서버(Reby, Java) 등 다른 언어를 써서 만들어야 했는데  Node.js를 이용하면 자바스크립트 한 가지 언어로 전체 웹 페이지를 만들 수 있다.

 

 

💡 Node.js 의 특징

⚡️ 이벤트 기반(Event-driven) 

이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식 (ex. 클릭이나 네트워크 요청 등)

 

• 이벤트 기반 시스템에서는 특정 이벤트가 발생할 때 무엇을 할지 미리 등록해두어야 한다.

   ➡️  이를 이벤트 리스너(event listener)에 콜백(callback) 함수를 등록한다고 표현한다.

 

• 노드도 이벤트 기반 방식으로 동작하므로, 이벤트가 발생하면 이벤트 리스너에 등록해둔 콜백 함수를 호출한다.

 

• 발생한 이벤트가 없거나 발생했던 이벤트를 다 처리하면, 노드는 다음 이벤트가 발생할 때까지 대기한다.

 

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

 

⚡️ 논 블로킹 I/O (Non-blocking I/O)

오래 걸리는 함수를 백그라운드로 보내서 다음 코드가 먼저 실행되게 하고, 나중에 오래 걸리는 함수를 실행

 

Blocking : 자신의 작업을 진행하다가 다른 주체의 작업이 시작되면 다른 작업이 끝날 때 까지 기다렸다가 자신의 작업을 시작

Non-Blocking : 다른 주체의 작업에 관련없이 자신의 작업을 시작

 

 

❓[블로킹&논블로킹]  vs  [동기&비동기]

 

블로킹 & 논블로킹 : 처리되어야 하는 (하나의) 작업이, 전체적인 작업 '흐름'을 막느냐 안막느냐에 대한 관점

➡️  즉, 제어권이 누구한테 있느냐가 관심사

 

동기 & 비동기 : 처리해야할 작업들을 어떠한 '흐름'으로 처리 할 것인가에 대한 관점

➡️ 즉, 호출되는 함수의 작업 완료 여부를 신경쓰냐에 따라, 함수 실행/리턴순차적인 흐름을 따르느냐, 안따르느냐 관심사

 

 

 

💡 Node.js의 장점

1. 멀티 스레드 방식에 비해 적은 컴퓨터 자원을 사용한다.

2. I/O 작업이 많은 서버로 적합하다.

3. 웹 서버가 내장되어 있어 별도의 웹서버를 설치할 필요가 없다.

4. 자바스크립트를 사용하기 때문에 JSON 형식과 쉽게 호환된다.

 

 

 

 

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

Node.js  교과서 (조현영)