백엔드 컨트롤러를 작성할때, 인수인계 받은 백엔드 코드를 보다보면 사용자의 요청정보에 접근할 수 있도록
HttpServletRequest
또는 WebRequest
를 사용하는 케이스를 많이 볼 수 있습니다.
차이점은 무엇일까?
이 포스트를 통해 정리해보려 합니다.
HttpServletRequest
는 Java Servlet API
에서 제공하는 인터페이스입니다.
클라이언트가 웹 서버에 보내는 요청을 나타내며 요청에 대한 모든 정보를 캡슐화합니다.
이를 통해 개발자는 요청 URL, 파라미터, 헤더, 세션 정보 등을 쉽게 접근할 수 있습니다.
헤더, 매개변수, 세션 데이터, 쿠키와 같은 요청 데이터에 액세스하기 위해 기존 Java 웹 애플리케이션(예: 서블릿 및 JSP로 구축된 애플리케이션)에서 주로 사용됩니다.
String username = request.getParameter("username"); // 요청 파라미터 값을 반환
HttpSession session = request.getSession(); // 현재 세션 반환
String userAgent = request.getHeader("User-Agent"); // 특정 헤더의 값을 반환
WebRequest
는 Spring Framework에서 제공하는 추상화된 인터페이스로, 여러 유형의 웹 요청을 처리할 수 있습니다. (HTTP뿐만아니라 다른 프로토콜의 요청도 처리할 수 있습니다.)
HttpServletRequest
보다 높은 수준의 추상화를 제공하며, 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
는 비슷한 역할을 하지만, 몇 가지 중요한 차이점이 있습니다.
HttpServletRequest
는 HTTP에 종속적인 반면, WebRequest
는 다양한 프로토콜을 추상화할 수 있습니다.HttpServletRequest
는 서블릿 기반 애플리케이션에서, WebRequest
는 Spring 기반 애플리케이션에서 주로 사용됩니다.HttpServletRequest
는 Java Servlet API에 의존하지만, WebRequest
는 Spring Framework에 의존합니다.실무에서는 특정 상황에 따라 HttpServletRequest
와 WebRequest
중 하나를 선택해야 할 때가 있습니다.
HttpServletRequest
를 사용하여 HTTP 요청을 직접 처리하는 것이 적합합니다.WebRequest
를 사용하여 요청 데이터를 보다 쉽게 처리하고, Spring의 다양한 기능과 통합할 수 있습니다.아! 그래서 레거시 프로젝트에서는 HttpServletRequest
가 많고 최신 프로젝트(스프링과 통합된...)에서는 WebRequest
가 많이 보이는구나!