resource 폴더 밑에 있는 공통 어플리케이션 속성들을 지정하는 파일인
application.properties 내부 속성에 커스텀하고자 하는 property를 지정하는 전략 입니다
custom property는 두번째로 사용하게 되었는데요
사용하면서 느낀 바로는 상수값들의 관리 용이성 이라고 생각 합니다
처음 써봤을 때 '학생 때 이걸 적용 해볼 생각을 왜 못했을까..' 하며 과거 회상을 했었습니다
지금은 신규 Spring 프로젝트를 진행하게 된다면 경우에 따라 선적용 할 거 같습니다
webConfig 규칙 중 cors에 allow-origins을 대입할 때
prod, dev properties를 구분하여 값을 가져오게 적용 하고 있습니다
dev에선 전체 허용, prod에선 NginX만 허용하도록 하는 방식으로 말이죠
Kotlin 기준 아래와 같이 작성해서 사용 중 입니다
/**
* PropertyValue
* Allow 해줄 Origins를 application.properties로 부터 가져와야 합니다
*/
@Getter
@Setter
class AllowOrigins {
// origins는 1 또는 n개가 될 수 있으니 List타입으로 지정 해줍니다
var allowedOrigis: List<String> = emptyList()
override fun toString(): String {
// 여기서는 xxx.yyy=~~~ 중 yyy에 해당하는 부분을 작성합니다
return "AllowOrigins(allowedOrigins=$allowedOrigins)"
}
}
위와 같이 Property Value를 작성한 것을 토대로 CustomProperty Component를 제작 합니다
@Component
class CustomProperty {
// prefix는 xxx.yyy=~~ 중 xxx에 해당되는 부분을 작성 합니다
@Bean
@ConfigurationProperties(prefix = "[custom name]")
// allowedOrigins는 위에서 생성한 객체를 반환 해줍니다
fun allowedOrigins(): AllowOrigins {
return AllowOrigins()
}
}
제작이 되고나면 아래와 같이 활용 해볼 수 있습니다
// Spring boot WebConfig에서의 활용법
@Configuration
@EnableWebFlux
class WebConfig: WebFluxConfigurer {
// allowedOrigins를 가져와서 변수에 주입
private val allowedOrigins: String = AllowOrigins().allowedOrigins.toString()
override fun addCorsMappings(reg: CorsRegistry) {
registry.allowedOrigins(allowedOrigins)
.allowedOriginPatterns("*")
// 그 외 여러 CORS 매핑 옵션을 추가 합니다
}
}
해당 값들은 application.properties 내부에 xxx.yyy="~~~" 이런식으로 작성된 값을 가져오기 때문에
ConfigurationProperties(prefix = "xxx") 그리고 yyy에 해당하는 PropertyValue
두 값의 매칭에 신경을 써주면 좋습니다
일치하지 않는다면 IDE에서 경고를 띄워주기 때문에 큰 문제는 아니지만, 한번에 되면 기분이 좋으니까요 👀
이 프로젝트를 진행하며 느낀 CustomProperty가 가지는 이점으로는 Develop, Production에서 다르게 쓰여야 할 상수값들의 관리 라고 생각합니다
처음 사용했을 때 보다 조금 더 친숙해지려고 이런저런 검색을 하다보니 응용을 어떻게 하면 좋을까 하는 고민도 하게 되네요 :)