본문 바로가기
Framework & Library/Spring Boot

[Spring Boot] : 정적 리소스 및 뷰 템플릿

by 오주현 2022. 1. 26.
반응형

스프링 서버에서 응답 데이터를 받는 방법은 크게 3가지 정도로 나누어진다.

  1. 정적 리소스
    1. HTML, CSS, JS
  2. 뷰 템플릿 사용
    1. 웹 브라우저에 동적인 HTML을 제공할 때 뷰 템플릿을 사용한다.
  3. HTTP 메시지 사용
    1. HTTP API를 제공하는 경우에 HTML이 아니라 데이터를 전달해야 한다. 떄문에 HTTP 메시지 바디에 JSON 같은 형식으로 데이터를 실어 보낸다.

Spring Boot는 /static, /public, /resources, /META-INF/resources 디렉토리에 있는 정적 리소스를 제공한다. src/main/resources는 리소스를 보관하는 곳이면서 클래스 패스의 시작 경로이다. 이 디렉토리에 리소스를 넣어두면 스프링 부트가 정적 리소스로 서비스를 제공하게 된다.

/src/main/resources/templates/response 경로에 hello.html파일을 넣어두고 이 뷰 템플릿을 호출하는 컨트롤러를 만들어 준다.

강의에서 항상 제일 정리가 안 된 코드를 보여주고 천천히 정리를 해 나간다.

  • ModelAndView 공식 문서 참고(구글번역)
    • 핸들러에 의해 반환된 모델 및 뷰를 나타낸다.
    • ViewResolver 개체에 의해 해결되어야 하는 문자열 보기 이름의 형식을 취할 수 있다.
    • View 개체를 직접 지정할 수 있다.
    • 모델은 이름으로 키가 지정된 여러 개체를 사용할 수 있는 맵이다.
 @RequestMapping("/response-view-v1")
    public ModelAndView responseViewV1() {
        ModelAndView mav = new ModelAndView("response/hello")
                .addObject("data", "hello!");

        return mav;
    }
@RequestMapping("/response-view-v2")
    public String responseViewV2(Model model) {
        model.addAttribute("data", "hello!");
        return "response/hello";
    }
@RequestMapping("/response/hello")
    public void responseViewV3(Model model) {
        model.addAttribute("data", "hello!");
    }

Void를 반환하면 @Controller를 사용하고 HttpServletResponse, OutputStream(Writer)같은 HTTP 메시지 바디를 처리하는 파라미터가 없으면 요청 URL을 참고해서 논리 뷰 이름으로 사용하는데 명시성이 너무 떨어지고 이렇게 딱 맞는 경우도 없기 때문에 강의에서 강사님은 별로 추천하지 않는 방식이고 강사님은 v2 정도의 코드를 추천한다고 한다.

 

@ResponseBody가 없으면 response/hello 로 뷰 리졸버가 실행되서 뷰를 찾고 렌더링 하는데 저게 있으면 뷰 리졸버를 실행하지 않고 HTTP 메시지 바디에 직접 return이 출력이 된다.


스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술을 참고하여 공부하였습니다.

반응형

댓글