Node.js는 비동기 이벤트 기반의 서버 사이드 JavaScript 환경으로, 가볍고 빠른 성능을 자랑합니다. 이번 글에서는 Node.js로 백엔드 서버를 구축하는 방법을 자세하게 설명합니다.
1. Node.js란?
Node.js는 Chrome V8 JavaScript 엔진 위에서 실행되는 런타임 환경으로, 서버 사이드 애플리케이션을 개발하는 데 사용됩니다.
Node.js의 특징
- 비동기 I/O 및 이벤트 기반 아키텍처: 높은 성능을 보장하며, 대규모 트래픽을 처리할 수 있습니다.
- 싱글 스레드 기반: 하나의 스레드로 동작하지만, 이벤트 루프를 활용해 비동기 작업을 효율적으로 처리합니다.
- NPM(Node Package Manager): 다양한 오픈소스 패키지를 활용할 수 있어 개발 속도가 빠릅니다.
2. Node.js 개발 환경 설정
Node.js 설치
- Node.js 공식 홈페이지에서 최신 버전을 다운로드합니다.
- 설치 후, 터미널에서 다음 명령어로 정상적으로 설치되었는지 확인합니다.
node -v npm -v
프로젝트 초기화
Node.js 프로젝트를 시작하려면, npm init
명령어를 사용하여 package.json
파일을 생성합니다.
mkdir my-node-server
cd my-node-server
npm init -y
3. Express를 활용한 서버 구축
Express는 Node.js에서 가장 널리 사용되는 웹 프레임워크로, 간단한 API부터 복잡한 웹 애플리케이션까지 개발할 수 있습니다.
Express 설치
npm install express
기본 서버 코드 작성
const express = require('express');
const app = express();
const PORT = 3000;
app.get('/', (req, res) => {
res.send('Hello, Node.js!');
});
app.listen(PORT, () => {
console.log(`서버가 ${PORT}번 포트에서 실행 중입니다.`);
});
이제 node server.js
명령어로 서버를 실행하고, 브라우저에서 http://localhost:3000
에 접속하면 "Hello, Node.js!" 메시지를 확인할 수 있습니다.
4. RESTful API 구축하기
JSON 데이터 반환
app.get('/api/data', (req, res) => {
res.json({ message: 'Hello, API!', data: [1, 2, 3, 4, 5] });
});
POST 요청 처리
app.use(express.json());
app.post('/api/data', (req, res) => {
const receivedData = req.body;
res.json({ message: '데이터가 성공적으로 수신되었습니다.', receivedData });
});
5. 데이터베이스 연동
Node.js 백엔드에서는 다양한 데이터베이스(MySQL, MongoDB, PostgreSQL 등)와 연동할 수 있습니다. 여기서는 MongoDB를 사용한 예제를 소개합니다.
MongoDB 연결
MongoDB를 사용하려면 Mongoose 패키지를 설치해야 합니다.
npm install mongoose
MongoDB 연결 코드
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/mydatabase', {
useNewUrlParser: true,
useUnifiedTopology: true
}).then(() => {
console.log('MongoDB 연결 성공');
}).catch(err => {
console.error('MongoDB 연결 실패:', err);
});
스키마 및 모델 정의
const userSchema = new mongoose.Schema({
name: String,
age: Number
});
const User = mongoose.model('User', userSchema);
데이터 추가
app.post('/api/users', async (req, res) => {
const newUser = new User(req.body);
await newUser.save();
res.json({ message: '사용자가 추가되었습니다.', newUser });
});
6. 미들웨어 활용
미들웨어는 요청과 응답 사이에서 특정 기능을 수행하는 함수입니다.
로깅 미들웨어 추가
const morgan = require('morgan');
app.use(morgan('dev'));
CORS 설정
const cors = require('cors');
app.use(cors());
7. JWT를 활용한 인증
JWT(JSON Web Token)를 사용하여 사용자 인증을 구현할 수 있습니다.
JWT 패키지 설치
npm install jsonwebtoken dotenv
JWT 생성 및 검증
const jwt = require('jsonwebtoken');
const SECRET_KEY = 'mysecretkey';
app.post('/api/login', (req, res) => {
const user = { id: 1, username: 'admin' };
const token = jwt.sign(user, SECRET_KEY, { expiresIn: '1h' });
res.json({ token });
});
const authenticate = (req, res, next) => {
const token = req.headers.authorization;
if (!token) return res.status(403).json({ message: '토큰이 필요합니다.' });
jwt.verify(token, SECRET_KEY, (err, decoded) => {
if (err) return res.status(401).json({ message: '유효하지 않은 토큰입니다.' });
req.user = decoded;
next();
});
};
app.get('/api/protected', authenticate, (req, res) => {
res.json({ message: '인증된 사용자만 접근 가능합니다.', user: req.user });
});
결론
Node.js를 활용한 백엔드 서버 구축 방법을 살펴보았습니다. Express를 이용한 API 개발, 데이터베이스 연동, 미들웨어 적용, JWT 인증 등 실무에서 필수적으로 사용되는 개념을 다루었습니다. 이를 바탕으로 다양한 프로젝트에 적용해 보시길 바랍니다.
'문서 및 기타 > 이것저것' 카테고리의 다른 글
클린 코드 작성 방법: 유지보수성과 가독성을 높이는 원칙 (0) | 2025.02.07 |
---|---|
웹 개발 필수 도구 모음: 효율적인 개발을 위한 가이드 (0) | 2025.02.06 |
알고리즘 문제 해결을 위한 상세 가이드: 전략과 팁 (0) | 2025.02.06 |
코딩 면접에서 자주 나오는 질문과 상세 해설 (0) | 2025.02.05 |
Git과 GitHub 기초 사용법 완벽 가이드 (0) | 2025.02.05 |