Express에서 body-parser로 클라이언트 요청 바디 처리하기
웹 애플리케이션을 개발할 때, 클라이언트가 보내는 요청 본문(Request Body)을 다루는 건 필수적인 작업입니다. 예를 들어 로그인 폼에서 전송된 아이디·비밀번호, JSON 형태의 API 호출 페이로드 등은 모두 “요청 본문”에 담겨 오죠. Express에서는 이 본문을 자동으로 해석해 줄 미들웨어로 보통 body-parser를 사용하거나, 4.16 버전 이후부터 내장된 express.json()·express.urlencoded()를 이용합니다.
1. body-parser 설치·설정
npm install body-parser
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
// JSON 형태의 본문 해석
app.use(bodyParser.json());
// URL-encoded 형태(HTML form)의 본문 해석
app.use(bodyParser.urlencoded({ extended: true }));
// 예시 라우터
app.post('/login', (req, res) => {
// req.body에 해석된 객체가 담겨 있다
const { username, password } = req.body;
// ...로그인 로직
res.json({ success: true });
});
app.listen(5000, () => console.log('Server running on 5000'));
- bodyParser.json()
클라이언트가 Content-Type: application/json 으로 보낸 JSON 문자열을 자바스크립트 객체로 변환해 줍니다. - bodyParser.urlencoded({ extended: true })
Content-Type: application/x-www-form-urlencoded 로 전송된 폼 데이터를 해석합니다.- extended: true → 중첩된 객체 구문도 해석
- extended: false → 쿼리스트링 모듈로 단순 해석
2. Express 내장 기능 사용하기
Express 4.16+ 버전부터는 body-parser를 별도 설치하지 않고, 내장 미들웨어로 같은 기능을 제공합니다.
const express = require('express');
const app = express();
// 설치 불필요
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
3. 주요 옵션과 주의사항
- 용량 제한(limit)
대용량 파일 전송이 필요하다면 기본 제한(100kb)을 늘려야 합니다.
app.use(express.json({ limit: '1mb' }));
- 파일 업로드
body-parser는 텍스트 기반 전송만 해석합니다. 이미지나 대용량 파일은 multer 같은 전용 미들웨어를 사용하세요. - 순서
다른 미들웨어(예: 쿠키 파서, CORS 등)보다 먼저 등록해야, 모든 라우터에서 req.body를 바로 쓸 수 있습니다.
4. 플로우 요약
- 클라이언트가 POST, PUT 같은 메서드로 본문 데이터를 전송
- express.json() 또는 body-parser.json()이 헤더의 Content-Type을 보고 JSON으로 파싱
- 파싱된 결과가 req.body에 객체 형태로 저장
- 라우터 내부에서 req.body를 꺼내어 로직 처리
결론
body-parser(또는 express.json·express.urlencoded)는 “클라이언트가 보내는 데이터”를 쉽게 해석해 주는 핵심 미들웨어입니다. 올바른 순서에 등록하고, 필요한 옵션(limit, extended 등)을 조정하면 로그인, 회원가입, API 페이로드 처리 등 거의 모든 입력 처리 과정을 깔끔하게 관리할 수 있습니다. 파일 업로드나 스트림 처리처럼 특수한 경우만 별도 미들웨어를 추가로 사용하세요.