Express.js — 라우팅과 CRUD
이 토픽을 마치면
Express.js로 웹 서버를 띄우고, URL 경로별로 다른 응답을 보내는 라우팅을 설정할 수 있습니다. REST API의 4가지 기본 동작(CRUD)을 구현할 수 있습니다.
Express.js가 필요한 이유
Node.js의 내장 http 모듈로도 서버를 만들 수 있습니다. 하지만 URL 분기, 파라미터 파싱, 에러 처리를 전부 직접 구현해야 합니다. Express.js는 이 반복 작업을 대신 처리해주는 웹 프레임워크입니다.
# 설치npm init -ynpm install express// app.js — 가장 작은 Express 서버
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('안녕하세요!');
});
app.listen(3000, () => {
console.log('서버 실행: http://localhost:3000');
});node app.js를 실행하면 브라우저에서 localhost:3000에 접속할 수 있습니다. 이 6줄이 Express의 전부입니다 — 나머지는 이 패턴의 반복과 확장입니다.
라우팅 — URL과 함수를 연결
라우팅은 **"이 URL로 요청이 오면, 이 함수를 실행해라"**는 규칙입니다.
// GET — 데이터 조회
app.get('/users', (req, res) => {
res.json([{ id: 1, name: '김훈' }, { id: 2, name: '이수' }]);
});
// GET — URL 파라미터로 특정 항목 조회
app.get('/users/:id', (req, res) => {
const userId = req.params.id;
res.json({ id: userId, name: '김훈' });
});
// POST — 데이터 생성
app.use(express.json()); // JSON 요청 본문 파싱 필수
app.post('/users', (req, res) => {
const newUser = req.body;
res.status(201).json({ message: '생성 완료', user: newUser });
});:id는 동적 파라미터입니다. /users/1, /users/42 모두 이 라우트에 매칭되고, req.params.id로 값을 꺼낼 수 있습니다.
CRUD — 4가지 기본 동작
웹 애플리케이션의 데이터 처리는 거의 대부분 이 4가지로 귀결됩니다.
| 동작 | HTTP 메서드 | URL 예시 | 설명 |
|---|---|---|---|
| Create | POST | /users | 새 사용자 생성 |
| Read | GET | /users 또는 /users/:id | 목록 또는 개별 조회 |
| Update | PUT | /users/:id | 특정 사용자 정보 수정 |
| Delete | DELETE | /users/:id | 특정 사용자 삭제 |
// Update — 데이터 수정
app.put('/users/:id', (req, res) => {
const { id } = req.params;
const updatedData = req.body;
res.json({ message: `${id}번 사용자 수정 완료`, data: updatedData });
});
// Delete — 데이터 삭제
app.delete('/users/:id', (req, res) => {
const { id } = req.params;
res.json({ message: `${id}번 사용자 삭제 완료` });
});이 패턴을 REST API라고 부릅니다. URL은 "무엇을(명사)", HTTP 메서드는 "어떻게(동사)"를 나타냅니다. /users라는 하나의 URL에 GET/POST/PUT/DELETE 4가지 동작이 매핑되는 구조입니다.
라우터 분리 — 파일이 커질 때
라우트가 많아지면 app.js 하나에 다 넣을 수 없습니다. Express의 Router를 써서 파일별로 분리합니다.
// routes/users.js
const router = require('express').Router();
router.get('/', (req, res) => { res.json([]); });
router.post('/', (req, res) => { res.status(201).json({}); });
router.put('/:id', (req, res) => { res.json({}); });
router.delete('/:id', (req, res) => { res.json({}); });
module.exports = router;// app.js — 라우터를 마운트
const usersRouter = require('./routes/users');
app.use('/users', usersRouter);
// /users + router 내부의 '/' = GET /users
// /users + router 내부의 '/:id' = PUT /users/42app.use('/users', usersRouter)가 핵심입니다. /users로 시작하는 모든 요청을 routes/users.js가 처리합니다. 이전 토픽(코드 모듈화)의 실전 적용입니다.
핵심 정리
Express는 "URL → 함수" 연결이 전부입니다. 이 단순한 구조 위에 미들웨어, 인증, 데이터베이스 연동이 쌓이는 것이지, 근본은 바뀌지 않습니다. CRUD 4가지 패턴을 손에 익히면 대부분의 백엔드 API를 만들 수 있습니다.
→ 바이오에 적용: DevBench — Express 기초