<aside> 1️⃣ Properties, YAML 설정
</aside>
프로퍼티(Properties)와 YAML 설정은 스프링 애플리케이션에서 구성 정보를 관리하기 위한 방법이다. 이러한 설정 파일들을 사용하면 애플리케이션의 동작을 변경하고 환경에 맞게 구성할 수 있다.
1. 프로퍼티(Properties) 파일
key=value
형식의 구성 정보를 포함하는 텍스트 파일이다. 스프링에서는 주로 .properties
확장자를 가진 파일을 사용한다.
주석은 #
기호로 시작하며, 프로퍼티에 대한 설명이나 비활성화된 구성 등을 기록할 수 있다. 프로퍼티 파일은 여러 가지 방법으로 읽을 수 있으며, @PropertySource
어노테이션을 사용하여 프로퍼티 파일을 명시적으로 로드할 수도 있다.
예시를 통해 프로퍼티 파일을 살펴보겠다.# application.properties 파일 내용
app.name=MyApp
app.version=1.0.0
app.author=John Doe
app.name
, app.version
, **app.author
**는 프로퍼티의 키(key)이며, MyApp
, 1.0.0
, **John Doe
**는 해당 키에 대한 값(value)이다.
스프링 애플리케이션에서 프로퍼티를 사용하려면 @Value
어노테이션을 이용하거나 Environment
객체를 사용하여 값을 주입받을 수 있다.
예를 들어, app.name
프로퍼티를 주입받는 방법은 다음과 같다.import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class MyComponent {
@Value("${app.name}")
private String appName;
// ...
}
@Value("${app.name}")
어노테이션은 app.name
프로퍼티의 값을 appName
변수에 주입한다.2. YAML (YAML Ain't Markup Language) 설정
.yml
또는 .yaml
확장자를 가진 파일로 저장된다.
스프링 부트는 YAML 설정을 기본적으로 지원하며, application.yml
파일에 애플리케이션의 설정을 작성할 수 있다.
예시를 통해서 YAML 설정을 살펴보자# application.yml 파일 내용
app:
name: MyApp
version: 1.0.0
author: John Doe
app
**은 최상위 레벨의 키(key)이며, name
, version
, **author
**는 하위 레벨의 키로 계층 구조를 형성한다.
스프링 애플리케이션에서 YAML 설정을 사용하려면 @ConfigurationProperties
어노테이션을 이용하여 값을 바인딩할 수 있다.
예를 들어, app.name
설정을 주입받는 방법은 다음과 같다.import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "app")
public class MyAppProperties {
private String name;
// Getter, Setter...
// ...
}
@ConfigurationProperties(prefix = "app")
어노테이션은 app.name
설정 값을 name
필드에 바인딩한다.
프로퍼티 파일과 YAML 설정은 스프링 애플리케이션에서 구성 정보를 관리하기 위한 유연하고 강력한 방법이다. 이를 통해 애플리케이션의 동작을 변경하고 다양한 환경에 대응할 수 있다.<aside> 1️⃣ Spring Boot의 자동 구성(Auto-Configuration) 개념
</aside>
<aside> 2️⃣ 자동 구성은 크게 두 가지 측면에서 동작한다.
</aside>
@ConditionalOn...
어노테이션을 이용하여 지정된다.자동 구성은 주로 스프링의 @Configuration
어노테이션을 이용하여 구현된다.
이를 통해 자동 구성 클래스에서 빈(bean)을 생성하고 설정할 수 있다.
예를 들어, 데이터베이스 관련 자동 구성 클래스는 @Configuration
어노테이션과 @ConditionalOnClass
어노테이션을 사용하여 데이터베이스 종속성이 존재할 때만 활성화되도록 설정할 수 있다.
자동 구성은 Spring Boot의 강력한 기능 중 하나로, 개발자는 애플리케이션의 구성을 명시적으로 작성하지 않아도 필요한 구성을 자동으로 제공받을 수 있다. 이를 통해 개발자는 애플리케이션의 핵심 비즈니스 로직에 집중할 수 있다. 예시를 통해 자동 구성의 동작을 이해해보자. H2 데이터베이스를 사용하는 Spring Boot 애플리케이션을 생각해보자. 애플리케이션의 클래스 경로에 H2 종속성이 존재하면, Spring Boot는 자동으로 H2 데이터베이스를 사용하는 빈을 생성하고 설정한다.
@Configuration
@ConditionalOnClass(H2Database.class)
public class H2AutoConfiguration {
@Bean
public DataSource dataSource() {
// H2 데이터베이스를 사용하는 DataSource 빈을 생성하여 반환
}
// 추가적인 H2 데이터베이스 설정 및 빈들...
}
@ConditionalOnClass(H2Database.class)
어노테이션은 H2 데이터베이스 종속성이 존재하는 경우에만 이 자동 구성이 활성화되도록 지정한다.
그리고 dataSource()
메소드는 H2 데이터베이스를 사용하는 DataSource 빈을 생성하고 반환한다.Spring Boot의 자동 구성은 다양한 종속성과 설정에 대해 자동으로 구성을 제공하므로 개발자는 번거로운 설정 작업을 줄일 수 있다. 그러나 항상 원하는 구성이 제공되는 것은 아니므로, 필요에 따라 자동 구성을 비활성화하거나 사용자 정의 구성을 추가할 수도 있다.