Node.js REST API 기본 개념과 활용 예시

최근 웹 개발에서 클라이언트와 서버 간의 원활한 통신을 위해 REST API(Representational State Transfer Application Programming Interface)가 널리 사용되고 있습니다. 이 글에서는 Node.js와 Express를 활용하여 REST API를 구축하는 기본 개념부터 실용적인 예제까지 폭넓게 다루어 보겠습니다.

REST API의 기본 개념

REST API는 클라이언트와 서버 간의 데이터 교환을 위한 아키텍처 스타일로, HTTP 프로토콜을 기반으로 하고 있습니다. RESTful API의 가장 큰 장점은 클라이언트와 서버가 독립적으로 작동한다는 점입니다. 이러한 특성 덕분에 클라이언트는 더 이상 서버의 상태 정보를 알 필요가 없으며, 요청할 때 필요한 모든 정보를 포함하여 전송하게 됩니다.

REST의 원칙

RESTful 구성의 핵심 원칙은 다음과 같은 요소들로 요약할 수 있습니다:

  • 클라이언트-서버 구조: 클라이언트와 서버는 서로 독립적으로 작동합니다.
  • 무상태성(Stateless): 각 요청은 독립적으로 처리되며 서버는 클라이언트 상태를 저장하지 않습니다.
  • 캐시 가능성: 응답은 캐시할 수 있으며, 이를 통해 성능을 극대화할 수 있습니다.
  • 균일한 인터페이스: 모든 클라이언트와 서버 간의 통신 방식이 일정해야 합니다.

Node.js와 Express를 통한 API 개발

Node.js는 비동기 I/O를 지원하는 서버사이드 플랫폼으로, JavaScript를 활용하여 효율적인 웹 애플리케이션을 개발할 수 있는 장점을 제공합니다. Express는 Node.js 위에서 동작하는 미니멀한 웹 프레임워크로, RESTful API 개발에 적합한 도구입니다.

프로젝트 초기화

먼저 Node.js가 설치되어 있어야 하며, 아래 명령어로 새 프로젝트를 초기화 할 수 있습니다:

npm init -y

그 다음 Express를 설치합니다:

npm install express

기본 서버 구축

다음으로 기본적인 서버 파일을 만들고 아래와 같이 초기화를 진행합니다:

const express = require('express');
const app = express();
const PORT = 3000;
app.use(express.json()); // JSON 형태의 요청 본문을 파싱합니다.
app.get('/', (req, res) => {
  res.send('안녕하세요, REST API!');
});
app.listen(PORT, () => {
  console.log(서버가 http://localhost:${PORT}에서 실행 중입니다.);
});

위 코드는 루트 경로로 접근 시 “안녕하세요, REST API!”라는 메시지를 반환하는 간단한 서버를 설정합니다.

CRUD 기능 추가하기

이제 이 기본 서버에 CRUD(Create, Read, Update, Delete) 기능을 추가하여 사용자 관리 API를 만들어 보겠습니다.

const users = []; // 사용자 정보를 저장할 배열
// GET /users: 전체 사용자 목록 조회
app.get('/users', (req, res) => {
  res.json(users);
});
// POST /users: 새 사용자 추가
app.post('/users', (req, res) => {
  const user = req.body;
  users.push(user);
  res.status(201).send(user);
});
// PUT /users/:id: 특정 사용자 정보 업데이트
app.put('/users/:id', (req, res) => {
  const id = req.params.id;
  const updatedUser = req.body;
  users[id] = updatedUser;
  res.send(updatedUser);
});
// DELETE /users/:id: 특정 사용자 삭제
app.delete('/users/:id', (req, res) => {
  const id = req.params.id;
  users.splice(id, 1);
  res.status(204).send();
});

위 코드는 기본적인 사용자 관리 기능을 구현하여 클라이언트가 사용자 정보를 추가, 조회, 수정 및 삭제할 수 있게 합니다.

고급 기능과 보안

REST API는 단순한 CRUD 기능 이상으로, 보안과 유효성 검사를 고려해야 합니다. Express는 미들웨어를 통해 요청 처리 흐름을 간소화할 수 있습니다.

미들웨어 사용하기

요청 로깅과 같은 미들웨어를 추가하여 요청 정보를 콘솔에 출력할 수 있습니다:

const logger = (req, res, next) => {
  console.log(${req.method} ${req.url});
  next(); // 다음 미들웨어로 넘어갑니다.
};
app.use(logger);

유효성 검사 및 보안

사용자 입력의 유효성을 검사하기 위해 Express Validator와 같은 라이브러리를 활용할 수 있습니다. 예를 들어, 사용자가 등록할 때 이메일과 비밀번호의 유효성을 체크하는 코드는 다음과 같습니다:

const { body, validationResult } = require('express-validator');
app.post('/users', [
  body('email').isEmail(),
  body('password').isLength({ min: 5 })
], (req, res) => {
  const errors = validationResult(req);
  if (!errors.isEmpty()) {
    return res.status(400).json({ errors: errors.array() });
  }
  const user = req.body;
  users.push(user);
  res.status(201).send(user);
});

또한, Helmet과 같은 미들웨어를 사용하여 HTTP 헤더를 강화함으로써 보안을 강화할 수 있습니다:

const helmet = require('helmet');
app.use(helmet());

결론

Node.js와 Express를 활용한 REST API는 강력한 웹 애플리케이션을 개발할 수 있는 유용한 도구입니다. 클라이언트와 서버 간의 통신을 원활하게 하며, 다양한 기능과 보안 요소를 추가함으로써 더 나은 사용자 경험을 제공할 수 있습니다. 이 글에서 소개한 기본적인 개념과 예제를 바탕으로 여러분만의 REST API를 구축해 보시기를 바랍니다. 실습을 통해 깊이 있는 이해를 쌓고, 다양한 기능을 추가하여 개발 경험을 넓혀보세요.

자주 물으시는 질문

REST API란 무엇인가요?

REST API는 클라이언트와 서버 간의 데이터 통신을 위한 아키텍처 스타일로, 주로 HTTP 프로토콜을 사용하여 상호작용합니다. 이 구조는 요청과 응답 방식으로 정보를 주고받도록 설계되어 있습니다.

Node.js와 Express로 API를 어떻게 구축하나요?

Node.js와 Express를 사용하면 간단한 명령어로 프로젝트를 초기화하고 API 서버를 설정할 수 있습니다. 기본적인 라우팅 및 요청 처리를 통해 RESTful API를 손쉽게 구현할 수 있습니다.

API의 보안은 어떻게 강화할 수 있나요?

API의 보안을 위해 미들웨어를 활용하여 요청을 검증하고, HTTP 헤더를 강화하는 도구를 사용할 수 있습니다. 또한, 사용자 입력에 대한 유효성 검사를 통해 악의적인 공격으로부터 보호할 수 있습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다