Node.js REST API 구축하기: 실용 가이드와 모범 사례

작성일 :

Node.js REST API 구축하기: 실용 가이드와 모범 사례

Node.js는 서버-클라이언트 모델에서 비동기 이벤트 주도와 비차단 I/O 모델을 활용하여 고성능 네트워크 어플리케이션을 만드는데 아주 유용한 도구입니다. 이 글은 Node.js를 사용하여 REST API를 구축하는 과정과 모범 사례를 소개합니다. REST API는 Representational State Transfer Application Programming Interface의 약자로, 웹 기반의 데이터 교환 방식입니다. 이 글에서는 Node.js를 활용하여 데이터와 리소스를 효율적으로 처리하는 방법을 배워보겠습니다.

개발 환경 설정

먼저, 개발 환경을 설정해야 합니다. Node.js와 npm(Node Package Manager)이 필요합니다. Node.js와 npm을 설치하는 방법은 다음과 같습니다.

  1. Node.js 공식 웹사이트에서 설치 프로그램 다운로드 및 실행: 🔗 Node.js 홈페이지
  2. 설치가 완료되면 터미널을 열고 다음 명령어를 입력하여 설치가 제대로 되었는지 확인합니다.
bash
node -v
npm -v

프로젝트 초기화

이제 프로젝트를 초기화해보겠습니다. 프로젝트 폴더를 만들고 초기화 명령어를 입력합니다.

bash
mkdir my-rest-api
cd my-rest-api
npm init -y

이 명령어는 기본 설정으로 package.json 파일을 만듭니다. 이 파일은 프로젝트의 메타데이터 및 종속성을 관리합니다.

기본 패키지 설치

REST API를 구축하기 위해 몇 가지 필수 패키지를 설치해야 합니다. Express는 Node.js의 가장 인기 있는 웹 프레임워크 중 하나로, REST API 서버를 빠르게 만들 수 있도록 도와줍니다.

bash
npm install express
npm install body-parser
  • express: Node.js 웹 프레임워크
  • body-parser: 클라이언트에서 전송된 요청의 본문을 해석하는 미들웨어

기본 서버 설정 및 라우트 추가

Express를 사용하여 서버를 설정하고 간단한 라우트를 추가해보겠습니다. 프로젝트 루트 디렉토리에 index.js 파일을 만들고 다음 코드를 작성합니다.

javascript
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
const port = 3000;

app.use(bodyParser.json());

app.get('/', (req, res) => {
  res.send('안녕하세요, Node.js REST API입니다!');
});

app.listen(port, () => {
  console.log(`서버가 http://localhost:${port}/ 에서 실행 중입니다.`);
});

이제 터미널에서 다음 명령어를 입력하여 서버를 실행합니다.

bash
node index.js

웹 브라우저를 열고 http://localhost:3000 을 입력하면 안녕하세요, Node.js REST API입니다! 라는 메시지가 보여야 합니다.

CRUD 기능 추가

REST API의 핵심 기능은 CRUD(생성, 읽기, 업데이트, 삭제) 작업을 수행하는 것입니다. 예제 데이터를 관리하는 간단한 REST API를 만들어보겠습니다.

먼저, 사용자를 저장할 수 있는 users 배열을 추가합니다.

javascript
let users = [];

사용자 생성(Create)

사용자를 생성하는 POST 요청을 처리하는 라우트를 추가합니다.

javascript
app.post('/users', (req, res) => {
  const user = req.body;
  user.id = users.length + 1;
  users.push(user);
  res.status(201).send(user);
});

사용자 조회(Read)

모든 사용자를 조회하는 GET 요청 라우트를 추가합니다

javascript
app.get('/users', (req, res) => {
  res.send(users);
});

특정 사용자를 조회하는 GET 요청 라우트도 추가합니다.

javascript
app.get('/users/:id', (req, res) => {
  const userId = parseInt(req.params.id, 10);
  const user = users.find(u => u.id === userId);
  if (user) {
    res.send(user);
  } else {
    res.status(404).send({ message: '사용자를 찾을 수 없습니다.' });
  }
});

사용자 업데이트(Update)

특정 사용자를 업데이트하는 PUT 요청 라우트를 추가합니다.

javascript
app.put('/users/:id', (req, res) => {
  const userId = parseInt(req.params.id, 10);
  const userIndex = users.findIndex(u => u.id === userId);
  if (userIndex !== -1) {
    users[userIndex] = { ...users[userIndex], ...req.body };
    res.send(users[userIndex]);
  } else {
    res.status(404).send({ message: '사용자를 찾을 수 없습니다.' });
  }
});

사용자 삭제(Delete)

특정 사용자를 삭제하는 DELETE 요청 라우트를 추가합니다.

javascript
app.delete('/users/:id', (req, res) => {
  const userId = parseInt(req.params.id, 10);
  const userIndex = users.findIndex(u => u.id === userId);
  if (userIndex !== -1) {
    const deletedUser = users.splice(userIndex, 1);
    res.send(deletedUser);
  } else {
    res.status(404).send({ message: '사용자를 찾을 수 없습니다.' });
  }
});

모범 사례

Node.js로 REST API를 구축할 때 다음과 같은 모범 사례를 따르는 것이 좋습니다.

에러 처리

API 요청 중에 발생할 수 있는 다양한 에러를 명확하게 처리해야 합니다. 사용자에게 적절한 HTTP 상태 코드와 에러 메시지를 반환하여 문제를 진단할 수 있도록 도와줍니다.

javascript
app.use((err, req, res, next) => {
  console.error(err.stack);
  res.status(500).send({ message: '서버 에러가 발생했습니다.' });
});

입력 데이터 유효성 검사

사용자 입력 데이터를 검증하여 잘못된 데이터가 서버에 저장되지 않도록 해야 합니다. 이를 위해 Joi와 같은 데이터 유효성 검사 라이브러리를 사용할 수 있습니다.

bash
npm install joi
javascript
const Joi = require('joi');

const userSchema = Joi.object({
  name: Joi.string().min(3).required(),
  email: Joi.string().email().required()
});

app.post('/users', (req, res) => {
  const { error } = userSchema.validate(req.body);
  if (error) {
    return res.status(400).send({ message: error.details[0].message });
  }
  const user = req.body;
  user.id = users.length + 1;
  users.push(user);
  res.status(201).send(user);
});

로깅과 모니터링

서버의 상태와 API 요청을 모니터링하기 위해 로깅 기능을 설정하는 것이 좋습니다. morgan과 같은 라이브러리를 사용하여 HTTP 요청을 기록할 수 있습니다.

bash
npm install morgan
javascript
const morgan = require('morgan');
app.use(morgan('combined'));

결론

이 글에서는 Node.js와 Express를 사용하여 간단한 REST API를 구축하는 방법을 배웠습니다. 또한 데이터 유효성 검사, 에러 처리 및 로깅과 같은 모범 사례를 적용하여 안정적이고 신뢰할 수 있는 API를 만드는 방법도 살펴보았습니다. 이 가이드를 통해 더 나은 REST API를 구축하는 데 필요한 지식과 기술을 습득할 수 있기를 바랍니다.