개인의 기록
  • 소개
  • 프로젝트
  • 글
  • 링크

© 2026 newgirok

← 글 목록

Express Request 객체 — 클라이언트 요청 데이터 접근

2025년 1월 21일
ExpressRequestreq.paramsreq.bodyreq.headers

클라이언트가 서버로 보내는 모든 정보는 Request 객체(req) 하나에 담긴다. URL 파라미터, 쿼리 스트링, 요청 본문, 헤더까지 — 어디서 꺼내야 하는지 알면 라우트 로직이 단순해진다. Express는 Node.js의 http.IncomingMessage를 확장해 이 데이터들을 편리한 속성으로 노출한다.

Client Request
     │
     ▼
┌─────────────────────────────┐
│  req.method   req.url       │
│  req.headers  req.ip        │
│  req.params   req.query     │
│  req.body     req.cookies   │
└─────────────────────────────┘
     │
     ▼
  Router → Middleware → Controller

URL에서 데이터 읽기

req.params 는 라우트 경로에 선언한 :변수를 담는다. req.query 는 ?key=value 형태의 쿼리 스트링을 파싱한 객체다.

// GET /users/42?verbose=true
app.get('/users/:id', (req, res) => {
  const id = req.params.id;       // "42"
  const verbose = req.query.verbose; // "true"
  res.json({ id, verbose });
});

req.params — 경로 세그먼트에서 추출된 동적 값. 항상 문자열 타입.

쿼리 파라미터가 여러 개일 때는 배열로도 전달될 수 있으므로, 타입 검증을 거치는 것이 안전하다.

요청 본문 읽기

req.body 는 POST/PUT 요청의 본문 데이터를 담는다. 단, 기본 Express에는 본문 파서가 없어 Middleware를 먼저 등록해야 한다.

import express from 'express';

const app = express();
app.use(express.json());                        // JSON 본문 파싱
app.use(express.urlencoded({ extended: true })); // 폼 데이터 파싱

app.post('/users', (req, res) => {
  const { name, email } = req.body;
  res.status(201).json({ name, email });
});

express.json — Content-Type: application/json 헤더가 있는 요청의 본문을 파싱하는 내장 Middleware.

헤더와 메타데이터

속성설명예시
req.headers모든 요청 헤더 객체{ authorization: 'Bearer ...' }
req.methodHTTP 메서드"GET", "POST"
req.url경로 + 쿼리 스트링"/users?page=1"
req.originalUrl마운트 경로 포함 전체 URL"/api/v1/users?page=1"
req.ip클라이언트 IP 주소"192.168.1.1"

특정 헤더는 req.get 헬퍼로 대소문자 구분 없이 읽을 수 있다.

app.use((req, res, next) => {
  const token = req.get('Authorization'); // 'authorization'도 동일
  const contentType = req.get('Content-Type');
  next();
});

쿠키 읽기

req.cookies 를 사용하려면 cookie-parser Middleware가 필요하다.

import cookieParser from 'cookie-parser';

app.use(cookieParser());

app.get('/profile', (req, res) => {
  const sessionId = req.cookies.sessionId;
  res.json({ sessionId });
});

cookie-parser — 요청 헤더의 Cookie 문자열을 파싱해 req.cookies 객체로 만들어주는 서드파티 Middleware.

req.params vs req.query vs req.body

/products/:category?sort=price    body: { name: "widget" }
           │              │                     │
      req.params      req.query             req.body
   (경로 식별자)    (필터/옵션)          (생성/수정 데이터)

리소스를 식별할 때는 req.params, 결과를 필터링·정렬할 때는 req.query, 데이터를 생성·수정할 때는 req.body에 담는 것이 REST 관례다.

← 이전 글Express Routing — HTTP 메서드와 경로를 연결하는 방법
다음 글 →Express Response 객체 — 서버 응답을 보내는 방법