공부/Spring

[스프링 인 액션] Chapter 5 구성 속성 사용하기

Lai_Khan 2022. 7. 3. 17:49
이 글은 크레이그 윌즈의 "스프링 인 액션(5판)"을 읽고 간략히 정리한 글이다.

 

Auto-Configuration 세부 조정

스프링 환경 추상화environment abstraction란 구성 가능한 모든 속성을 한 곳에서 관리하는 개념을 말한다.

다음같은 속성으로부터 원천 속성을 가져와서 앺르리케이션 컨텍스트 빈이 사용할 수 있게 해준다.

  • JVM 시스템 속성
  • 운영체제 환경변수
  • 명령행 인자 command-line argument
  • 애플리케이션 속성 구성 파일

*.xml, *.yml, *.properties 파일에 datasource, 서버, 로깅 등의 속성을 정의할 수 있다. (예시 ↓↓↓)

spring:
	datasource:
		jndi-name:

server:
	port: 3000
	ssl:
		key-store: file://path/to/mykeys.jks
		...

logging:
	level:
		root: WARN
		org:
			springframework:
				security: DEBUG

 

우리의 Auto-Configuration 생성

@ConfigurationProperties 애노테이션을 사용해 특정 스프링 빈에 직접 지정한 property 값을 가져올 수 있다.

taco:
	orders:
		pageSize: 10

이렇게 속성을 설정해준뒤,

@Data
@Component
@ConfigurationProperties(prefix="taco.orders")
public class OrderProps {
	private int pageSize = 20;
}

pageSize의 기본값은 20이지만 구성 속성값을 통해 이를 쉽게 변경할 수 있다.

 

프로파일 사용해서 구성

개발 환경과 프로덕션 환경에서 각기 다른 속성을 적용하고 싶다면 스프링 프로파일을 사용하면 된다.

 

.yml 이나 .properties 파일을 생성할 때 다음과 같이 생성하는 것이다.

application-{프로파일 이름}.yml, application-{프로파일 이름}.properties  (ex. application-prod.yml)

 

또는 YAML에서만 가능한 방법으로 프로파일 특정 속성을 정의할 수도 있다.

logging:
	level:
		tacos: DEBUG

---
spring:
	profiles: prod
	datasources:
		url: jdbc:mysql://localhost/tacocloud
		username: tacouser
		password: tacopassword

logging:
	level:
		tacos: WARN

 

또한 프로파일을 사용해 조건별로 빈을 생성할 수도 있다.

@Bean
@Profile("dev")
public CommandLineRunner dataLoader(IngredientRepository repo) {
	...
}

---

@Bean
@Profile({"dev", "qa"})
public CommandLineRunner dataLoader(IngredientRepository repo) {
	...
}

---

@Bean
@Profile("!prod")
public CommandLineRunner dataLoader(IngredientRepository repo) {
	...
}