Home > Spring > πŸƒ[Spring] `@Configuration`μ΄λž€ λ¬΄μ—‡μΌκΉŒμš”?

πŸƒ[Spring] `@Configuration`μ΄λž€ λ¬΄μ—‡μΌκΉŒμš”?
Spring Framework

πŸƒ[Spring] @Configurationμ΄λž€ λ¬΄μ—‡μΌκΉŒμš”?

  • @Configuration은 Spring Frameworkμ—μ„œ μ‚¬μš©λ˜λŠ” μ• λ„ˆν…Œμ΄μ…˜μœΌλ‘œ, μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆμ— μ„€μ • ν΄λž˜μŠ€μž„μ„ λͺ…μ‹œν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€.
    • 이 μ• λ„ˆν…Œμ΄μ…˜μ΄ 뢙은 ν΄λž˜μŠ€λŠ” Bean μ„€μ • 메타데이터λ₯Ό μ •μ˜ν•˜λŠ”λ° μ‚¬μš©λ©λ‹ˆλ‹€.
  • 이λ₯Ό 톡해 κ°œλ°œμžλŠ” application.propertiesλ‚˜ application.yml 섀정을 λŒ€μ‹ ν•˜μ—¬ Java 기반의 섀정을 μž‘μ„±ν•  수 μžˆλŠ” 방법을 μž¬κ³΅ν•©λ‹ˆλ‹€.
    • κ·ΈλŸ¬λ‚˜ @Configuration이 application.propertiesλ‚˜ application.yml 파일 자체λ₯Ό μ™„μ „νžˆ λŒ€μ²΄ν•œλ‹€λŠ” 것은 μ•„λ‹™λ‹ˆλ‹€.
      • 이 두 κ°€μ§€λŠ” μ„œλ‘œ 보완적인 역할을 ν•©λ‹ˆλ‹€.

1️⃣ @Configurationκ³Ό application.properties/application.yml의 관계

1️⃣ application.properties/application.yml

  • 주둜 ν™˜κ²½ μ„€μ • 값을 μ™ΈλΆ€ν™”ν•˜μ—¬ μ •μ˜ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.
  • λ°μ΄ν„°λ² μ΄μŠ€ URL, μ‚¬μš©μž 이름, λΉ„λ°€λ²ˆν˜Έ, ν¬νŠΈμ™€ 같은 섀정값을 λ‹΄μŠ΅λ‹ˆλ‹€.
  • 파일 기반 섀정이며, μŠ€ν”„λ§μ΄ μžλ™μœΌλ‘œ μ½μ–΄μ„œ ν•„μš”ν•œ 곳에 μ£Όμž…ν•©λ‹ˆλ‹€.

2️⃣ @Configuration

  • Java μ½”λ“œλ‘œ λͺ…μ‹œμ μœΌλ‘œ Beanκ³Ό 섀정을 μ •μ˜ν•©λ‹ˆλ‹€.
  • @Bean λ©”μ„œλ“œλ₯Ό 톡해 동적인 μ„€μ • λ‘œμ§μ΄λ‚˜ λ³΅μž‘ν•œ 객체 생성 λ‘œμ§μ„ 담을 수 μžˆμŠ΅λ‹ˆλ‹€.
  • 섀정값을 ν”„λ‘œκ·Έλž˜λ°μ μœΌλ‘œ μ²˜λ¦¬ν•˜κ±°λ‚˜ νŠΉμ • 쑰건에 따라 λ™μ μœΌλ‘œ ꡬ성해야 ν•  λ•Œ μœ μš©ν•©λ‹ˆλ‹€.

2️⃣ 예제: Java 기반 μ„€μ •μœΌλ‘œ application.properties λŒ€μ²΄ν•˜κΈ°.

πŸ‘‰ κΈ°μ‘΄ application.properties μ„€μ •.

app.name=MyApplication
app.version=1.0.0

πŸ‘‰ Java 기반 μ„€μ •μœΌλ‘œ λŒ€μ²΄.

@Configuration
public class AppConfig {
    
    @Bean
    public String appName() {
        return "MyApplication";
    }
    
