1. 노드의 정의
Node.js는 크롬 V8 자바스크립트 엔진으로 빌드된 자바스크립트 런타임이다.
(런타임이란? > 특정 언어로 만든 프로그램들을 실행할 수 있게 해주는 가상 머신의 상태)
노드는 서버의 역할도 수행할 수 있는 자바스크립트 런타임으로 자바스크립트로 작성된 서버를 실행할 수 있도 http/https/http2 모듈을 제공
> 노드 외의 다른 자바스크립트 런타임으로는 크롬, 파이어폭스 같은 브라우저가 있음
> 노드는 V8과 libuv를 내부적으로 포함한다.
- V8 엔진: 오픈소스 자바스킄립트 엔진 -> 속도문제 개선
- libuv: 노드의 특성인 이벤트 기반, 논블로킹 I/O 모델을 구현한 라이브러리
2. 이벤트 기반
> 이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식. 대부분의 프로그램은 이벤트 방식이다
- 이벤트의 예: 클릭, 네트워크 요청, 타이머 등
- 이벤트 리스너: 이벤트를 등록하는 함수
- 콜백 함수: 이벤트가 발생했을 때 실행될 함수
3. 논블로킹 I/O
> 논 블로킹 : 오래 걸리는 함수를 백그라운드로 보내서 다음 코드가 먼저 실행되게 하고, 나중에 오래 걸리는 함수를 실행
- 논 블로킹 방식 하에서 일부 코드는 백그라운드에서 병렬로 실행됨
- 일부 코드: I/O 작업 (파일 시스템 접근, 네트워크 요청, 데이터베이스 접근), 압축, 암호화 등
- 나머지 코드는 블로킹 방식으로 실행됨
- I/O 작업이 많을 때 노드 활용성이 극대화
4. 프로세스와 스레드
- 프로세스 : 운영체제에서 할당하는 작업의 단위, 프로세스 간 자원공유 X
- 스레드 : 프로세스 내에서 실행되는 작업의 단위. 부모 프로세스 자원 공유
> 노드 프로세스는 멀티 스레드이지만 직접 다룰 수 있는 스레드는 하나이기 때문에 싱글 스레드라고 표현
> 노드는 주로 멀티 스레드 대신 멀티 프로세스 활용
> 노드는 14 버전부터 멀티 스레드 사용 가능
5. 싱글 스레드
> 싱글 스레드라 주어진 일을 하나밖에 처리하지 못함
- 블로킹이 발생하는 경우 나머지 작업은 모두 대기해야 함 > 비효율 발생
- 대부분의 I/O 작업은 CPU가 직접 데이터를 처리하는것보다 상대적으로 시간이 오래 걸림. 예를들어 인터넷을 통해 데이터를 요청하면 네트워크 상황에 따라 몇 초가 걸릴 수도 있음.
> 대신 논 블로킹 모델을 채택하여 일부 코드(I/O)를 백그라운드(다른 프로세스)에서 실행 가능
> 요청을 먼저 받고, 완료될 때 응답함
- I/O 관련 코드가 아닌 경우 싱글 스레드, 블로킹 모델과 같아짐
6. 멀티 스레드 모델과의 비교
> 싱글 스레드 모델은 에러를 처리하지 못하는 경우 멈춤
- 프로그래밍 난이도 쉽고, CPU, 메모리 자원 적게 사용
> 멀티 스레드 모델은 에러 발생 시 새로운 스레드를 생성하여 극복
- 단 새로운 스레드 생성이나 놀고있는 스레드 처리에 비용 발생
- 프로그래밍 난이도 어려움
- 스레드 수만큼 자원을 많이 사용함
7. 멀티 스레드의 활용
> 노드 14버전
- 멀티 스레드를 사용할 수 있도록 worker_threads 모듈 도입
- CPU를 많이 사용하는 작업인 경우에 활용 가능
- 멀티 프로세싱만 가능했던 아쉬움을 달래줌
8. 서버로서의 노드
> 서버 : 네트워크를 통해 클라이언트에 정보나 서비스를 제공하는 컴퓨터 또는 프로그램
> 클라이언트: 서버에 요청을 보내는 주체(브라우저, 데스크탑 프로그램, 모바일 앱, 다른 서버에 요청을 보내는 서버)
> 노드 != 서버
> 하지만, 노드는 서버를 구성할 수 있게 하는 모듈을 제공
9. 서버로서의 노드
> 노드 서버의 장단점
| 장점 | 단점 |
| 멀티 스레드 방식에 비해 컴퓨터 자원을 적게 사용함 | 싱글 스레드라서 CPU코어를 하나만 사용함 |
| I/O 작업이 많은 서버로 적합 | CPU 작업이 많은 서버로는 부적합 |
| 멀티 스레드 방식보다 쉬움 | 하나뿐인 스레드가 멈추지 않도록 관리해야 함 |
| 웹 서버가 내장되어 있음 | 서버의 규모가 커졌을 때 서버를 관리하기 어려움 |
| 자바스크립트를 사용함 | 어중간한 성능 |
| JSON 형식과 호환하기 쉬움 |
> CPU작업을 위해 AWS Lambda나 Google Cloud Functions 같은 별도 서비스 사용
> 페이팔, 넷플릭스, 나사, 월마트, 링크드인, 우버 등에서 메인 또는 서브 서버로 사용
10. 서버 외의 노드
> 자바스크립트 런타임이기 때문에 용도가 서버에만 한정되지 않음
> 웹 모바일 데스크탑 애플리케이션에도 활용
- 웹 프레임워크: Angular, React, Vue, Meteor ..
- 모바일 : React Native
- 데스크탑 개발도구 : Electron/Atom, Slack, VSCode, Discord 등 제작 (노드기반)
11. 노드 설치하기
- Current 설치
- VSCode 설치
Node.js — Run JavaScript Everywhere
Node.js® is a free, open-source, cross-platform JavaScript runtime environment that lets developers create servers, web apps, command line tools and scripts.
nodejs.org
https://code.visualstudio.com/
Visual Studio Code - Code Editing. Redefined
Visual Studio Code redefines AI-powered coding with GitHub Copilot for building and debugging modern web and cloud applications. Visual Studio Code is free and available on your favorite platform - Linux, macOS, and Windows.
code.visualstudio.com
https://kiro.dev/ 이건 나의추천 IDE
'FE > JavaScript' 카테고리의 다른 글
| [#1 Node] 알아둘 JavaScript 정리 (6) | 2025.07.27 |
|---|---|
| [26장] 모던 자바스크립트 Deep Dive - ES6 함수의 추가 기능 (0) | 2025.01.12 |
| [24장] 모던 자바스크립트 Deep Dive - 클로저 (1) | 2024.12.27 |
| [21장] 모던 자바스크립트 Deep Dive - 빌트인 객체 (0) | 2024.12.11 |
| [17장] 모던 자바스크립트 Deep Dive - 생성자 함수에 의한 객체 생성 (1) | 2024.12.02 |