HttpServletRequest vs WebRequest: 무엇을 언제 써야 할까?

Daniel·2025년 5월 24일
0

Back-End

목록 보기
54/54

들어가며

Spring 기반의 웹 애플리케이션을 개발하다 보면,
요청 정보를 다루기 위해 HttpServletRequest 또는 WebRequest를 사용하는 코드를 자주 마주치게 됩니다.

두 인터페이스는 어떤 차이가 있을까요?
이 글에서는 사용법이 아닌, "역할과 차이점, 선택 기준"을 중심으로 두 객체를 비교해보겠습니다.

HttpServletRequest 란?

정의

HttpServletRequestJava Servlet API에서 제공하는 인터페이스로,
클라이언트가 보낸 HTTP 요청 전체를 캡슐화합니다.

요청 URL, 쿼리 파라미터, 헤더, 쿠키, 세션 등 HTTP 요청과 관련된 모든 데이터에 접근할 수 있습니다.
전통적인 서블릿/ JSP 기반 웹 애플리케이션에서 기본적으로 사용됩니다.

주요 사용 예

  • 로그인 폼 데이터 처리
  • 세션 정보 조회
  • 쿠키 관리 등

코드 예시

String username = request.getParameter("username"); // 요청 파라미터 값을 반환
HttpSession session = request.getSession(); // 현재 세션 반환
String userAgent = request.getHeader("User-Agent"); // 특정 헤더의 값을 반환

WebRequest 란?

정의

WebRequestSpring 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 vs WebRequest: 어떤 차이가 있을까?

항목HttpServletRequestWebRequest
종속 프레임워크Java Servlet APISpring Framework
추상화 수준낮음 (HTTP 전용)높음 (여러 요청 스코프 추상화)
사용 시점전통적인 서블릿, JSPSpring MVC 기반 프로젝트
기능 통합성낮음 – 직접 처리 중심높음 – Spring 기능과 연계 용이
멀티 스코프 관리❌ 단일 요청/세션에 국한✅ 요청, 세션, 글로벌 스코프 분리 관리 가능

언제 무엇을 써야 할까?

실무에서는 특정 상황에 따라 HttpServletRequestWebRequest 중 하나를 선택해야 할 때가 있습니다.

  • Servlet 기반 프로젝트: HttpServletRequest를 사용하여 HTTP 요청을 직접 처리하는 것이 적합합니다.
  • Spring MVC 프로젝트: WebRequest를 사용하여 요청 데이터를 보다 쉽게 처리하고, Spring의 다양한 기능과 통합할 수 있습니다.

Note

아! 그래서 레거시 프로젝트에서는 HttpServletRequest 가 많고 최신 프로젝트(스프링과 통합된...)에서는 WebRequest 가 많이 보이는구나!

profile
응애 나 애기 개발자

0개의 댓글