REST API를 만들기 위해 Node.js를 선택하셨다면, Express는 사실상 필수입니다. 하지만 “단순하게 만들어보는 수준”에서 한 단계 더 나아가 실무형 RESTful 구조 + 미들웨어 설계까지 배우고 싶다면 이 글을 꼭 끝까지 읽어보세요.
안녕하세요, 이번 글에서는 Express.js를 활용한 RESTful API 서버 구축 과정을 실무 코드와 함께 풀어드리겠습니다. 또한 대부분의 튜토리얼에서 생략되기 쉬운 미들웨어 활용법과 커스터마이징까지 함께 정리하니, 실무 개발자에게도 유용할 것입니다.
📌 바로가기 목차
1. RESTful API란 무엇인가?
REST(Representational State Transfer)는 웹의 기본 원칙을 따르는 아키텍처 스타일입니다. RESTful API는 자원 중심의 URI를 기반으로, HTTP 메서드(GET, POST, PUT, DELETE 등)를 통해 서버와 클라이언트 간 통신을 규정합니다.
- GET: 데이터 조회 (ex:
/users
) - POST: 새로운 데이터 생성 (ex:
/users
) - PUT: 기존 데이터 전체 수정 (ex:
/users/1
) - PATCH: 부분 수정
- DELETE: 데이터 삭제 (ex:
/users/1
)
RESTful API를 설계할 때 가장 중요한 것은 “URI는 자원(Resource)을 명확히 표현하고, 동작은 HTTP 메서드로 구분한다”는 철학입니다.
2. Express 프로젝트 구조와 라우팅 설계
Express.js는 Node.js에서 REST API를 가장 쉽게 만들 수 있는 프레임워크입니다. 아래는 실무에서 많이 사용하는 구조 예시입니다:
📦 my-express-api
┣ 📁 routes
┃ ┗ 📄 user.routes.js
┣ 📁 controllers
┃ ┗ 📄 user.controller.js
┣ 📁 middlewares
┃ ┗ 📄 logger.js
┣ 📄 app.js
┣ 📄 package.json
이 구조는 유지보수와 확장성을 고려한 구성으로, 라우터-컨트롤러-미들웨어
가 명확히 분리되어 있어 팀 협업 시에도 매우 유용합니다.
“Express의 가장 큰 장점은 심플하지만 구조적으로 확장 가능하다는 점입니다.”
3. 미들웨어 적용 예제와 흐름
Express 미들웨어는 요청(Request)과 응답(Response) 사이에서 동작하는 함수로, 로깅, 인증, 데이터 전처리 등 다양한 역할을 할 수 있습니다.
📌 logger 미들웨어 예제 (middlewares/logger.js)
// middlewares/logger.js
function logger(req, res, next) {
console.log(`[${new Date().toISOString()}] ${req.method} ${req.url}`);
next(); // 다음 미들웨어 or 라우터로 전달
}
module.exports = logger;
📌 app.js에 미들웨어 등록
// app.js
const express = require('express');
const app = express();
const logger = require('./middlewares/logger');
const userRoutes = require('./routes/user.routes');
app.use(express.json()); // JSON 파싱
app.use(logger); // 커스텀 미들웨어 적용
app.use('/api/users', userRoutes);
app.listen(3000, () => {
console.log('🚀 서버 실행 중: http://localhost:3000');
});
📌 RESTful 라우터 구현 예시 (routes/user.routes.js)
const express = require('express');
const router = express.Router();
// 더미 데이터
const users = [{ id: 1, name: 'Jane' }, { id: 2, name: 'Tom' }];
router.get('/', (req, res) => {
res.json(users);
});
router.post('/', (req, res) => {
const newUser = req.body;
users.push({ id: users.length + 1, ...newUser });
res.status(201).json(newUser);
});
module.exports = router;
app.use()
또는 router.use()
에 연결되며, 순서가 중요합니다. 로깅, 인증, 에러 처리 등 다양한 계층에서 활용됩니다.4. 자주 묻는 질문 (FAQ)
꼭 필수는 아니지만, 실무에서는 거의 대부분 사용됩니다. 로깅, 보안, 에러 처리, 인증 등 주요 기능을 담당하는 핵심 구조이기 때문에, 체계적인 API를 만들기 위해선 반드시 익혀야 합니다.
가능은 하지만, 라우팅, 요청 파싱 등 기본 기능이 모두 수작업으로 처리되어야 하므로 유지보수나 확장성 측면에서 매우 비효율적입니다. Express는 사실상 필수 프레임워크로 봐도 무방합니다.
Express는 상단부터 순차적으로 미들웨어를 실행합니다. 인증 미들웨어보다 로깅이 먼저 실행돼야 한다면 app.use()
순서를 조정해야 합니다. 인증 → 요청 가공 → 라우터 → 에러 처리 순서를 지키는 것이 보통입니다.
Fastify, Koa, NestJS 등 다양한 대안이 있지만, Express는 문서화가 잘 되어 있고 커뮤니티가 크며, 러닝 커브가 낮아 초중급 개발자에게 특히 추천됩니다.
5. 요약 및 추천 포스팅
이번 글에서는 Express.js를 활용한 RESTful API 구축 방법과 미들웨어의 실전 적용을 학습했습니다. 단순한 라우팅을 넘어서 미들웨어의 흐름, 파일 구조 분리, 요청 처리 방식까지 이해했다면 실무 API 설계에도 바로 적용 가능할 것입니다.
- REST의 핵심은 리소스 중심 + HTTP 메서드 분리
- Express는 Node.js에서 가장 널리 쓰이는 서버 프레임워크
- 미들웨어는 기능 확장과 유지보수의 핵심
👉 다음 글에서는 Express에서 JWT 인증 적용 및 사용자 인증 흐름을 다뤄볼 예정입니다.
실전 로그인 API를 만들고 싶은 분은 꼭 구독하고 기다려주세요!
'SW프로래밍 개발 > Javascript' 카테고리의 다른 글
Express에서 JWT 인증 적용 및 사용자 인증 흐름 (0) | 2025.04.16 |
---|---|
Node.js란? 개념부터 프로젝트 적용까지 한 번에 이해하기 (2025년에도 선택되는 이유) (1) | 2025.04.15 |
React + TypeScript로 안전한 프론트엔드 개발하기 (1) | 2025.04.14 |
자바스크립트 기초 마스터 후 다음 단계는? ES6, React로 나아가기 (1) | 2025.04.12 |