Spring Boot 2.0.1 reference 정리 3
2018-04-13
1. Starters
- starter는 application에 포함시킬 수 있는 편리한 dependency들의 모음이다. starter만 추가하면 스프링이나 그 외 연결되어 있는 기술들을 쉽게 사용할 수 있다.
- 예를 들어서 spring과 JPA로 시작하고 싶다면 spring-boot-starter-data-jpa 의존성만 추가하면 된다
- starter는 프로젝트를 세팅할 때 필요로 하는 많은 dependency들이 들어가 있다.
- spring boot의 공식적인 starter들은 ‘spring-boot-starter-*’ 로 시작한다.
2. Structuring Your Code
2-1. ‘default’ Package 사용하지 마라
- 클래스에 package가 따로 선언되어 있지 않는 것을 default package라고 한다
- default package는 피하는 것을 권장하는데 이유는 모든 jar의 모든 클래스가 읽히게 되므로 @ComponentScan, @EntityScan, @SpringBootApplication annotation을 사용하는 성능 문제가 발생할 수 있다.
- 패키지를 지정하면 그 패키지 내에서만 component scan 작업이 일어나므로 범위가 훨씬 줄게된다.
- 자바에서 패키지명을 지을 때는 domain name을 거꾸로 한 것을 사용하기를 권장한다(com.example.project)
2-2. Locating the Main Application Class
- main application 클래스(main 메소드를 가지고 있는 클래스)는 root package에 위치시키는 것을 권장한다.
- @SpringBootApplication 어노테이션이 종종 main class에 위치하기도 하는데 이것은 암시적으로 해당 패키지의 하위에서만 검색이 이루어지도록 한다.
- 만약 @SpringBootApplication 을 사용하지 않으려면 @EnableAutoConfiguration 과 @ComponentScan을 사용하는 것으로 대체할 수 있다.
3. Configuration Classes
- 스프링 부트는 자바 기반의 설정 파일을 선호한다.
- 물론 XML 설정도 가능하지만 두가지 형태의 설정 파일 중 하나는 메인이 되어야 한다.
- 만약 자바 설정이 메인이라면 자바에서 XML 설정을 import 하고, XML 설정이 메인이라면 자바 방식의 설정을 끌고오는 방법을 사용한다.
- 스프링 부트에서는 메인 설정 파일을 @Configuration 어노테이션을 붙인 설정 파일 클래스를 사용하기를 권장한다.
- 가능하다면 XML 설정을 쓰지 말고 JAVA 기반의 설정을 사용해라. ‘Enable*’ 어노테이션을 사용하면 XML 설정을 대체할 수 있다
3-1. Importing Additional Configuration Classes
- 단일 클래스에 모두 @Configuration 을 붙일 필요는 없다. @Import 어노테이션을 이용하여 추가적인 configuration class를 import 할 수 있다
- 또 다른 방법으로는 @ComponentScan을 이용할 수 있고 이것을 통해서 @Configuration 클래스를 자동으로 포함시킬 수 있다.
package com.example.project
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
@Configuration
@Import ({ CustomConfig.class, LocaleConfig.class })
public class AppConfig {
}
3-2. Importing XML Configuration
- XML 기반 설정 파일을 사용해야 한다면 먼저 @Configuration 클래스를 생성한 후 @ImportResource 어노테이션으로 XML 설정 파일을 불러오는 방법을 사용하라
package com.example.project
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportResource;
@Configuration
@ImportResource(location={"classpath:config.xml"})
public class AppConfig {
}