[Spring] 입문-2. 정적 컨텐츠 / MVC와 템플릿엔진 / API

Jina·2023년 5월 7일
0

Spring

목록 보기
2/9
post-thumbnail

다음의 모든 내용은 김영한님의 스프링 입문 강의에서 가져온 것임을 밝힙니다.

1. 정적 컨텐츠 방식

HTML 파일을 그대로 웹 브라우즈에 올리는 방식이다.

스프링부트는 정적 컨텐츠 기능을 기본적으로 제공한다. 공식 메뉴얼에 Static Content를 검색해보자!

/resource/static 하위에 html 파일을 작성하기만 하면, 해당 파일이 그대로 서버에 전달된다.

웹브라우저에 localhost:8080/파일명.html 을 치면 그대로 보여진다.

동작 원리


localhost:8080/파일명.html 검색시, 내장 톰캣 서버는 먼저 파일명 관련 Controller를 찾지만 존재하지 않는다.

이후 /resource/static 하위에서 파일명.html을 찾아서 웹 브라우저에 반환하는 원리이다(‾◡◝)


2. MVC 방식

서버에서 HTML을 동적으로 바꿔서 웹 브라우저에 올리는 방식이다!
템플릿엔진을 M, V, C로 쪼개게 된다.

  • Model : 화면에 필요한 것들을 담아서 넘김
  • View : 화면과 관련된 일만!
  • Controller : 비즈니스 로직, 서버 관련

이번에는 MVC 방식의 hello-mvc 페이지를 새로 만들어보자.

/controller/HelloController.java
...
   @GetMapping("hello-mvc")
    public String helloMvc(@RequestParam("name") String name, Model model){
        model.addAttribute("name", name);
        return "hello-template";
    }
    ...
/resources/hello-template.html

타임리프 템플릿엔진을 사용하여 View를 만든다.

<!DOCTYPE HTML>

<html xmlns:th="http://www.thymeleaf.org">
  
<body>
<p th:text="'hello ' + ${name}">hello! empty</p>
</body>
  
</html>

이제 웹브라우저에 localhost:8080/hello-mvc?name=spring를 입력하면 다음과 같이 실행된다!

이때 namerequired=true 이기 때문에 그냥 /hello-mvc만 해서는 화면이 나타나지 않는다!! name의 값을 '?' 뒤에 넘겨주어야 한다 ○( ^皿^)っ

그러면 템플릿엔진이 html을 변환해서 웹 브라우저에 반환한다!

동작 원리


ViewResolver가 Thymeleaf 템플릿 엔진을 처리하여, 변환된 HTML이 웹브라우저로 전달되게 된다.


3. API 방식

정적 컨텐츠 방식을 제외하면, 동적 컨텐츠 방식으로 MVC방식과 API 방식이 있다! 사실 이 2개가 중요하다.

API 방식에서는 대부분 객체를 전달하게 된다.

API방식을 사용하려면 @ResponseBody 를 꼭 넣어주어야한다!

@GetMapping("hello-api")
    @ResponseBody //API 방식
    
    public Hello helloApi(@RequestParam("name") String name){
        Hello hello = new Hello();
        hello.setName(name);

        return hello;
    }

    static class Hello{
        private String name;

        //getter
        public String getName(){
            return name;
        }

        //setter
        public void setName(String name){
            this.name = name;
        }
    }

이제 웹브라우저에 http://localhost:8080`/hello-mvc?name=spring`를 입력하면 다음과 같이 실행된다!

이번에도 name이 required=true 이기 때문에 그냥 /hello-mvc만 해서는 브라우저가 나타나지 않는다. name의 값을 '?' 뒤에 넘겨주어야 한다 ○( ^皿^)っ

그러면 웹 브라우저에서는 json 형식으로 나타난다! HTML보다 훨씬 간단한 방식이라.. 최근에는 API 방식이 기본이라는 점! ( *︾▽︾)

동작 원리


내장 서버에서 @ResponseBody가 있으니 html을 찾는 게 아니라, HttpMessageConverter에 의해 HTTP BODY에 문자가 그대로, 직접 반환됨!

문자가 아니라 객체가 전달되면, HttpMessageConverter에 의해 JsonConverter가 기본으로 동작해 객체가 json 스타일로 변환되어 웹브라우저에 보내게 된다.

0개의 댓글