πŸ‘©πŸ»‍πŸ’» Dev/Back-End

[Spring] application.properties 와 @Value μ–΄λ…Έν…Œμ΄μ…˜

yesolz 2023. 11. 21. 15:56
728x90

application.properties

μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬μ—μ„œ application.properties νŒŒμΌμ€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ ꡬ성 섀정을 μ •μ˜ν•˜λŠ” 데 μ‚¬μš©λœλ‹€. 이 νŒŒμΌμ—λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 싀행에 ν•„μš”ν•œ ν™˜κ²½λ³„ μ„€μ •, μ™ΈλΆ€ μ„œλΉ„μŠ€ μ—°κ²° 정보, λ‹€μ–‘ν•œ μ»€μŠ€ν…€ μ„€μ • κ°’ 등이 포함될 수 μžˆλ‹€.

μ£Όμš” 역할은 λ‹€μŒκ³Ό κ°™λ‹€:

  1. λ°μ΄ν„°λ² μ΄μŠ€ μ„€μ •: λ°μ΄ν„°λ² μ΄μŠ€ μ—°κ²° 정보, μ‚¬μš©μž 이름, λΉ„λ°€λ²ˆν˜Έ λ“± λ°μ΄ν„°λ² μ΄μŠ€ κ΄€λ ¨ 섀정을 μ§€μ •ν•œλ‹€.
  2. μ„œλ²„ ꡬ성: μ„œλ²„ 포트, μ½˜ν…μŠ€νŠΈ 경둜, μ„Έμ…˜ νƒ€μž„μ•„μ›ƒ λ“± μ„œλ²„ κ΄€λ ¨ 섀정을 μ •μ˜ν•œλ‹€.
  3. λ‘œκΉ… μ„€μ •: 둜그 μˆ˜μ€€, 둜그 파일 κ²½λ‘œμ™€ 같은 λ‘œκΉ… 섀정을 κ΄€λ¦¬ν•œλ‹€.
  4. μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ§€κ°œλ³€μˆ˜: μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ‚΄λΆ€μ—μ„œ μ‚¬μš©ν•  λ§€κ°œλ³€μˆ˜λ₯Ό μ •μ˜ν•˜μ—¬ μ½”λ“œμ—μ„œ μ°Έμ‘°ν•  수 있게 ν•œλ‹€.
  5. μŠ€ν”„λ§ λΆ€νŠΈ μžλ™ ꡬ성: μŠ€ν”„λ§ λΆ€νŠΈμ˜ μžλ™ ꡬ성에 영ν–₯을 λ―ΈμΉ˜λŠ” 속성을 μ‘°μ •ν•œλ‹€.
  6. ν”„λ‘œνŒŒμΌ 관리: 개발, ν…ŒμŠ€νŠΈ, ν”„λ‘œλ•μ…˜ λ“±μ˜ λ‹€λ₯Έ ν™˜κ²½μ— μ ν•©ν•œ 섀정을 μ •μ˜ν•˜κ³  μ μš©ν•œλ‹€.
  7. κ΅­μ œν™” 및 지역화 μ„€μ •: λ‹€μ–‘ν•œ 지역 μ„€μ •κ³Ό λ©”μ‹œμ§€ μ†ŒμŠ€λ₯Ό 톡해 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ κ΅­μ œν™”λ₯Ό μ§€μ›ν•œλ‹€.
  8. λ³΄μ•ˆ μ„€μ •: μŠ€ν”„λ§ μ‹œνλ¦¬ν‹° μ„€μ • λ“± λ³΄μ•ˆ κ΄€λ ¨ ν”„λ ˆμž„μ›Œν¬μ˜ 섀정을 ν¬ν•¨ν•œλ‹€.
  9. μ™ΈλΆ€ μ„œλΉ„μŠ€ 연동: 메일 μ„œλ²„ μ„€μ •, μ†Œμ…œ 둜그인 정보, API ν‚€ λ“± μ™ΈλΆ€ μ„œλΉ„μŠ€μ™€μ˜ 연동에 ν•„μš”ν•œ 정보λ₯Ό ν¬ν•¨ν•œλ‹€.

 

μŠ€ν”„λ§ λΆ€νŠΈλ₯Ό μ‚¬μš©ν•˜λŠ” ν”„λ‘œμ νŠΈμ—μ„œλŠ” 이 νŒŒμΌμ„ 톡해 μ„ μ–Έμ μœΌλ‘œ 섀정을 κ΄€λ¦¬ν•˜λ©°, src/main/resources 디렉토리 μ•„λž˜μ— μœ„μΉ˜ν•œλ‹€. application.properties λŒ€μ‹  YAML ν˜•μ‹μ˜ application.yml νŒŒμΌμ„ μ‚¬μš©ν•˜λŠ” 것도 κ°€λŠ₯ν•˜λ‹€.

 

μŠ€ν”„λ§ μ‚¬μ΄νŠΈμ—μ„œ application.properties 파일 λ˜λŠ” application.yml 에 μ‚¬μš©λ˜λŠ” Common Application Properties 듀을 확인할 수 μžˆλ‹€.

 

@Value

μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬μ—μ„œ @Value μ–΄λ…Έν…Œμ΄μ…˜μ€ ν”„λ‘œνΌν‹° 파일, ν™˜κ²½ λ³€μˆ˜, μ–΄λ…Έν…Œμ΄μ…˜μ— λͺ…μ‹œλœ κΈ°λ³Έκ°’ λ“±μ—μ„œ 값을 μ£Όμž…λ°›κΈ° μœ„ν•΄ μ‚¬μš©λœλ‹€. 이 μ–΄λ…Έν…Œμ΄μ…˜μ€ ν•„λ“œ 레벨, λ©”μ†Œλ“œ νŒŒλΌλ―Έν„° 레벨, 그리고 μƒμ„±μž νŒŒλΌλ―Έν„° λ ˆλ²¨μ— 적용될 수 μžˆλ‹€. μ£Όμž…ν•˜κ³ μž ν•˜λŠ” κ°’μ˜ μΆœμ²˜λŠ” λ¦¬ν„°λŸ΄ κ°’, ν”„λ‘œνΌν‹° 파일, μ‹œμŠ€ν…œ ν”„λ‘œνΌν‹°, ν™˜κ²½ λ³€μˆ˜ 등이 될 수 μžˆλ‹€.

 

μ‚¬μš© μ˜ˆμ‹œλŠ” λ‹€μŒκ³Ό κ°™λ‹€:

@Component
public class SomeClass {

    @Value("${some.property.name}")
    private String propertyValue;

    @Value("${some.missing.property:default value}")
    private String propertyWithDefaultValue;

    @Value("#{systemProperties['some.system.property']}")
    private String systemPropertyValue;

    // μƒμ„±μžμ—μ„œμ˜ μ‚¬μš© μ˜ˆμ‹œ
    public SomeClass(@Value("${some.constructor.property}") String constructorValue) {
        // ...
    }
}

μœ„μ˜ μ˜ˆμ‹œμ—μ„œλŠ” λ‹€μŒκ³Ό 같은 λ°©λ²•μœΌλ‘œ @Value μ–΄λ…Έν…Œμ΄μ…˜μ„ μ‚¬μš©ν•œλ‹€:

  1. ν”„λ‘œνΌν‹° νŒŒμΌμ—μ„œ κ°’ μ£Όμž…: @Value("${some.property.name}")λŠ” ν”„λ‘œνΌν‹° νŒŒμΌμ— μ •μ˜λœ some.property.name 킀에 ν•΄λ‹Ήν•˜λŠ” 값을 propertyValue ν•„λ“œμ— μ£Όμž…ν•œλ‹€.
  2. 기본값을 가진 ν”„λ‘œνΌν‹°: @Value("${some.missing.property:default value}")λŠ” some.missing.property 킀에 ν•΄λ‹Ήν•˜λŠ” 값이 없을 경우 default valueλ₯Ό propertyWithDefaultValue ν•„λ“œμ— μ£Όμž…ν•œλ‹€.
  3. μ‹œμŠ€ν…œ ν”„λ‘œνΌν‹°μ—μ„œ κ°’ μ£Όμž…: @Value("#{systemProperties['some.system.property']}")λŠ” μ‹œμŠ€ν…œ ν”„λ‘œνΌν‹°μ—μ„œ some.system.property 킀에 ν•΄λ‹Ήν•˜λŠ” 값을 systemPropertyValue ν•„λ“œμ— μ£Όμž…ν•œλ‹€.
  4. μƒμ„±μž νŒŒλΌλ―Έν„°λ‘œ κ°’ μ£Όμž…: μƒμ„±μž νŒŒλΌλ―Έν„°μ— @Value μ–΄λ…Έν…Œμ΄μ…˜μ„ μ‚¬μš©ν•˜μ—¬ ν”„λ‘œνΌν‹° 값을 μ£Όμž…ν•  μˆ˜λ„ μžˆλ‹€.

 

@Value μ–΄λ…Έν…Œμ΄μ…˜μ„ μ‚¬μš©ν•  λ•Œ μ£Όμ˜ν•΄μ•Ό ν•  점은 μ£Όμž…ν•˜λ €λŠ” 값이 ν”„λ‘œνΌν‹° νŒŒμΌμ— 없을 경우 μ—λŸ¬κ°€ λ°œμƒν•  수 μžˆλ‹€λŠ” 것이닀. κ·ΈλŸ¬λ‚˜ 기본값을 μ œκ³΅ν•¨μœΌλ‘œμ¨ μ΄λŸ¬ν•œ 문제λ₯Ό 방지할 수 μžˆλ‹€. λ˜ν•œ, μŠ€ν”„λ§ ν‘œν˜„ μ–Έμ–΄ (SpEL)을 μ‚¬μš©ν•˜μ—¬ 보닀 λ³΅μž‘ν•œ κ°’μ˜ μ£Όμž…λ„ κ°€λŠ₯ν•˜λ‹€.

 

 

 

ν•¨κ»˜ 보면 쒋은 링크

https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html

 

Common Application Properties

 

docs.spring.io

https://docs.spring.io/spring-framework/reference/core/beans/annotation-config/value-annotations.html

 

Using @Value :: Spring Framework

A default lenient embedded value resolver is provided by Spring. It will try to resolve the property value and if it cannot be resolved, the property name (for example ${catalog.name}) will be injected as the value. If you want to maintain strict control o

docs.spring.io

 

728x90