Node.js는 자바스크립트 런타임이다.
➡️ 노드 자체는 서버가 아니다!
이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식
이벤트 리스너에 콜백 함수 등록 -> 시스템에서 이벤트 발생 -> 등록된 콜백 함수 호출
논 블로킹: 오래 걸리는 함수를 백그라운드로 보내서 다음 코드가 먼저 실행되게 하고, 나중에 오래 걸리는 함수를 실행
➡️ I/O 작업이 많을 때 노드 활용성 굳.
➡️ 노드는 블로킹이면서 동기, 비동기면서 논블로킹
동기 코드가 순서대로 실행, 비동기 코드가 순서대로 실행 ❌
블로킹 코드가 순서대로 실행, 논블로킹 코드가 순서대로 실행 ❌
프로세스: 운영체제에서 할당하는 작업의 단위, 프로세스 간 자원 공유 없음
스레드: 프로세스 내에서 실행되는 작업의 단위, 부모 프로세스 자원 공유 가능
노드 프로세스는 멀티 스레드이지만 직접 다룰 수 있는 스레드는 하나이기 때문에 싱글 스레드라고 표현한다.
노드는 주로 멀티 스레드 대신 멀티 프로세스를 활용한다.
싱글 스레드라 주어진 일을 하나밖에 처리하지 못함
대신 논 블로킹 모델을 채택하여 일부 코드(I/O)를 백그라운드(다른 프로세스)에서 실행 가능
싱글 스레드 모델은 에러를 처리하지 못하는 경우 멈춘다.
멀티 스레드 모델은 에러 발생 시 새로운 스레드를 생성하여 극복
➡️ 멀티스레드를 사용하지 않기위해 노드를 하는 것!
서버: 네트워크를 통해 클라이언트에 정보나 서비스를 제공하는 컴퓨터 또는 프로그램
클라이언트: 서버에 요청을 보내는 주체(브라우저, 프로그램, 앱, 서버 등)
노드는 서버가 아니다!
그러나, 노드는 서버를 구성할 수 있게 하는 모듈을 제공한다.
자바스크립트는 스크립트의 언어라서 즉석에서 코드를 실행할 수 있다.
특정한 기능을 수행하는 함수나 변수들의 집합이다.
var.js
const odd = '홀수입니다';
const even = '짝수입니다';
module.exports = {
odd,
even,
}; //객체임
func.js
const {odd, even} = require('./var');
function checkOddOrEven(number) {
if (number % 2) {
return odd;
} else {
return even;
}
}
module.exports = checkOddOrEven;
index.js
const { odd, even } = require('./var');
const checkNumber = require('./func');
function checkStringOddEven(str) {
if (str.length % 2) {
return odd;
} else {
return even;
}
}
console.log(checkNumber(10));
console.log(checkStringOddEven('hello'));
터미널
node index