Spring MVC 핸들러 메소드 아규먼트와 리턴 타입

Spring Web MVC

백기선님의 강의인 Spring Web MVC 강의를 듣고 공부한 내용을 정리한 글

핸들러 메소드 아규먼트와 리턴 타입

사용자 리퀘스트 요청을 처리하는 핸들러 메소드 Argument들에 대해 살펴보자.

WebRequest, NativeWebRequest

요청 또는 응답 자체에 접근 가능한 API이다.

광범위하게 사용자 요청의 정보를 얻어낼 수 있다.

그러나 상당히 Low해서 잘 쓰이지는 않는다고 한다.

NativeWebRequest의 경우 HTTPServletRequest,Response로 변환할 수 있다고 한다.

HttpServletRequest(Response), ServletRequest(Response)

HttpServlet이나 Servlet을 그대로 받아서 사용할 수 있다.

역시나 실제로 잘 쓸일이 없다.

InputStream, OutputStream or Reader, Writer

요청 본문을 읽어오거나, 응답 본문을 쓸 때 사용할 수 있는 API

스프링이 아닌 자바에서 제공하기 때문에 Servlet에 대한 지식이 많이 필요하지 않는다.

역시나 실제로 사용하는 경우는 드물다.

PushBuilder

Spring 5, HTTP/2 리소스 푸쉬에 사용한다.

HTTP/1.1에서는 특정 URL로 사용자가 접근할 때 핸들러가 브라우저의 렌더링에 필요한 데이터를 클라이언트에게 넘겨준다.

이후 클라이언트는 특정 리소스(이미지같은)의 요청을 보낼 때 다시 한번 서버에게 요청을 보내야한다.

HTTP/2에서는 Stream으로 데이터를 주고 받기 때문에, 한번 연결을 맺고 브라우저를 렌더링에 필요한 데이터를 Stream 단위로 클라이언트에게 전송하기 때문에 연결을 맺는 Hop이 줄어들게 된다.

HttpMethod

GET,POST 등에 대한 정보를 얻어올 수 있다.

Locale, TimeZone, ZoneId

스프링 MVC가 LocaleResolver를 사용해서 분석한 요청의 Locale 정보를 얻어올 수 있다.

Annotation

사실상 가장 많이 쓰이는 핸들러 Argument

  • @PathVariable : URI 템플릿 변수 읽을 때 사용

  • @MatrixVariable : URI 경로 중에 키/값 쌍을 읽어 올 때 사용

  • @RequestParam : 서블릿 요청 매개변수 값을 선언한 메소드 아규먼트 타입으로 변환해준다.

  • @RequestHeader : 요청 헤더 값을 선언한 메소드 아규먼트 타입으로 변환해준다.

  • @RequestBody : Http 본문을 HttpMessageConverter를 사용하여 접근할 때 사용한다.

  • @ResponseBody : 리턴 값을 HttpMessageConverter를 사용해 응답 본문으로 사용한다.

  • HttpEntity, ResponseEntity : 응답 본문 뿐 아니라 헤더 정보까지, 전체 응답을 만들 때 사용한다. 조금 더 섬세하게 커스터마이징이 가능하다. REST API를 만들기 위해서 반드시 사용해야하는 클래스.

  • String : ViewResolver를 사용해 뷰를 찾을 때 사용할 뷰 이름

  • View : View를 직접 리턴할 수 있다.

  • Model : Model 정보만 넘긴다. 그럼 View는 어떻게 되는가? Spring MVC는 요청에서 View의 이름을 유추해서 ViewResolver에게 찾으라고 시킨다.

Reference

인프런 백기선님의 스프링 Web MVC



© 2022. by minkuk

Powered by minkuk