@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는 다음 페이지에서 확인할 수 있습니다.