Spring 기반의 웹 애플리케이션을 개발하다 보면,
요청 정보를 다루기 위해 HttpServletRequest
또는 WebRequest
를 사용하는 코드를 자주 마주치게 됩니다.
두 인터페이스는 어떤 차이가 있을까요?
이 글에서는 사용법이 아닌, "역할과 차이점, 선택 기준"을 중심으로 두 객체를 비교해보겠습니다.
HttpServletRequest
는 Java Servlet API에서 제공하는 인터페이스로,
클라이언트가 보낸 HTTP 요청 전체를 캡슐화합니다.
요청 URL, 쿼리 파라미터, 헤더, 쿠키, 세션 등 HTTP 요청과 관련된 모든 데이터에 접근할 수 있습니다.
전통적인 서블릿/ JSP 기반 웹 애플리케이션에서 기본적으로 사용됩니다.
String username = request.getParameter("username"); // 요청 파라미터 값을 반환
HttpSession session = request.getSession(); // 현재 세션 반환
String userAgent = request.getHeader("User-Agent"); // 특정 헤더의 값을 반환
WebRequest
는 Spring Framework에서 제공하는 추상화 인터페이스입니다.
HTTP 요청뿐만 아니라 다른 프로토콜까지 포괄할 수 있도록 설계되었으며,
Spring의 다양한 기능과 자연스럽게 통합됩니다.
HttpServletRequest
와 거의 같다고 생각하면 됩니다.(헤더, 파라미터, ...)
HttpServletRequest
에서 제공하지 않는 고유한 메서드 몇개 소개해 보겠습니다.
Map<String, String[]> paramMap = webRequest.getParameterMap(); // 모든 요청 파라미터를 포함하는 맵을 반환
// 요청 스코프에 속성을 설정하거나 제거합니다.
// 이 메서드는 `HttpServletRequest`의 `setAttribute()` 메서드와 유사하지만, `WebRequest`는 더 많은 스코프 (예: 세션, 글로벌 스코프)를 지원합니다.
webRequest.setAttribute("user", user, WebRequest.SCOPE_SESSION);
webRequest.removeAttribute("user", WebRequest.SCOPE_SESSION);
String description = webRequest.getDescription(true); // 요청의 내용을 설명하는 문자열 반환
항목 | HttpServletRequest | WebRequest |
---|---|---|
종속 프레임워크 | Java Servlet API | Spring Framework |
추상화 수준 | 낮음 (HTTP 전용) | 높음 (여러 요청 스코프 추상화) |
사용 시점 | 전통적인 서블릿, JSP | Spring MVC 기반 프로젝트 |
기능 통합성 | 낮음 – 직접 처리 중심 | 높음 – Spring 기능과 연계 용이 |
멀티 스코프 관리 | ❌ 단일 요청/세션에 국한 | ✅ 요청, 세션, 글로벌 스코프 분리 관리 가능 |
실무에서는 특정 상황에 따라 HttpServletRequest
와 WebRequest
중 하나를 선택해야 할 때가 있습니다.
HttpServletRequest
를 사용하여 HTTP 요청을 직접 처리하는 것이 적합합니다.WebRequest
를 사용하여 요청 데이터를 보다 쉽게 처리하고, Spring의 다양한 기능과 통합할 수 있습니다.아! 그래서 레거시 프로젝트에서는 HttpServletRequest
가 많고 최신 프로젝트(스프링과 통합된...)에서는 WebRequest
가 많이 보이는구나!