오늘은 알고리즘 문제를 풀고 Spring 입문 강의를 들어봤는데 많은 내용은 아니었지만 익숙치 않아서 어렵게 느껴졌다. 학습하고 개념을 잡고, 코드를 직접 쳐보고 구현하면서 spring과 친해져보자
스프링 부트는 정적 컨텐츠 기능을 지원한다. html 파일을 작성하거나 완성된 파일을 resources/static 폴더에 위치시키면 스프링 애플리케이션을 작동 시키고 바로 로딩할 수 있다.
M : Model
V : View
C : Controller
이렇듯 애플리케이션의 역할을 명확히 분리하여 유지보수를 쉽게하고 코드의 재사용성을 높이며 테스트를 더 용이하게 한다.
thymeleaf라는 템플릿 엔진을 사용해서 간단하게 웹페이지와 스프링이 소통하고 웹페이지를 조작한다.
@Controller
public class HelloController {
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam("name") String name, Model model) {
model.addAttribute("name", name);
return "hello-template";
}
}
브라우저에서 요청이 들어오면 내장 톰켓서버에서 컨트롤러로 요청을 보내주고 컨트롤러는 맵핑된 것을 찾아 뷰 리졸버(viewResolve)를 거쳐 웹 브라우저에 리턴하게 된다.
<html xmlns:th="http://www.thymeleaf.org">
<body>
<p th:text="'hello ' + ${name}">hello! empty</p>
</body>
</html>
웹페이지를 통해서가 아닌 바로 데이터를 주고 받을 수 있다.
@Controller
public class HelloController {
@GetMapping("hello-string")
@ResponseBody
public String helloString(@RequestParam("name") String name) {
return "hello " + name;
}
}
@Controller
public class HelloController {
@GetMapping("hello-api")
@ResponseBody
public Hello helloApi(@RequestParam("name") String name) {
Hello hello = new Hello();
hello.setName(name);
return hello;
}
static class Hello {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
@ResponseBody를 사용하고 객체를 반환하면 객체가 Json으로 변환된다.
ex) "name" : "spring"