2장 스프링 부트 공통 작업
2장에서 다루는 내용
- 스프링 부트 애플리케이션 설정 관리
- @ConfigurationProperties를 사용한 커스텀 설정 정보 생성
- CommandLineRunner 인터페이스를 사용한 초기화 코드 실행
- 스프링 부트 기본 로깅과 Log4j2 로깅 설정
- 빈 밸리데이션을 사용한 사용자 입력 데이터 검증
- 애플리 케이션 설정 관리, 커스텀 설정 정보 생성 같은 핵심 개념을 배운다.
- 또한 스프링 부트 개발 과정에서 만나게 되는 다양한 고통 작업 처리 방법을 알아본다.
2.1 애플리케이션 설정 관리
- 애플리케이션 설정 정보 관리는 중요하게 다뤄지는 요소이다.
- 개발 프로젝트를 진행하는 방식에 따라 동일한 애플리케이션을 개발
dev
, 테스트test
, 스테이징staging
, 상용prod
환경 등 여러 환경에 배포해야 하는 경우도 있다. - 스프링 부트는 프로퍼티 파일, YAML 파일, 환경 변수, 명령행 인자등
2.1.1 SpringApplication 클래스 사용 / Property 지정 방법
- 스프링 부트의 SpringApplication 클래스를 사용해서 애플리케이션 설정 정보를 정의할 수 있다.
- 이클래스에는 java.util.Properties 또는 java.util.Map<String, Object>를 인자로 받는 setDefaultProperties() 메서드가 있는데
- 설정 정보를 Properties나 Map<String, Object>에 넣어서 이 메서드를 호출하면 설정 정보가 애플리케이션에 적용된다.
- 이 방식은 소스 코드로 정의하는 방식이므로 한번에 정의 하면 나중에 바뀌지 않는 경우에 적합하다.
application.properties
파일에서는 설정 정보를 포함하고 있는 다른properties
파일이나..yml
파일을spring.config.import
프로퍼티를 통해 임포트 해서 사용할 수 있다.application.properties
파일 안에spring.config.import=classpath:additional-application.properties
를 추가하면- 스프링 부트는
additional-application.properties
파일에 있는 설정 정보를 읽어서 사용할 수 있다. - 만약
additional-application.properties
파일이 클래스패스에 존재하지 않으면 스프링 부트는ConfigDataLocationNotFoundException
예외를 던진다. - 상황에 따라. 설정 파일이 없을 때 예외를 던지고 애플리 케이션 시동 작업을 종료하는 대신에
- 해당 파일을 무시하고 애플리케이션 시동 작업을 계속 진행하게 만들어야 할 때도 있다.
- 이럴 때는
spring.config.on-not-fount
에ignore
를 지정하면 된다.
예제 2.1 Spring Application 클래스의 setDefaultPropertes() 메서드 사용
@SpringBootApplication
public class SpringBootAppDemoApplication {
public static void main(String[] args) {
Properties properties = new Properties();
// p48 특정 에러를 무시하는 방법
// 파일이 없는 경우의 에러를 무시하는 방법
properties.setProperty("spring.config.on-not-found", "ignore");
SpringApplication application = new SpringApplication(SpringBootAppDemoApplication.class);
application.setDefaultProperties(properties);
application.run(args);
}
}
application.properties 파일
# application.properties 파일에서는 설정 정보를 포함하는 고있는 다른 properties 파일이다 .yml파일을 임포트 하는 방법이다.
spring.config.import=classpath:additional-application.properties
additional-application.properties 파일
management.endpoints.web.exposure.include=env
2.1.2 @PropertySource 사용
- 프로퍼티 파일의 위치를 @PropertySource 에너테이션을 사용해서 지정할 수도 있다. 예제 2.2를 보면
예제 2.2 @PropertySource를 사용해서 프로퍼티 파일 위치 지정
package com.manning.sbip.ch02;
//`@Configuration`이 붙어 있는 스프링 환경 설정 클래스인 `DbConfiguration`에 `@PropertySource`에너테이션이 지정돼 있다.
//`src/main/resources` 디렉터리에 있는 파일은 실행 가능한 `JAR`로 패키징된 후 클래스 패스에 위치하게 되므로 이 디렉터리에 `dbConfig.properties` 파일을 작성한다.
@Configuration
// Properties 파일의 위치를 @PropertySource 에너테이션을 사용해서 지정
@PropertySource("classpath:dbConfig.properties")
public class DbConfiguration {
// 스프링이 제공하는 `Environment` 인스턴스를 주입받으면 `dbConfig.properties` 파일에 지정된 설정 정보를 읽을 수 있다.
@Autowired
private Environment env;
@Override
public String toString() {
// Environment env 을 이용해 값을 얻는다.
return "User: "+env.getProperty("user") +", Password: "+env.getProperty("password");
}
}
@Configuration
이 붙어 있는 스프링 환경 설정 클래스인DbConfiguration
에@PropertySource
에너테이션이 지정돼 있다.src/main/resources
디렉터리에 있는 파일은 실행 가능한JAR
로 패키징된 후 클래스 패스에 위치하게 되므로 이 디렉터리에dbConfig.properties
파일을 작성한다.
예제 2.3 dbConfig.properties 파일
user=sa
password=p@sswOrd
- 스프링이 제공하는
Environment
인스턴스를 주입받으면dbConfig.properties
파일에 지정된 설정 정보를 읽을 수 있다.
예제 2.4 DbConfiguration 인스턴스 설정 정보 접근
package com.manning.sbip.ch02;
@SpringBootApplication
public class SpringBootAppDemoApplication {
private static final Logger log = LoggerFactory.getLogger(SpringBootAppDemoApplication.class);
public static void main(String[] args) {
ConfigurableApplicationContext applicationContext = SpringApplication.run(SpringBootAppDemoApplication.class, args);
// @PropertySource을 이용한 DbConfiguration의 클래스
DbConfiguration dbConfiguration = applicationContext.getBean(DbConfiguration.class);
log.info(dbConfiguration.toString());
}
}
'개인공부 > 실전 스프링 부트 (Spring-Boot-In-Practice)' 카테고리의 다른 글
3.4.3 ~ 3.4.4 스프링 터이터를 사용한 데이터베이스 접근 - PaginAndSortingRepository (0) | 2024.03.11 |
---|