[스프링입문] 웹 개발 기초(정적 컨텐츠, MVC, 템플릿 엔진, API)
- 정적 컨텐츠
- 서버에서 별 다른 변환 없이 파일을 웹 브라우저에 그대로 내려주는 것
=>무조건 그대로 반환, 프로그래밍을 할 수 없음
-hello-static.html가 有
<!DOCTYPE HTML>
<html>
<head>
<title>static content</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
정적 컨텐츠 입니다.
</body>
</html>
=>웹에서 입력을 받으면 톰켓 내장 서버를 거친 후 스프링 컨트롤러에서 먼저 hello-static이 있는지 찾아봄 (컨트롤러가 우선!)
=>없다? 스프링 부트 내부에서 hello-static을 찾음
=>스프링 부트 내부에서 찾았으면 별도의 변환 없이 그냥 반환!
- mvc와 템플릿 엔진
-MVC = model, view, controller
서버에서 변형시켜서 웹에 내려주는 방식 (<->정적 컨텐츠)
-view는 화면을 그리는 역할
-model과 controller는 내부적인 걸 처리하는 역할
-Controller
@Controller
public class HelloController {
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam("name") String name, Model model) {
model.addAttribute("name", name);
return "hello-template";
}
}
-Controller에서 name을 seonho로 입력 받으면, name = seonho로 바뀌어 모델에 담김
-viewResolver가 hello-template.html에 매핑 되어 화면을 찾아 처리
(스프링 부트 템플릿 엔진 기본 viewname 매핑 => 컨트롤러에서 리턴을 문자로 하면 {문자}.html과 매핑)
-hello-template.html
<html xmlns:th="http://www.thymeleaf.org">
<body>
<p th:text="'hello ' + ${name}">hello! empty</p>
</body>
</html>
-model에서 값을 꺼내는 문자 $를 사용
-순서 :
1. hello-mvc가 웹에서 입력
2. 내장 톰켓 서버를 먼저 거쳐서 스프링 컨트롤러에 들어옴
3. hello-controller와 매핑되어 있으므로 viewResolver가 동작
(화면과 관련되어 있다면 대부분 viewResolver가 해결! view를 찾아서 template engine과 연결함)
-viewReslover에서 template engine에 처리를 요청하면 랜더링하여 변환 후 반환
(<->정적 컨텐츠는 변환하지 않고 그냥 반환)
-controller -> model -> view 순!
- API
@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;
}
}
}
+)@RespnseBody에 대하여
=>http의 body부에 반환값을 직접 넣어주겠다는 의미!
=>template engine은 view를 가지고 html을 조작
=>API는 그냥 반환된 데이터 그대로를 바로 넣음
-문자가 아닌 데이터, 객체를 반환할 때 API 사용이 빛을 발함
=>객체가 반환되면 JSON 형태의 데이터로 변환 되어 http에 전달
+)JSON?
{key : value}로 이루어진 구조, 최근엔 디폴트로 json을 사용하는 추세
if) @ResponseBody 가 x?
=>viewResolver로...
else) o?
=>HttpMessageConverter로...
=>객체가 반환된다면 JSON 형식으로 데이터를 만들어 http에 반환
+)getter/setter처럼 private 멤버변수에 접근하기 위해서 만들어진 함수를 "자바빈 규약"이라고 함.~~
-인프런 김영한님의 스프링 입문을 듣고 작성한 글입니다