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. 플로우 요약

  1. 클라이언트가 POST, PUT 같은 메서드로 본문 데이터를 전송
  2. express.json() 또는 body-parser.json()이 헤더의 Content-Type을 보고 JSON으로 파싱
  3. 파싱된 결과가 req.body에 객체 형태로 저장
  4. 라우터 내부에서 req.body를 꺼내어 로직 처리

결론

body-parser(또는 express.json·express.urlencoded)는 “클라이언트가 보내는 데이터”를 쉽게 해석해 주는 핵심 미들웨어입니다. 올바른 순서에 등록하고, 필요한 옵션(limit, extended 등)을 조정하면 로그인, 회원가입, API 페이로드 처리 등 거의 모든 입력 처리 과정을 깔끔하게 관리할 수 있습니다. 파일 업로드나 스트림 처리처럼 특수한 경우만 별도 미들웨어를 추가로 사용하세요.

'Learning > node.js' 카테고리의 다른 글

[node]셋업  (0) 2025.05.13

+ Recent posts