BioPlayground

🧬
목록으로

Express.js — 라우팅과 CRUD

Express.js로 웹 서버를 만들고, GET/POST/PUT/DELETE 라우트를 구성하는 방법을 배웁니다.

중급
|
10
|
검증 완료 (2026-07)
Express.js라우트CRUDREST웹 서버
진행률0/18 (0%)

Express.js — 라우팅과 CRUD

이 토픽을 마치면

Express.js로 웹 서버를 띄우고, URL 경로별로 다른 응답을 보내는 라우팅을 설정할 수 있습니다. REST API의 4가지 기본 동작(CRUD)을 구현할 수 있습니다.


Express.js가 필요한 이유

Node.js의 내장 http 모듈로도 서버를 만들 수 있습니다. 하지만 URL 분기, 파라미터 파싱, 에러 처리를 전부 직접 구현해야 합니다. Express.js는 이 반복 작업을 대신 처리해주는 웹 프레임워크입니다.

bash
# 설치
npm init -y
npm install express
javascript
// 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로 요청이 오면, 이 함수를 실행해라"**는 규칙입니다.

javascript
// 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 예시설명
CreatePOST/users새 사용자 생성
ReadGET/users 또는 /users/:id목록 또는 개별 조회
UpdatePUT/users/:id특정 사용자 정보 수정
DeleteDELETE/users/:id특정 사용자 삭제
javascript
// 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를 써서 파일별로 분리합니다.

javascript
// 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;
javascript
// app.js — 라우터를 마운트
const usersRouter = require('./routes/users');
app.use('/users', usersRouter);
// /users + router 내부의 '/' = GET /users
// /users + router 내부의 '/:id' = PUT /users/42

app.use('/users', usersRouter)가 핵심입니다. /users로 시작하는 모든 요청을 routes/users.js가 처리합니다. 이전 토픽(코드 모듈화)의 실전 적용입니다.


핵심 정리

Express는 "URL → 함수" 연결이 전부입니다. 이 단순한 구조 위에 미들웨어, 인증, 데이터베이스 연동이 쌓이는 것이지, 근본은 바뀌지 않습니다. CRUD 4가지 패턴을 손에 익히면 대부분의 백엔드 API를 만들 수 있습니다.


→ 바이오에 적용: DevBench — Express 기초