Spring/Settings

[Spring Boot] @ConfigurationProperties 사용해 application.properties에 정의된 값을 Bean으로 주입 받기

Dev.Cho 2024. 11. 29. 07:38
반응형

@ConfigurationProperties 가 필요한 경우

application.properties 파일에는 애플리케이션을 위한 여러 설정이 들어간다. 이때 여러 설정 값들을 application.properties에 정의해 놓는데, 이 값들을 앱으로 가져와야 하는 경우가 생긴다. 예를 들어 서버의 이름, 서버에서 허용하는 클라이언트의 유형 등을 개발 환경 별로 다르게 설정해놓고 이 값을 통해 애플리케이션을 설정하는 경우 등이 있을 수 있다.

 

예를 들어 다음과 같은 application.properties 파일이 있다고 해보자.

spring.application.name=setting-configurationproperties

server.server-name=release
server.allowed-clients[0]=Android
server.allowed-clients[1]=iOS

 

이런 경우 server.server-name, server.allowed-client 를 코드에서 사용하고 싶다면 @ConfigurationProperties 를 사용하면 된다.

 

@ConfigurationProperties 사용해 값을 담는 Bean 만들기

@ConfigurationProperties를 사용하는 방법은 간단하다. 단순히 server.server-name와 server.allowed-client의 prefix가 server 이므로, @ConfigurationProperties의 prefix인자로 server를 넘긴 후, 그 다음에 나오는 server-name과 allowed-client는 camel case로 변경해 serverName, allowedClient로 만들어 프로퍼티로 넣으면 된다. 

@ConfigurationProperties(prefix = "server")
data class ServerConfiguration(
    val serverName: String,
    val allowedClients: List<String>
)

 

이후 이 ConfigurationProperties를 만드는 것을 허용하기 위해 @EnableConfigurationProperties(ServerConfiguration::class) 어노테이션을 SpringBootApplication과 함께 붙여 넣으면 된다.

@SpringBootApplication
@EnableConfigurationProperties(ServerConfiguration::class)
class SettingConfigurationpropertiesApplication

 

그러면 ServerConfiguration은 Bean으로 등록되고, 어디에서든 사용할 수 있게 된다.

Bean이 제대로 만들어졌는지 확인하기 위해 다음과 같이 간단한 컨트롤러를 만들어보자.

@RestController
class ServerController(
    private val serverConfiguration: ServerConfiguration
) {
    @GetMapping("/server/config")
    fun getServerConfiguration(): ServerConfiguration {
        return serverConfiguration
    }
}

 

이 컨트롤러는 /server/config 경로로 요청이 들어올 시 ServerConfiguration 객체를 JSON 형태로 반환하는 컨트롤러이다.

 

이제 애플리케이션을 실행한 후 localhost:8080/server/config 로 접속하면 다음과 같은 결과가 나오는 것을 볼 수 있다.

 

 

전체 코드: GitHub
이 프로젝트가 도움이 되셨다면 저장소에 Star⭐️를 눌러주세요! Stargazers는 다음 페이지에서 확인할 수 있습니다.
반응형