템플릿 엔진
스프링 부트는 정적 페이지와 템플릿 시작 페이지를 모두 지원한다.
먼저, static 아래의 index.html 파일을 찾고 없다면 index 템플릿을 찾는다.
아래와 같은 위치로 파일이 존재한다면,
/static/index.html을 찾고, (/static/index.html)이 없다면, /templates/index.html를 찾아 응용 프로그램 시작 페이지로 띄운다.
static에는 보통 정적 파일인 js나 css 같은 파일들이 위치하고, templates에는 서버가 실행되면서 동적으로 렌더링되는 Thymeleaf 템플릿 파일들이 위치한다.
템플릿 엔진 반환하기
@Controller
public class MemberController {
@GetMapping("/hello")
public String world(@RequestParam(required = false) String name, Model model) {
if (name == null) {
return "static";
}
model.addAttribute("name", name);
return "hello";
}
}
위와 같이 코드를 작성하게 된다면, ViewResolver가 동작하여
text/html을 반환하고 바디에 html파일의 내용이 들어가는 것을 확인할 수 있다.
@ResponseBody
@ResponseBody는 컨트롤러의 메서드의 반환값을 HttpMessageConverter를 통해 응답 본문으로 직렬화하여 응답한다.
즉, 위의 템플릿 엔진 파일과 달리 ViewResolver가 작동되는 것이 아닌, HttpMessageConverter가 작동한다.
@RestController
@RestController는 @Controller에 @ResponseBody가 자동으로 적용되는 어노테이션이다.
@RestController
public class MemberController {
@GetMapping("/hello")
public String world(@RequestParam(required = false) String name, Model model) {
if (name == null) {
return "static";
}
model.addAttribute("name", name);
return "hello";
}
}
때문에 같은 코드에서 @Controller만 @RestController로 변경하게 될 시,
리턴타입인 String에 대해 HttpMessageConverter가 동작하여 응답의 Content-Type이 text/html이 아닌, text/plain인 것을 확인 할 수 있다.
따라서 바디에도 hello라는 문자열의 값이 그대로 들어가게 된다.
타임리프를 사용하지 않았어서 view를 직접 반환한 적이 없었는데, 이번 학습 테스트를 하면서 템플릿 엔진과 @RestController, @Controller의 차이에 대해서도 정확히 알 수 있게 되었다
'우아한테크코스 6기 > 2단계' 카테고리의 다른 글
[방탈출 사용자 예약] @Bean, @Component, 그리고 POJO (0) | 2024.05.14 |
---|---|
영속성 entity 와 domain entity 분리해보기 (0) | 2024.05.12 |
[방탈출 예약 관리] @DiritesContext, 알고 쓰자 (0) | 2024.04.27 |
[레벨2] 1주차 회고 (0) | 2024.04.27 |
@SpringBootTest의 RANDOM_PORT 옵션과 RestAssured 함께 사용하기 (0) | 2024.04.25 |