Whiteship Spring Boot 03 Principle
1부는 소개 2부는 시작하기
3부 스프링 부트 원리
의존성 관리 이해
의존성 관리 응용
pom.xml parent 의 원리 및 응용
자동설정의 이해
@SpringBootApplication
는 아래 세가지 어노테이션으로 이루어져 있다.
@SpringBootConfiguration
:@Configuration
과 같음.@ComponentScan
: 빈등록 1단계, 어노테이션이 붙은 패키지를 기준으로 하위 패키지까지의@Component
들을 빈으로 등록한다.@EnableAutoConfiguration
: 빈등록 2단계, META-INF/spring.factories 의 …EnableAutoConfiguration 하위의 빈들을 조건에 따라 등록한다.
자동 설정 만들기 1부: Starter와 AutoConfigure
자동 설정 만들기 2부: @ConfigurationProperties
내장 웹 서버 이해
내장 웹 서버 응용 1부 : 컨테이너와 포트
내장 웹 서버 응용 2부 : HTTPS와 HTTP2
톰캣 HTTP2
독립적으로 실행 가능한 JAR
스프링 부트의 전략 내장 JAR : 기본적으로 자바에는 내장 JAR를 로딩하는 표준적인 방법이 없음. 애플리케이션 클래스와 라이브러리 위치 구분 org.springframework.boot.loader.jar.JarFile을 사용해서 내장 JAR를 읽는다. org.springframework.boot.loader.Launcher를 사용해서 실행한다.
스프링 부트 원리 정리
?? 중간은?
스프링 웹 MVC 1부
Spring Boot 가 제공해주는 Web MVC 기능을 사용하면서, 추가적으로 설정을 하기 위해선 @Configuration
+ WebMvcConfigurer
interface 를 이용.
@EnableWebMvc
를 사용하게되면 Spring Boot 가 제공하는 Web MVC 기능이 사라지고, 모두 재정의 해야한다.
스프링 웹 MVC 2부
HttpMessageConverters 스프링프레임웍에서 제공하는 인터페이스이고, MVC 의 일부분.
Http 요청 본문으로 들어오는것을 객체로 또는 반대로 변환. RequestBody, ResponseBody 와 같이 사용
StringMessageConverter, JsonMessageConverter
스프링 웹 MVC 3부: ViewResolve, 2020-06-11
Accept header
는 브라우져가 어떤 타입의 데이터를 원한다를 서버에서 알려주는 정보 중 하나. 저런 정보들을 참고하여 뷰를 선택한다. 참고 Content Negotiation
xml
은 기본 컨버터에 등록이 안되어있으므로 추가 설정을 해야한다.HttpMessageConvertersAutoConfiguration
스프링 웹 MVC 4부: 정적 리소스 지원, 2020-06-11
- 기본 리소스 위치
classpath:/static
classpath:/public
classpath:/resources
classpath:/META-INF/resources
spring.mvc.static-path-patter
프로퍼티로 설정 변경 가능, 이때는 기존 기본설정이 다 사라짐(아마도?)spring.mvc.static-locations
리소스 찾을 위치 변경 가능
아 msa prototype 만들때는 gradle build 를 하면, build/classes, build/resources 두군데로 들어가고 resources 를 classpath 에서 못찾아서 gradle.build 에 task 를 추가해서 classes 에 resources 를 복사하는걸 넣었었다. 그런데 또 이렇게하면 bootJar 실행 시, jar 에 resources 가 두개 겹쳐서 들어가게 된다… 근데 또 지금 잠깐 실습해보는데 따로 task 로 복사하지 않아도 resources 를 잘찾네? 왜이러지?
Spring boot 의 기본 설정을 가져가면서, 추가 설정을 하려면 아래처럼. /r/어쩌구
인 요청에 해당하는 것을 classpath:/r/
이하에서 찾게된다.
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/r/**")
.addResourceLocations("classpath:/r/")
.setCachePeriod(20)
;
}
}
스프링 웹 MVC 5부: 웹JAR, 2020-06-12
Front 에서 사용하는 js/css 등의 자원을 jar 로 묶을 수 있다.
이렇게 의존성 추가를 하고,
dependencies {
compile('org.springframework.boot:spring-boot-starter-web:2.2.2.RELEASE')
compile('org.springframework.boot:spring-boot-starter-thymeleaf:2.2.2.RELEASE')
compile('org.webjars.bower:jquery:3.2.1')
testCompile('org.springframework.boot:spring-boot-starter-test:2.2.2.RELEASE')
}
이렇게 사용하면 된다.
<script src="/webjars/jquery/3.2.1/dist/jquery.min.js"></script>
<script>
$(function(){
alert('hello, webjar');
});
</script>
내부 모습은 이렇다