챕터 13: 애플리케이션 설정 관리
13.1 @Value와 @ConfigurationProperties
13.1.1 @Value 어노테이션 사용법
@Value 어노테이션은 애플리케이션 설정 파일(application.properties 또는 application.yml)의 값을 주입하는 데 사용됩니다. 간단한 설정 값을 주입할 때 유용합니다.
# application.properties
app.name=My Spring Boot Application
app.version=1.0.0
package com.example.demo;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class AppConfig {
// @Value 어노테이션을 사용하여 설정 값을 주입
@Value("${app.name}")
private String appName;
@Value("${app.version}")
private String appVersion;
public String getAppName() {
return appName;
}
public String getAppVersion() {
return appVersion;
}
}
위 예제에서는 @Value
어노테이션을 사용하여 app.name
과 app.version
값을 주입합니다.
13.1.2 @ConfigurationProperties 사용법
@ConfigurationProperties 어노테이션은 설정 파일의 값을 객체 형태로 매핑할 때 사용됩니다. 복잡한 설정 값을 주입할 때 유용합니다.
# application.properties
app:
name: My Spring Boot Application
version: 1.0.0
package com.example.demo;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "app")
public class AppProperties {
// 설정 파일의 값을 객체 형태로 매핑
private String name;
private String version;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
}
위 예제에서는 @ConfigurationProperties
어노테이션을 사용하여 app
접두사를 가진 설정 값을 AppProperties
객체에 매핑합니다.
13.2 커스텀 설정 속성
13.2.1 커스텀 설정 작성
애플리케이션에서 커스텀 설정을 작성하여 사용할 수 있습니다. 이를 통해 설정 값을 중앙에서 관리하고 재사용할 수 있습니다.
# application.properties
custom:
message: Welcome to My Application!
13.2.2 주입 방법
커스텀 설정 값을 주입하는 방법은 @Value와 @ConfigurationProperties를 사용하는 두 가지 방법이 있습니다.
package com.example.demo;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@Component
@ConfigurationProperties(prefix = "custom")
class CustomProperties {
// 커스텀 설정 값을 객체 형태로 매핑
private String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
@RestController
class CustomController {
@Value("${custom.message}")
private String customMessage;
private final CustomProperties customProperties;
public CustomController(CustomProperties customProperties) {
this.customProperties = customProperties;
}
// HTTP GET 요청을 처리하여 커스텀 메시지를 반환하는 메서드
@GetMapping("/custom-message")
public String getCustomMessage() {
return customMessage;
}
// HTTP GET 요청을 처리하여 커스텀 프로퍼티 메시지를 반환하는 메서드
@GetMapping("/custom-properties-message")
public String getCustomPropertiesMessage() {
return customProperties.getMessage();
}
}
위 예제에서는 @Value
와 @ConfigurationProperties
를 사용하여 커스텀 설정 값을 주입하고 이를 컨트롤러에서 사용합니다.
13.3 프로파일별 설정 관리
13.3.1 다양한 프로파일 설정 방법
Spring Boot는 프로파일별로 설정 파일을 관리할 수 있습니다. 예를 들어, 개발 환경과 운영 환경에서 다른 설정을 사용할 수 있습니다.
# application.properties (기본 설정 파일)
app.name=My Spring Boot Application
# application-dev.properties (개발 환경 설정 파일)
app.name=My Spring Boot Application (Development)
# application-prod.properties (운영 환경 설정 파일)
app.name=My Spring Boot Application (Production)
13.3.2 프로파일 활성화 및 전환
Spring Boot는 spring.profiles.active
설정을 사용하여 활성화할 프로파일을 지정할 수 있습니다.
# application.properties
spring.profiles.active=dev
또한, 명령줄 인수 또는 환경 변수를 통해 프로파일을 전환할 수 있습니다.
# 명령줄 인수를 사용하여 프로파일 전환
java -jar myapp.jar --spring.profiles.active=prod
위 예제에서는 기본 설정 파일과 프로파일별 설정 파일을 작성하고, spring.profiles.active
를 사용하여 활성화할 프로파일을 지정합니다.
추가 예제 코드
예제 1: @Value로 리스트와 맵 주입
리스트와 맵 형태의 설정 값을 주입하는 예제입니다.
# application.properties
app.supported-locales=en,ko,fr
app.default-messages=welcome:Welcome,hello:Hello
package com.example.demo;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Map;
@Component
public class LocaleConfig {
// @Value 어노테이션을 사용하여 리스트 형태의 설정 값을 주입
@Value("${app.supported-locales}")
private List supportedLocales;
// @Value 어노테이션을 사용하여 맵 형태의 설정 값을 주입
@Value("#{${app.default-messages}}")
private Map<String, String> defaultMessages;
public List getSupportedLocales() {
return supportedLocales;
}
public Map<String, String> getDefaultMessages() {
return defaultMessages;
}
}
위 예제에서는 @Value
어노테이션을 사용하여 리스트와 맵 형태의 설정 값을 주입합니다. supportedLocales
와 defaultMessages
를 통해 설정 값을 사용할 수 있습니다.
예제 2: @ConfigurationProperties로 복잡한 설정 주입
복잡한 설정 값을 객체 형태로 주입하는 예제입니다.
# application.properties
app:
email:
host: smtp.example.com
port: 587
username: user@example.com
password: password
package com.example.demo;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "app.email")
public class EmailConfig {
// 설정 파일의 값을 객체 형태로 매핑
private String host;
private int port;
private String username;
private String password;
public String getHost() {
return host;
}
public void setHost(String host) {
this.host = host;
}
public int getPort() {
return port;
}
public void setPort(int port) {
this.port = port;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
위 예제에서는 @ConfigurationProperties
어노테이션을 사용하여 이메일 설정 값을 EmailConfig
객체에 매핑합니다.
예제 3: 프로파일별 데이터베이스 설정
프로파일별로 데이터베이스 설정을 관리하는 예제입니다.
# application.properties (기본 설정 파일)
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.username=sa
spring.datasource.password=
# application-dev.properties (개발 환경 설정 파일)
spring.datasource.url=jdbc:mysql://localhost:3306/devdb
spring.datasource.username=devuser
spring.datasource.password=devpass
# application-prod.properties (운영 환경 설정 파일)
spring.datasource.url=jdbc:mysql://localhost:3306/proddb
spring.datasource.username=produser
spring.datasource.password=prodpass
package com.example.demo;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class DataSourceConfig {
// @Value 어노테이션을 사용하여 설정 값을 주입
@Value("${spring.datasource.url}")
private String url;
@Value("${spring.datasource.username}")
private String username;
@Value("${spring.datasource.password}")
private String password;
public String getUrl() {
return url;
}
public String getUsername() {
return username;
}
public String getPassword() {
return password;
}
}
위 예제에서는 기본 설정 파일과 프로파일별 설정 파일을 작성하여 데이터베이스 설정을 관리합니다. DataSourceConfig
클래스는 @Value 어노테이션을 사용하여 설정 값을 주입받습니다.
주요 해시태그
#SpringBoot #스프링부트 #애플리케이션설정 #설정관리 #@Value #@ConfigurationProperties #커스텀설정 #프로파일별설정 #프로파일관리
'IT 강좌(IT Lectures) > SpringBoot' 카테고리의 다른 글
15강. RESTful 웹 서비스 (0) | 2024.07.28 |
---|---|
14강. 스프링부트 웹 애플리케이션 개발 (0) | 2024.07.27 |
12강. 스프링부트와 국제화(I18N) (0) | 2024.07.25 |
11강. 프론트엔드 통합 (1) | 2024.07.23 |
10강. Spring Boot DevTools (3) | 2024.07.23 |