스프링 웹 개발 기초 - 정적 컨텐츠, MVC와 템플릿 엔진, API
1. 정적 컨텐츠
: 파일을 그냥 웹브라우저에 내려주는 것.
2. MVC와 템플릿 엔진
- 템플릿 엔진: 과거에는 jsp와 php가 사용.
html을 서버에서 프로그래밍해서 html을 동적으로 바꿔서 내리는 것.
- 그걸 위해 controller,model,view라고해서 MVC 사용.
** viewResolver: 화면과 관련한 해결자, view를 찾아주고 템플릿엔진 연결
- 과거: model 1방식, controller와 view가 구분되어있지 않고 view에서 모든걸 다함. jsp가지고 그렇게 개발을 많이 했 다.
- 현재: MVC 스타일 이용.
View: 화면을 그리기.
Controller나 Model: 비즈니스 로직과 관련있거나 내부적인걸 처리.
=> View는 화면과 관련한 일. 비즈니스 로직과 서버 뒷단의 관련된것은 controller나 로직이 처리한 후 Model 에다가 관련된 화면에 필요한 것들을 담아서 넘겨주는 패턴.
3. API
1) @ResponseBody 문자 반환
- 대신에 HTTP의 BODY에 문자 내용을 직접 반환(HTML BODY TAG를 말하는 것이 아님)
2) @ResponseBody 객체 반환
- @ResponseBody 를 사용하고, 객체를 반환하면 객체가 JSON으로 변환됨(기본)
- 요즘은 json이라는 data 포멧으로 클라이언트한테 data를 전달. view,json,react 쓸때 api로 data만 내려주면 화면은 클라이언트가 알아서 그리고 정리하는.
@ResponseBody 를 사용
- HTTP의 BODY에 문자 내용을 직접 반환
- viewResolver 대신에 HttpMessageConverter 가 동작
- 기본 문자처리: StringHttpMessageConverter
- 기본 객체처리: MappingJackson2HttpMessageConverter
- byte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있음
참고: 클라이언트의 HTTP Accept 해더와 서버의 컨트롤러 반환 타입 정보 둘을 조합해서 HttpMessageConverter 가 선택된다.
@Controller //spring은 해줘야함
public class HelloController {
@GetMapping("hello") //웹 어플리케이션에서 /hello라고 들어오면 처리해줌.
public String hello(Model model){
model.addAttribute("data","hello!!");
return "hello";
}
//MVC 방식입니다.
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam("name") String name,Model model){
model.addAttribute("name",name);
return "hello-template";
}
//api 방식입니다.
@GetMapping("hello-string")
@ResponseBody //http에서 헤더부와 바디부가 있음. 바디부에 이 data를 직접 넣어주겠다.
public String helloString(@RequestParam("name") String name){
return "hello" + name; //name에 spring을 넣으면 hello spring , view가 없고 그대로 내려감.
}
@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;
}
}
}