HttpServletRequest 와 WebRequest 의 차이점

Daniel·2024년 8월 12일
0

Back-End

목록 보기
40/42

들어가며

백엔드 컨트롤러를 작성할때, 인수인계 받은 백엔드 코드를 보다보면 사용자의 요청정보에 접근할 수 있도록
HttpServletRequest 또는 WebRequest 를 사용하는 케이스를 많이 볼 수 있습니다.

차이점은 무엇일까?

이 포스트를 통해 정리해보려 합니다.

HttpServletRequest 란?

정의 및 역할

HttpServletRequestJava Servlet API 에서 제공하는 인터페이스입니다.
클라이언트가 웹 서버에 보내는 요청을 나타내며 요청에 대한 모든 정보를 캡슐화합니다.
이를 통해 개발자는 요청 URL, 파라미터, 헤더, 세션 정보 등을 쉽게 접근할 수 있습니다.

헤더, 매개변수, 세션 데이터, 쿠키와 같은 요청 데이터에 액세스하기 위해 기존 Java 웹 애플리케이션(예: 서블릿 및 JSP로 구축된 애플리케이션)에서 주로 사용됩니다.

사용 예

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

주요 메서드

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

WebRequest 란?

정의 및 역할

WebRequest는 Spring Framework에서 제공하는 추상화된 인터페이스로, 여러 유형의 웹 요청을 처리할 수 있습니다. (HTTP뿐만아니라 다른 프로토콜의 요청도 처리할 수 있습니다.)
HttpServletRequest 보다 높은 수준의 추상화를 제공하며, Spring의 다양한 기능과 쉽게 통합할 수 있습니다.

사용 예

  • Controller 에서 요청 데이터 처리
  • 바인딩 및 유효성 검사 등

주요 메서드

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); // 요청의 내용을 설명하는 문자열 반환

차이점

HttpServletRequestWebRequest는 비슷한 역할을 하지만, 몇 가지 중요한 차이점이 있습니다.

  • 레벨의 차이: HttpServletRequest는 HTTP에 종속적인 반면, WebRequest는 다양한 프로토콜을 추상화할 수 있습니다.
  • 사용 맥락: HttpServletRequest는 서블릿 기반 애플리케이션에서, WebRequest는 Spring 기반 애플리케이션에서 주로 사용됩니다.
  • 프레임워크 의존성: HttpServletRequest는 Java Servlet API에 의존하지만, WebRequest는 Spring Framework에 의존합니다.
  • 예제 코드 비교: 동일한 기능을 구현할 때, 두 인터페이스를 사용하는 코드의 차이를 통해 각 인터페이스의 특성을 비교합니다.

어떤 경우에 어떤 것을 선택해야 할까?

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

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

Note

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

profile
응애 나 애기 개발자

0개의 댓글