    @Bean
    public String appVersion() {
        return "1.0.0";
    }
}
  • μ΄λ ‡κ²Œ ν•˜λ©΄ μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆμ—μ„œ appNameκ³Ό appVersionμ΄λΌλŠ” μ΄λ¦„μ˜ Bean을 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

3️⃣ @Configurationκ³Ό application.propertiesλ₯Ό ν•¨κ»˜ μ‚¬μš©ν•˜λŠ” 방법.

  • λŒ€λΆ€λΆ„μ˜ 경우, Java 기반 섀정은 application.propertiesλ‚˜ application.yml에 μ •μ˜λœ 값을 μ½μ–΄μ„œ μΆ”κ°€μ μœΌλ‘œ μ²˜λ¦¬ν•˜λŠ” λ°©μ‹μœΌλ‘œ μ‚¬μš©λ©λ‹ˆλ‹€.

1️⃣ 예제: @Configurationμ—μ„œ application.properties μ‚¬μš©

1️⃣ application.properties 파일.

app.name=MyApplication
app.version=1.0.0

2️⃣ @Configuration 클래슀

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class AppConfig {
    
    @Value("${app.name}")
    private String appName;
    
    @Value("${app.version}")
    private String appVersion;
    
    @Bean
    public AppInfo appInfo() {
        return new AppInfo(appName, appVersion);
    }
    
    public static class AppInfo {
        private final String name;
        private final String version;
        
        public AppInfo(String name, String version) {
            this.name = name;
            this.version = version;
        }
        
        public String getName() {
            return name;
        }
        
        public String getVersion() {
            return version;
        }
    }
}
  • 이 λ°©μ‹μ—μ„œλŠ” application.properties에 μ •μ˜λœ 값을 @Value둜 μ£Όμž…λ°›μ•„ Java μ½”λ“œμ—μ„œ ν™œμš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

4️⃣ μ–Έμ œ Java 기반 섀정을 μ‚¬μš©ν• κΉŒ?

  • 동적 둜직이 ν•„μš”ν•œ 경우.
    • νŠΉμ • 쑰건에 따라 Bean을 λ‹€λ₯΄κ²Œ μ„€μ •ν•΄μ•Ό ν•˜λŠ” 경우.
    • λ³΅μž‘ν•œ 객체 생성 둜직이 ν•„μš”ν•œ 경우.
  • μ½”λ“œλ‘œ λͺ…μ‹œμ μœΌλ‘œ 섀정을 κ΄€λ¦¬ν•˜λ €λŠ” 경우.
    • μ™ΈλΆ€ μ„€μ • 파일이 μ•„λ‹Œ, μ½”λ“œμ—μ„œ 직접 κ΄€λ¦¬ν•˜λŠ” 것이 더 μ ν•©ν•œ 경우.

5️⃣ μ–Έμ œ application.propertiesλ₯Ό μ‚¬μš©ν• κΉŒ?

  • ν™˜κ²½λ³„ 섀정을 관리할 λ•Œ
    • 개발/운영 ν™˜κ²½μ—μ„œ μ„œλ‘œ λ‹€λ₯Έ 값을 μ‰½κ²Œ κ΄€λ¦¬ν•˜λ €λŠ” 경우.
  • κ°„λ‹¨ν•œ μ„€μ •κ°’
    • λ¬Έμžμ—΄, 숫자, 논리값과 같은 κ°„λ‹¨ν•œ μ„€μ •κ°’.

6️⃣ κ²°λ‘ .

  • @Configuration을 μ‚¬μš©ν•˜λ©΄ Java μ½”λ“œλ‘œ 섀정을 μ •μ˜ν•  수 있고, νŠΉμ • κ²½μš°μ—λŠ” application.propertiesλ‚˜ application.yml을 λŒ€μ²΄ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.
  • κ·ΈλŸ¬λ‚˜ μΌλ°˜μ μœΌλ‘œλŠ” Java μ„€μ •κ³Ό application.properties/application.yml νŒŒμΌμ„ ν•¨κ»˜ μ‚¬μš©ν•˜μ—¬ μœ μ—°μ„±κ³Ό 관리 νŽΈμ˜μ„±μ„ λͺ¨λ‘ μ–»λŠ” 것이 κ°€μž₯ μ’‹μŠ΅λ‹ˆλ‹€.