- 스태틱 컨텐츠
- MVC(템플릿 엔진을 이용해 html을 동적으로 구성)
- API: JSON으로 내려주는 방식, 데이터만 내려주면 view단에서 알아서 구성 또한 서버끼리 소통할 때도 API를 사용한다.
정적 컨텐츠
spring boot는 static content를 기본으로 제공한다.
url은 /resources/static폴더 안의 파일명으로 접근하면 된다.
요청은 톰캣이 먼저 받는다.
스프링 컨테이너에서는 항상 컨트롤러가 먼저 우선순위를 갖는다.
hello-static과 관련된 컨트롤러가 없는 경우 /static 경로에서
해당되는 파일을 찾고 존재하는 경우 랜더링 해준다.
MVC와 템플릿 엔진
view는 화면 구성만 담당한다.
model이라는 구조에 데이터들을 담아서 view에 넘겨준다.
controller에서 주요 비즈니스 로직들을 처리한다.
코드를 실행 시키면 viewResolver에게 필요한 템플릿을 요청한다.
타임리프 템플릿의 장점은 파일의 경로를 이용해 그대로 랜더링을 할 수 있다.
실제 데이터는 th를 통해 랜더링 된다.
http://localhost:8080/hell-mvc?name=spring!
위 형식으로 파라미터를 전달할 수 있다.
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam(value = "name") String name, Model model) {
model.addAttribute("name", name);
return "hello-template";
}
API
@ResponseBody annotation는 http의 body에 해당 데이터를 직접 넣겠다는 의미이다.
템플릿 엔진(html 전송)과의 차이는 뷰가 존재하지 않고 데이터가 그대로 전송된다는 점이다.
api에서 객체를 반환하며 @ResponseBody를 설정하면 JSON형태로 전송된다.
(과거에는 xml방식으로 전송되기도 했다.)
@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를 만나면 viewResolver가 아니라
HttpMessageConverter에 전달된다.
return 값으로
객체가 오면 JSON으로 변환해서 http에 전달한다. (JsonConverter)
문자열이 오는 경우 그대로 전달한다. (StringConverter)
'Backend > spring' 카테고리의 다른 글
Spring ApplicationContext, IoC, Singleton (0) | 2022.01.08 |
---|---|
스프링 빈과 의존관계 (0) | 2021.11.24 |
스프링 회원 관리 예제 - 백엔드 개발 (0) | 2021.11.22 |
Spring 프로젝트 환경설정 (0) | 2021.11.22 |
메이븐으로 스프링 시작하기 (0) | 2021.11.19 |