다음의 모든 내용은 김영한님의 스프링 입문 강의에서 가져온 것임을 밝힙니다.
HTML 파일을 그대로 웹 브라우즈에 올리는 방식이다.
스프링부트는 정적 컨텐츠 기능을 기본적으로 제공한다. 공식 메뉴얼에 Static Content를 검색해보자!
/resource/static
하위에 html 파일을 작성하기만 하면, 해당 파일이 그대로 서버에 전달된다.
웹브라우저에 localhost:8080/파일명.html 을 치면 그대로 보여진다.
localhost:8080/파일명.html 검색시, 내장 톰캣 서버는 먼저 파일명 관련 Controller를 찾지만 존재하지 않는다.
이후 /resource/static 하위에서 파일명.html을 찾아서 웹 브라우저에 반환하는 원리이다(‾◡◝)
서버에서 HTML을 동적으로 바꿔서 웹 브라우저에 올리는 방식이다!
템플릿엔진을 M, V, C로 쪼개게 된다.
이번에는 MVC 방식의 hello-mvc 페이지를 새로 만들어보자.
...
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam("name") String name, Model model){
model.addAttribute("name", name);
return "hello-template";
}
...
타임리프 템플릿엔진을 사용하여 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
를 입력하면 다음과 같이 실행된다!
이때
name
이 required=true 이기 때문에 그냥 /hello-mvc만 해서는 화면이 나타나지 않는다!! name의 값을 '?' 뒤에 넘겨주어야 한다 ○( ^皿^)っ
그러면 템플릿엔진이 html을 변환해서 웹 브라우저에 반환한다!
ViewResolver가 Thymeleaf 템플릿 엔진을 처리하여, 변환된 HTML이 웹브라우저로 전달되게 된다.
정적 컨텐츠 방식을 제외하면, 동적 컨텐츠 방식으로 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 스타일로 변환되어 웹브라우저에 보내게 된다.