이 글은 크레이그 윌즈의 "스프링 인 액션(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) {
...
}
'공부 > Spring' 카테고리의 다른 글
[스프링 인 액션] Chapter 4 스프링 시큐리티 (0) | 2022.06.16 |
---|---|
[스프링 인 액션] Chapter 3 데이터로 작업하기 (0) | 2022.05.08 |
[스프링 인 액션] Chapter 2 웹 어플리케이션 개발하기 (0) | 2022.04.18 |
[스프링 인 액션] Chapter 1 스프링 시작하기 (0) | 2022.04.08 |
[스프링 프레임워크 Core] 스프링 IoC 컨테이너와 빈 (0) | 2020.06.06 |