서버란 네트워크를 통해 클라이언트에 정보나 서비스를 제공하는 컴퓨터 또는 프로그램이다. (요청)
클라이언트란 요청을 보내는 주체이다. (응답)
-> 노드는 자바스크립트 프로그램이 서버로서 기능하기 위한 도구를 제공하므로 서버의 역할을 수행할 수 있다.
Node.js는 Chrome V8 Javascript 엔진으로 빌드된 자바스크립트 런타임입니다.
위는 공식 사이트에 게시된 노드 소개 글이다. 위와 같이 노드는 자바스크립트 런타임이다.
런타임이란 특정 언어로 만든 프로그램들을 실행할 수 있는 환경이다.
노드는 이벤트 기반 방식으로 동작한다.
이벤트 기반이란 이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식이다.
이벤트 기반 시스템에서는 특정 이벤트가 발생할 때 무엇을 할지 미리 등록을 해두어야 한다.
= 이벤트 리스너에 콜백 함수를 등록한다.
예를 들어, 클릭 이벤트 리스너에 경고창 콜백 함수를 등록해두면 클릭할 때마다 경고창이 뜬다.
만약 여러 이벤트가 동시에 발생한다면, 이벤트 루프가 판단한다.
이벤트 루프는 콜백 함수들을 관리하고 호출된 콜백 함수의 실행 순서를 결정한다.
function first() {
second();
console.log('첫 번째');
}
function second() {
third();
console.log('두 번째');
}
function third() {
console.log('세 번째');
}
first();
위 코드를 살펴보면 코드는 다음과 같이 실행된다.
1) first() 함수의 호출
2) first() 함수 내에서 second() 함수가 호출
3) second() 함수 내에서 third() 함수가 호출
4) third() 함수 내에서 console.log('세 번째');가 실행되고 콘솔에 '세 번째' 출력
5) 다시 second() 함수로 돌아와서 console.log('두 번째');가 실행되고 콘솔에 '두 번째' 출력
6) 다시 first() 함수로 돌아와서 console.log('첫 번째');가 실행되고 콘솔에 '첫 번째'가 출력
세 번째
두 번째
첫 번째
이벤트 루프를 활용하면 작업을 효율적으로 수행할 수 있다. 이 때, 노드는 논블로킹 방식을 사용한다.
논블로킹이란 이전 작업이 완료될 때까지 대기하지 않고 다음 작업을 수행하는 것이다.
논블로킹 방식을 코드로 확인해보자.
function longRunningTask() {
//오래 걸리는 작업
console.log('작업 끝');
}
console.log('시작');
setTimeout(longRunningTask, 0);
console.log('다음 작업');
setTimeout(콜백, 0)은 코드를 논블로킹으로 만들기 위해 사용되는 기법이다.
따라서 위 코드의 콘솔에는 다음과 같이 출력된다.
시작
다음 작업
작업 끝
**노드에서는 동기와 블로킹이 유사하고 비동기와 논블로킹이 유사하다. 이는 3.6.1절에서 자세히 설명할 예정이다.
프로세스란 운영체제에서 할당하는 작업의 단위이다. ex) 노드, 웹 브라우저
스레드란 프로세스 내에서 실행되는 흐름의 단위이다. 스레드들은 부모 프로세스의 자원을 공유한다.
노드는 싱글 스레드로 여겨진다. (싱글 스레드로 동작하는 것은 아니다)
노드를 실행하면 하나의 프로세스가 생성되고 그 프로세스에서 내부적으로 여러 개의 스레드를 생성하는데,
이 중 우리가 제어할 수 있는 스레드는 하나이다.
장점
- I/O 처리를 잘한다.
- 논블로킹 방식이라 스레드 하나가 많은 I/O를 혼자 감당할 수 있다.
- 멀티 스레드 방식에 비해 적은 컴퓨터 자원을 사용한다.
- 멀티 스레드 방식보다 쉽다.
- 웹 서버가 내장되어 편리하다.
- 자바스크립트를 사용하여 개발 생산성을 높인다.
- 요즘 사용하는 데이터 교환 형식인 JSON 과 쉽게 호환된다.
단점
- 싱글 스레드라 CPU 코어를 하나만 사용한다.
- CPU 작업이 많은 서버로는 부적합하다.
- 스레드가 하나뿐이므로 멈추지 않도록 관리해야 한다.
- 서버 규모가 커지면 관리가 어렵다.
- 성능이 어중간하다.
- 속도가 느린 편이다.
노드는 서버 뿐만 아니라 웹, 모바일, 데스크톱 애플리케이션 개발에도 사용된다.
ex) 앵귤러, 리액트, 뷰, 리액트 네이티브, 일렉트론 등...
노드 개발 환경은 다음과 같이 설정한다.
1. 노드 설치하기
2. npm 버전 업데이트하기
3. VS code 설치하기
1. ( 서버 )는 네트워크를 통해 클라이언트에 정보나 서비스를 제공하는 컴퓨터 또는 프로그램이다.
2. 이벤트 기반 시스템에서는 ( 이벤트 리스너 )에 ( 콜백 함수 )를 등록한다.
3. ( 이벤트루프 )는 콜백 함수들을 관리하고 호출된 콜백 함수의 실행 순서를 결정한다.
4, 블로킹 코드를 논블로킹으로 만들기 위해 사용되는 기법은 ( setTimeout(콜백, 0) )이다.
5. 프로세스와 스레드 중 ( 스레드 )는 부모 프로세스의 자원을 공유한다.
6. 노드는 ( JavaScript ) 언어를 사용하여 개발 생산성이 높다.
7. 노드 기반으로 돌아가는 데스크톱 개발 도구 중 가장 대표적인 도구는 ( 일렉트론 )이다.
1. 다음 코드는 블로킹 방식의 코드이다. setTimeout을 사용해서 논블로킹 방식으로 바꿔보시오.
function heavyTask() {
console.log('수학은 할 게 가장 많다');
}
function littleHeavyTask() {
console.log('국어는 할 게 두 번째로 많다.');
}
heavyTask();
console.log('영어는 할 게 제일 적다.');
littleHeavyTask();
1번 답
function heavyTask() {
console.log('수학은 할 게 가장 많다');
}
function littleHeavyTask() {
console.log('국어는 할 게 두 번째로 많다.');
}
setTimeout(heavyTask, 0);
console.log('영어는 할 게 제일 적다.');
setTimeout(littleHeavyTask, 0);
출처 :
조현영, 『 Node.js 교과서 개정 3판』, 길벗(2022)
Corner Node.js 1
Editor : 빠다코코넛
[노드 1팀] 3장. 노드 기능 알아보기 (2) (0) | 2024.11.08 |
---|---|
[노드 1팀] 3장. 노드 기능 알아보기 (1) (0) | 2024.10.11 |
[노드 1팀] 2장. 알아둬야 할 JavaScript (0) | 2024.10.11 |
[노드 1팀] 2주차. JavaScript 반복문(Loop), 반복자(Iterator), 객체(Object) (2) | 2024.10.04 |
[노드 1팀] 1주차. JavaScript 조건문(conditionals), 함수(functions), 배열(array) (0) | 2024.10.04 |