0. Node.js란?

- 서버 측 자바스크립트 런타임 환경
- 확장성 있는 네트워크 애플리케이션 (특히 서버 사이드) 개발에 사용되늰 소프트웨어 플랫폼
- 브라우저 밖에서도 자바스크립트 사용 가능
- 자바스크립트 실행 엔진으로 구글 크롬에서 사용하는 V8 엔진 탑재 ▶ 실행 속도 빠름
- 단일 스레드 이벤트 루프, 비동기 I/O 모델 사용 ▶ 가볍고 효율적 + 높은 처리 성능
- 내장 HTTP 서버 라이브러리 포함 ▶ 웹 서버에서 별도 소프트웨어(ex. 아파치 등) 없이 동작 가능
- NPM 패키지 매니저 : 세계에서 가장 큰 오픈 소스 라이브러리
★ 런타임
- runtime = 실행시간
- 컴퓨터 프로그램이 실행되고 있는 동안의 동작을 의미
- 컴퓨터 언어 안에 쓰인 프로그램을 관히라기 위해 특정 컴파일러 혹은 가상 머신이 사용하는 기본 코드의 라이브러리나 프로그램을 가리키는 런타임 라이브러리라고도 함
ex )
- JS와 같은 프로그래밍 언어로 어떠한 기능 생성
- 컴퓨터에서 작동시키기 위해 해당 코드는 컴퓨터가 이해할 수 있도록 자연어 기반의 코드로 변환 필요
( 컴퓨는 0과 1의 비트열로만 이루어진 자연어 / 기계어만 이해 ) - 브라우저가 해당 작업을 내부적으로 수행
- 사용자에게 화면을 통해 기능을 보여줌

1. 특징
1.1 JavaScript 언어 사용
- JavaScript 언어는 원래 웹 브라우저 환경에서만 동작했으나, Node.js의 동장으로 터미널에서도 브라우저 없이 바로 실행이 가능하게 됨
- JavaScript 언어 하나로 프론트 / 백엔드(서버) 개발을 동시에 할 수 있게 됨
1.2 Single Thread
Node.js는 싱글 스레드 방식을 사용
( 싱글 스레드 / 멀티 스레드 관련 게시글 참고 : https://jinnycoding.tistory.com/47)
[운영체제] 프로세스/스레드/스택/큐
0. Process (프로세스) 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램 운영체제로부터 시스템 자원을 할당받는 작업의 단위 즉, 동적인 개념으로는 실행된 프로그램을 의미 각각 독립된
jinnycoding.tistory.com
- 사용자가 직접 제어할 수 있는 스레드는 1개 ( Call Stack 한 개 )
- 싱글 스레드이기 때문에 한 번에 하나의 작업만 수행 가능
- Non-blocking I/O 기능으로 일부 코드는 백그라운드 (다른 프로세스) 에서 실행 가능
- 에러를 처리하지 못하는 경우 멈춤 ▶ 예외 처리의 중요성
- 프로그래밍 난이도가 비교적 쉬움
- CPU, 메모리 자원의 사용량이 적음

1.3 Non-Blocking I/O
Node.js의 특징에 대해 살펴보기 전 간단하게 블로킹과 논블로킹, I/O가 무엇인지 확인하려고 한다.
[ 블로킹 ]
하나의 작업이 끝나야 다음 작업 수행 가능

[ 논 블로킹 ]
작업이 완료될 때까지 대기 X, 다음 작업 수행 가능
▶ 빨리 완료된 순서로 처리

같은 작업을 수행하는 경우, 블로킹 방식에 비해 논블로킹 방식이 더 빠른 시간 내에 처리 가능
[ I/O ]
입출력 (input / output) 작업
(ex. 파일 시스템 접근 읽기 , 쓰기 , 만들기 등 ), 네트워크 요청 등)
- Node.js는 I/O 작업을 할 때 논블로킹 방식으로 처리
- 동시에 처리할 수 있는 작업을 최대한 묶어 백그라운드로 넘김
- 효율성이 좋고 작업 처리 시간이 짧아짐
1.4 이벤트 기반 (Event-Driven) 아키텍처
- 이벤트가 발생할 때 미리 지정해둔 작업을 수행
ex) 클릭, 네트워크 요청, 타이머 등 - 이벤트 기반 아키텍처에는 특정 이벤트가 발생할 때 무엇을 할지 미리 등록
▷ 이벤트 리스너 (Event Listener) : 이벤트 등록 함수
▷ 콜백 함수 (Callback Function) : 이벤트가 발생했을 때 실행되는 함수

728x90
'Node' 카테고리의 다른 글
[Node] JWT 토큰 구현 (0) | 2023.11.03 |
---|---|
[새싹X코딩온] 1차 프로젝트 회고록 : 새싹인 (0) | 2023.10.06 |
[Node] nodemon 설치 및 사소한 오류 / nodemon: command not found (0) | 2023.09.09 |
[Node] multer 모듈 (3) | 2023.08.21 |
[Node] NPM 기초 (0) | 2023.01.20 |