2019. 4. 27. 20:41ㆍ[공부] 영상/스프링 부트 강의
스프링 부트 MVC는 다음과 같은 템플릿 엔진을 기본적으로 지원한다.
- FreeMarker (업데이트가 느려서 권장 x)
- Groovy
- Thymleaf
- Mustache
- JSP (사용을 권하지 않음)
위의 템플릿 엔진을 사용할 때 파일을 불러오는 기본 경로는 src/main/resources/templates 이다.
Thymeleef 사용 예시
Thymeleef dependency 추가
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
src/main/resources/templates/helloView.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8" />
</head>
<body>
<div th:text="${name}"></div>
</body>
</html>
src/main/com/testcompany/testproject/controller/HelloController.java
@Controller
public class HelloController {
@RequestMapping("/hello")
public String index(Model model) {
model.addAttribute("name", "kok202");
return "helloView";
}
}
가능하면 스프링 부트를 사용할 때 JSP 을 권하지 않는 이유는 다음과 같다.
스프링 부트와 같이 Embeded servlet container를 실행가능한 파일로 패키징할 때 사용할 경우 문제가 있다.
1. War 패키징할 때만 사용 가능하다. Tomcat에 하드코딩된 코드 때문에 Jar 는 동작하지 않는다.
2. Jetty 를 사용할 때 War 패키징만 사용 가능하다.
3. Undertow는 jsp 를 지원하지 않는다.
4. 커스텀한 error.jsp 페이지가 에러 핸들링에 필요한 기본 뷰를 오버라이딩 하지 않기 때문에 문제가 된다.
5. 등....
그래도 꼭 JSP를 사용하고 싶다면 아래 포스팅을 참조
https://jayden-lee.github.io/post/spring/spring-boot-jsp-how-to-use/
스프링 부트는 /error 맵핑을 지원한다. 기본적으로 global error 로 이미 whitelabel 페이지가 등록되어 있다.
static HTML으로 에러 코드에 해당하는 에러 페이지를 src/main/resources/error/ 이하 경로에 넣어두면 어떤 status code 에 대해서 에러 페이지를 지정해줄 수 있다. ex) src/main/resources/error/404.html
에러 핸들링
@ControllerAdvice : 스프링 전역에서 발생하는 Exception 관리
@ExceptionHandler : 해당 클래스내에서 value 에해당하는 Exception 이 발생할 경우 아래 메소드를 실행한다.
@ControllerAdvice
public class MyControllerAdvice {
@ExceptionHandler(value=MyException.class)
public String handleMyException(MyException e){
return e.getMessage();
}
}
데이터 바인딩 : Request로 들어오는 값들을 @PathVariable 또는 @RequestParam 으로 받는다. 이 때 Request 들어온 데이터를 @PathVariable, @RequestParam 변수들의 타입에 맞춰서 변경하는 과정
데이터 바인딩을 하는 3가지 방법
1. Property editor
스프링 기능이 아니고 자바 Bean 규약.
Thread safe 하지 않다는 최대 단점이 있다.
싱글톤 @Bean으로 등록하면 안된다.
2. Converter
Converter<String, MyClass>를 implements 해서 MyClassConverter를 만든다.
ConfigurableWebBindingInitializer 를 빈으로 등록해서 MyClassConverter를 등록한다.
@SpringBootApplication
public class Main{
@Bean
public ConfigurableWebBindingInitializer initializer(){
ConfigurableWebBindingInitializer initializer = new ConfigurableWebBindingInitializer();
ConfigurableConversionService conversionService = new FormattingConversionService();
conversionService.addConverter(new MyClassConverter());
initializer.setConversionService(conversionService);
return initializer;
}
public static main(String[] args){
...
}
}
3. WebMvcConfigurer
Converter<String, MyClass>를 implements 해서 MyClassConverter를 만든다.
Web를 사용하기
@Configuration
public class WebConfig implements WebMvcConfigurer{
@Override
public void addFormatters(FormatterRegistry registry){
registry.addConverter(new MyClassConverter());
}
}
4. MyClassConverter를 @Component로 빈등록하기
빈으로 등록되면 스프링 부트가 알아서 Converter를 찾아서 실행해준다.
스프링 HATEOAS
Hypermedia As The Engine Of Application State
사용자가 보내는 이 본문과 관련있는 Hypermedia 정보들 (링크 정보등...) 을 같이 보내는 것
스프링 HATEOAS 설정은 @EnableAutoConfiguration 을 대신해서 @EnableHypermediaSupport를 사용하면 된다.
스프링 CORS
Cross Origin Resource Sharing
다른 도메인에서도 (daum.net) 나의 도메인의 하위 페이지(myhome.com/test/123) 에 접근 가능하도록 하는 것이다. 스프링 부트는 기본적인 CROS 설정이 들어가 있어서 컨트롤러에 @CrossOrigin 을 붙여서 사용하기만 하면 된다. @CrossOrigin을 붙이지 않고 CROS 를 지원하려는 컨트롤러를 설정 파일으로 관리하고 싶다면 다음과 같이 설정 작성하면 된다.
@Configuration
public class MyConfiguration {
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurer() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/api/**");
}
};
}
}
'[공부] 영상 > 스프링 부트 강의' 카테고리의 다른 글
스프링 부트 강의 정리 (21~22 : 테스트 자동 설정 Annotations) (0) | 2019.04.28 |
---|---|
스프링 부트 강의 정리 (19~20 : 테스트, MockBean) (0) | 2019.04.28 |
스프링 부트 강의 정리 (15 : WebJar) (0) | 2019.04.24 |
스프링 부트 강의 정리 (13~14 : HttpMessageConverter, Static content) (0) | 2019.04.21 |
스프링 부트 강의 정리 (11~12 : Profile, Log) (0) | 2019.04.21 |