Node.js
기본 정보
- 이름: Node.js
- 분류: JavaScript 런타임 환경
- 개발자: 라이언 달(Ryan Dahl)
- 최초 공개: 2009년
- 엔진: Google V8 JavaScript Engine
- 주요 용도: 백엔드 개발, REST API, 실시간 서버, CLI, 자동화
- 관련 주제: #Nodejs #JavaScript #백엔드 #Express #API
개요
Node.js는 Google V8 JavaScript 엔진 기반의 JavaScript 런타임 환경이다.
기존에는 브라우저에서만 실행되던 JavaScript를 서버에서도 실행할 수 있도록 개발되었으며, 현재는 웹 서버, REST API, 채팅 서버, CLI 프로그램, 자동화 도구 등 다양한 분야에서 활용되고 있다.
비동기(Event-Driven) 및 논블로킹(Non-blocking I/O) 구조를 채택하여 많은 동시 요청을 효율적으로 처리할 수 있다.
주요 특징
- JavaScript 기반 서버 개발
- V8 엔진 사용
- 논블로킹 I/O
- 이벤트 기반(Event Loop)
- npm 생태계 제공
- 크로스 플랫폼 지원
- 빠른 개발 속도
실행 구조
Client
↓
Node.js Runtime
↓
Event Loop
↓
File System / Database / Network
↓
Response
Hello World
console.log("Hello Node.js");
실행
node app.js
HTTP 서버 생성
const http = require("http");
const server = http.createServer((req, res) => {
res.end("Hello Node.js");
});
server.listen(3000);
모듈(Module)
const fs = require("fs");
const path = require("path");
Node.js는 모듈 기반으로 동작한다.
파일 읽기
const fs = require("fs");
const text = fs.readFileSync("test.txt", "utf8");
console.log(text);
파일 쓰기
fs.writeFileSync("test.txt", "Hello");
비동기 처리
fs.readFile("test.txt","utf8",(err,data)=>{
console.log(data);
});
Node.js는 비동기 처리를 기본적으로 많이 사용한다.
Promise
fetch(url)
.then(res=>res.json())
.then(data=>{
});
async / await
async function load(){
const data = await fetch(url);
}
현대 Node.js에서는 async/await 사용이 일반적이다.
npm
Node.js의 공식 패키지 관리자이다.
설치
npm install express
패키지 생성
npm init
package.json
{
"name":"project",
"version":"1.0.0"
}
프로젝트 정보와 의존성 패키지를 관리한다.
Express
Node.js에서 가장 많이 사용하는 웹 프레임워크이다.
const express = require("express");
const app = express();
app.get("/", (req,res)=>{
res.send("Hello");
});
app.listen(3000);
REST API
app.get("/member",(req,res)=>{
res.json({
name:"구름"
});
});
모바일 앱 및 프론트엔드와 통신할 때 많이 사용된다.
Middleware
app.use(express.json());
요청 처리 전후에 공통 기능을 수행할 수 있다.
예시
- 로그인 체크
- JWT 인증
- 로그 기록
- CORS 처리
환경 변수
.env
PORT=3000
DB_HOST=localhost
사용
process.env.PORT
대표 라이브러리
- Express
- NestJS
- Koa
- Fastify
- Socket.IO
- Axios
- Prisma
- Sequelize
- Mongoose
데이터베이스
Node.js는 다양한 DB와 연동 가능하다.
실시간 서비스
Node.js는 WebSocket 기반 서비스에 많이 사용된다.
대표 사례
- 채팅
- 게임 서버
- 주식 시세
- 알림 시스템
- 실시간 대시보드
주요 활용 분야
- REST API
- 웹 서버
- 관리자 페이지
- 실시간 채팅
- 게임 서버
- CLI 프로그램
- 크롤러
- 자동화 프로그램
- AI API 서버
장점
- JavaScript 하나로 프론트·백엔드 개발 가능
- 개발 속도가 빠름
- npm 생태계가 매우 풍부함
- 실시간 서비스에 적합
- 높은 생산성
- 활발한 커뮤니티
단점
- CPU 집약적 작업에는 비효율적
- 싱글 스레드 구조
- 콜백 지옥 문제가 발생할 수 있음
- 패키지 의존성 관리가 중요함
실무 메모
실무에서는 다음과 같은 방식이 권장된다.
- 최신 LTS 버전 사용
async/await사용- Express 또는 NestJS 활용
.env로 환경변수 관리- ESLint 및 Prettier 적용
- PM2로 프로세스 관리
- Winston/Pino로 로그 관리
- JWT 기반 인증 적용
- Docker 컨테이너 배포
- TypeScript 사용 적극 권장
Node.js와 함께 사용하는 기술
대표 개발 도구
- Visual Studio Code
- npm
- pnpm
- Yarn
- PM2
- Nodemon
- Postman
관련 문서
출처
- Node.js 공식 홈페이지
- Node.js 공식 API 문서
- V8 JavaScript Engine Documentation