
Node.js란?
Node.js는 Chrome V8 JavaScript 엔진 위에서 동작하는 비동기 이벤트 기반의 서버 사이드 JavaScript 런타임 환경입니다.
즉, JavaScript를 브라우저뿐만 아니라 서버에서도 실행할 수 있도록 만들어진 실행 환경입니다.
🔹 Node.js의 주요 특징
1️⃣ 비동기(Asynchronous) 및 이벤트 기반(Event-Driven)
- 기본적으로 논 블로킹(Non-Blocking) I/O 모델을 사용하여 요청을 동시에 처리 가능.
async/await
,Promise
등을 사용하여 효율적으로 비동기 프로그래밍 가능.
2️⃣ 싱글 스레드 기반의 고성능 처리
- 기본적으로 싱글 스레드(Single Thread) + 이벤트 루프(Event Loop) 를 사용하여 요청을 처리.
libuv
라이브러리를 활용하여 내부적으로 스레드 풀(Thread Pool)을 활용하여 멀티 스레드처럼 동작할 수 있음.
3️⃣ 빠른 실행 속도
- Google V8 엔진을 사용하여 JavaScript를 컴파일하고 실행하기 때문에 매우 빠름.
- Just-In-Time(JIT) 컴파일 방식을 이용하여 실행 속도 최적화.
4️⃣ NPM(Node Package Manager) 제공
- 전 세계 개발자들이 만든 패키지를 쉽게 설치하고 관리할 수 있는 도구.
- Express, React, Vue, MongoDB 드라이버 등 수많은 패키지가 제공됨.
5️⃣ 모듈 기반 구조
require
또는import
를 통해 필요한 기능을 모듈 단위로 가져와서 사용 가능.- CommonJS(
require()
)와 ES 모듈(import
) 방식 지원.
🔹 Node.js의 주요 용도
- 웹 서버 개발 → Express, Koa 같은 프레임워크 사용
- API 서버 → RESTful API, GraphQL API 개발
- 실시간 애플리케이션 → WebSocket을 활용한 채팅, 스트리밍 서비스
- 마이크로서비스 → 서버를 여러 개의 작은 서비스로 나누어 개발
- 스케줄링 및 배치 작업 → CronJob, 백그라운드 작업 처리
- IoT 및 임베디드 시스템 → 가벼운 환경에서도 실행 가능
🔹 Node.js 코드 예제
✅ 간단한 HTTP 서버 만들기
Node.js로 기본적인 웹 서버를 만들 수 있습니다.
import http from "http";
const server = http.createServer((req, res) => {
res.writeHead(200, { "Content-Type": "text/plain" });
res.end("Hello, Node.js!");
});
server.listen(3000, () => {
console.log("서버가 http://localhost:3000 에서 실행 중...");
});
http://localhost:3000
에 접속하면"Hello, Node.js!"
가 출력됨.
🔹 Node.js 실행 방법
- Node.js 설치
- 공식 홈페이지에서 다운로드 후 설치.
node -v
를 실행하여 버전 확인 가능.
- 스크립트 실행
- 파일을 생성하고(
app.js
또는server.ts
) 아래 명령어 실행:node app.js
- 파일을 생성하고(
- 패키지 관리(NPM 사용)
- 패키지 초기화:
npm init -y
- 패키지 설치:
npm install express
- 실행:
node app.js
- 패키지 초기화:
🔹 Node.js의 장점과 단점
✅ 장점
- 빠른 속도 → V8 엔진 기반으로 고속 실행.
- 비동기 처리 → 싱글 스레드 기반으로 효율적 요청 처리.
- 광범위한 라이브러리 지원 → NPM을 통한 패키지 활용 가능.
- 풀스택 개발 가능 → 서버 & 클라이언트를 JavaScript로 통합 개발 가능.
❌ 단점
- 싱글 스레드의 한계 → CPU 집약적인 작업에는 부적합.
- 콜백 지옥(Callback Hell) 문제 →
async/await
또는Promise
를 이용한 해결 필요. - 메모리 관리가 어렵다 → 메모리 누수 발생 가능.
📌 결론
- Node.js는 JavaScript를 서버 환경에서 실행할 수 있도록 만들어진 런타임 환경
- 비동기 이벤트 기반의 논 블로킹 I/O 모델로 높은 성능을 제공
- 웹 서버, API, 실시간 애플리케이션 등 다양한 용도로 사용
- 싱글 스레드 기반이라 CPU 집약적인 작업에는 적합하지 않음
- NPM을 통해 강력한 패키지 생태계를 제공하여 개발 속도 향상 가능