IT 강좌(IT Lectures)/SpringBoot

13강. 애플리케이션 설정 관리

소울입니다 2024. 7. 26. 08:02
728x90
반응형

 

챕터 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.nameapp.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 어노테이션을 사용하여 리스트와 맵 형태의 설정 값을 주입합니다. supportedLocalesdefaultMessages를 통해 설정 값을 사용할 수 있습니다.

예제 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 #커스텀설정 #프로파일별설정 #프로파일관리

반응형