본문 바로가기
Code/SpringBoot

application.yml 또는 application.properties 파일의 설정을 클래스로 매핑하여 관리해볼까요~?

by 띵커베르 2024. 5. 29.
728x90

Spring Boot에서는 application.yml 또는 application.properties 파일의 설정을 클래스로 매핑하여 보다 편리하게 관리할 수 있습니다. 이를 통해 설정 값을 보다 쉽게 사용할 수 있고, 타입 세이프티(Type Safety)를 보장할 수 있습니다.

 

예시 YAML 설정 파일

site-map:
  xmlns: "http://www.sitemaps.org/schemas/sitemap/0.9"
  base-url: "https://example.com/base"
  magazine-url: "https://example.com/magazine"
  aws:
    bucket: s3-test-bucket
    path: sitemap
    magazine: /magazine
    file-name: /sitemap.xml

 


 

위와 같이 설정 파일이 있다고 할 때 이를 사용하기 위해 여러 방법으로 구현할 수 있습니다. 그 중 2가지 방법에 대해 살펴봅니다~!

 

1. 간단하게 @Value 어노테이션을 사용하여 값 가져오기

 

@Value("\${site-map.xmlns}")
lateinit var xmlns: String

@Value("\${site-map.base-url}")
lateinit var baseUrl: String

@Value("\${site-map.magazine-url}")
lateinit var magazineUrl: String

@Value("\${site-map.aws.bucket}")
lateinit var awsBucket: String

@Value("\${site-map.aws.path}")
lateinit var awsPath: String

@Value("\${site-map.aws.magazine}")
lateinit var awsMagazine: String

@Value("\${site-map.aws.file-name}")
lateinit var awsFileName: String

물론 1-2개의 설정 정보를 읽기에는 @Value로 가져오기가 편한 것 같습니다.

 


2. @ConstructorBinding를 사용하여 값 가져오기

 

build.gradle.kts 파일에 아래와 같이 의존성을 추가해주는 단계가 있습니다.

dependencies {
    annotationProcessor("org.springframework.boot:spring-boot-configuration-processor")
}

 

import org.springframework.boot.context.properties.ConfigurationProperties
import org.springframework.boot.context.properties.ConstructorBinding

@ConstructorBinding
@ConfigurationProperties(prefix = "site-map")
data class SiteMapConfig(
    val xmlns: String,
    val baseUrl: String,
    val magazineUrl: String,
    val aws: AwsConfig
) {
    data class AwsConfig(
        val bucket: String,
        val path: String,
        val magazine: String,
        val fileName: String
    )
}

 

위 클래스를 활성화시키려면 아래의 코드가 추가되어야 합니다.

import org.springframework.context.annotation.Configuration
import org.springframework.boot.context.properties.EnableConfigurationProperties

@Configuration
@EnableConfigurationProperties(SiteMapConfig::class)
class AppConfig

 

사용하려면 생성자 주입을 통해 사용합니다.

import org.springframework.stereotype.Service

@Service
class SitemapServiceImpl(
    val siteMapConfig: SiteMapConfig
) {
    // 서비스 로직
}

 


 

다른 방법으로도 설정 정보를 읽어올 수 있지만 대표적인 2가지만 우선 살펴보았습니다.

정리

  • @Value 어노테이션을 사용하여 값 가져오기:
    • 간단하고 빠르게 특정 설정 값을 필드에 주입하는 방법입니다.
  • @ConstructorBinding을 사용하여 값 가져오기:
    • 설정 값을 그룹화하고, 타입 안전하게 사용할 수 있는 방법입니다. 불변성을 유지할 수 있어 보다 안전한 코드 작성이 가능합니다.

필요에 따라 적당히 사용하시면 좋을 것 같습니다.

 

오늘도 행복한 코딩 하세용!! 행코!! 🚀

728x90

댓글