✅ 정적 컨텐츠
✅ MVC와 템플릿 엔진
- HTML을 동적으로 바꾸는 것을 템플릿 엔진이라 한다.
- JSP나 PHP 등이 템플릿 엔진에 해당된다.
- Model View Controller (MVC)
정적 컨텐츠 VS MVC와 템플릿 엔진- 정적 컨텐츠는 파일을 그대로 웹 브라우저에게 전달해주는 것
- MVC와 templete 엔진은 서버에서 변형을 해서 HTML을 바꾸어서 웹 브라우저에게 전달해주는 것
✅ API
- JSON 데이터 포맷으로 client한테 데이터를 전달해주는 방식이다.
- ResourceHttpRequestHandler를 사용하여 고유한 WebMvcConfigurer를 추가
- addResourceHandlers 메서드를 재정의하여 해당 동작을 수정
/*HelloController*/
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam("name") String name, Model model){
model.addAttribute("name", name);
return "hello-templete";
}
<!--hello-templete-->
<body>
<p th:text="'hello ' + ${name}">hello! empty</p>
<!--${ } 표시는 모델에서 값을 가져온다는 의미-->
</body>
/* helloController */
@GetMapping("hello-string")
@ResponseBody // http 통신 프로토콜의 body 부분 (html의 <body> X)
// 해당 body 부분에 직접 데이터를 넣어주겠다는 의미
public String helloString(@RequestParam("name") String name){
return "hello " + name; // "hello spring" 문자열이 요청한 클라이언트에 그대로 넘어감
// mvc가 viewResolver를 거쳐서 가는 것과는 다르게 동작함 (view X)
}
페이지 소스 보기로 확인했을 때, html 코드 없이 문자열이 그대로 반환된것을 확인할 수 있다.
@GetMapping("hello-api")
@ResponseBody
public Hello helloApi(@RequestParam("name") String name) {
Hello hello = new Hello();
hello.setName(name);
return hello;
}
public class Hello{
private String name;
// ctrl + N 눌러서 getter/setter 생성
// getter/setter은 Java Bean 규약
// name 필드는 private이기 때문에 외부에서 직접적으로 접근이 어렵다
// getter/setter을 통해서 접근을 할 수 있다
// property 접근 방식이라고 하기도 한다
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
JSON 방식으로 데이터가 오게 된다.
🔸 JAVA의 Annotation
코드 사이에 주석처럼 쓰여서 특별한 의미, 기능을 수행하도록 하는 기술
🔸 ResponseBody가 없다면
Spring은 templete 방식처럼 viewResolver에 해당 데이터를 던진다.