Home > Spring > πŸƒ[Spring] `application.yml`κ³Ό `application.properties`의 차이점.

πŸƒ[Spring] `application.yml`κ³Ό `application.properties`의 차이점.
Spring Framework

πŸƒ[Spring] application.ymlκ³Ό application.properties의 차이점.

Java λ°±μ—”λ“œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ application.ymlκ³Ό application.propertiesλŠ” λͺ¨λ‘ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ„€μ • 을 κ΄€λ¦¬ν•˜λŠ” 데 μ‚¬μš©λ˜λŠ” ꡬ성 νŒŒμΌμž…λ‹ˆλ‹€.

이 두 νŒŒμΌμ€ Spring Boot와 같은 ν”„λ ˆμž„μ›Œν¬μ—μ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ ν™˜κ²½ μ„€μ •, λ°μ΄ν„°λ² μ΄μŠ€ μ—°κ²°, 포트 번호, λ³΄μ•ˆ μ„€μ • 등을 μ •μ˜ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.

두 νŒŒμΌμ€ κΈ°λŠ₯적으둜 λΉ„μŠ·ν•˜μ§€λ§Œ ν˜•μ‹κ³Ό κ°€λ…μ„±μ—μ„œ 차이가 μžˆμŠ΅λ‹ˆλ‹€.

1️⃣ 차이점.

1. 파일 ν˜•μ‹.

  • application.properties
    • ν‚€-κ°’ 쌍 ν˜•μ‹μ˜ ꡬ성을 μ‚¬μš©ν•©λ‹ˆλ‹€.
    • 각 섀정은 ν•œ 쀄에 ν•˜λ‚˜μ”©, key=value ν˜•μ‹μœΌλ‘œ μž‘μ„±λ©λ‹ˆλ‹€.
  • application.yml
    • YAML ν˜•μ‹μ„ μ‚¬μš©ν•©λ‹ˆλ‹€.
    • YAML은 계측적 ꡬ쑰와 λ“€μ—¬μ“°κΈ°λ₯Ό 톡해 섀정을 μ •μ˜ν•˜λ©°, JSONκ³Ό μœ μ‚¬ν•œ λ°©μ‹μœΌλ‘œ 데이터λ₯Ό κ΅¬μ„±ν•©λ‹ˆλ‹€.

μ˜ˆμ‹œ

  • application.properties μ˜ˆμ‹œ
    server.port=8080
    spring.dataspurce.url=jdbc:mysql://localhost:3306/mydb
    spring.datasource.username=root
    spring.datasource.password=secret
    logging.level.org.springframework=DEBUG
    
  • application.yml μ˜ˆμ‹œ
    server:
      port: 8080
    spring:
      datasource:
          url: jdbc:mysql://localhost:3306/mydb
          username: root
          password: secret
    logging:
      level:
          org.springframework: DEBUG
    

2. 계측 ꡬ쑰 ν‘œν˜„.

  • application.properties
    • 각 μ„€μ • ν•­λͺ©μ€ 점 ν‘œκΈ°λ²•(dot natation) 을 μ‚¬μš©ν•˜μ—¬ 계측 ꡬ쑰λ₯Ό ν‘œν˜„ν•©λ‹ˆλ‹€.
      • 예λ₯Ό λ“€μ–΄, spring.datasource.url 처럼 점을 μ‚¬μš©ν•΄ μ€‘μ²©λœ 속성을 μ •μ˜ν•©λ‹ˆλ‹€.
  • application.yml
    • YAML은 λ“€μ—¬μ“°κΈ°λ₯Ό 톡해 계측적 ꡬ쑰λ₯Ό μžμ—°μŠ€λŸ½κ²Œ ν‘œν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    • 점 ν‘œκΈ°λ²• λŒ€μ‹  λ“€μ—¬μ“°κΈ°λ‘œ μ€‘μ²©λœ ꡬ쑰λ₯Ό ν‘œν˜„ν•©λ‹ˆλ‹€.

3. 가독성

  • application.properties
    • λͺ¨λ“  섀정이 ν•œ 쀄에 ν‚€-κ°’ 쌍으둜 ν‘œμ‹œλ˜λ―€λ‘œ κ°„λ‹¨ν•œ μ„€μ •μ—μ„œλŠ” 읽기 μ‰½μŠ΅λ‹ˆλ‹€.
    • κ·ΈλŸ¬λ‚˜ 계측적 데이터 ꡬ쑰λ₯Ό ν‘œν˜„ν•΄μ•Ό ν•  λ•ŒλŠ” 점 ν‘œκΈ°λ²•μ„ μ‚¬μš©ν•΄μ•Ό ν•˜λ―€λ‘œ, 섀정이 λ§Žμ•„μ§ˆ 수둝 읽기 μ–΄λ €μ›Œμ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.
  • application.yml
    • YAML은 λ“€μ—¬μ“°κΈ°λ₯Ό μ‚¬μš©ν•΄ 계측 ꡬ쑰λ₯Ό ν‘œν˜„ν•˜κΈ° λ•Œλ¬Έμ• , λ³΅μž‘ν•œ 섀정을 더 가독성 있게 ν‘œν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    • 섀정이 λ§Žκ±°λ‚˜ μ€‘μ²©λœ κ²½μš°μ—λ„ 더 λͺ…ν™•ν•˜κ²Œ ꡬ성할 수 μžˆμŠ΅λ‹ˆλ‹€.

4. 데이터 ν‘œν˜„μ˜ μœ μ—°μ„±.

  • application.properties
    • λ‹¨μˆœνžˆ ν‚€-κ°’ 쌍으둜 데이터 ν‘œν˜„μ΄ μ œν•œλ©λ‹ˆλ‹€.
    • λ°°μ—΄μ΄λ‚˜ λ³΅μž‘ν•œ 데이터 ꡬ쑰λ₯Ό ν‘œν˜„ν•  λ•ŒλŠ” μ—¬λŸ¬ 쀄에 걸쳐 점 ν‘œκΈ°λ²•μ„ μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.
  • application.yml
    • YAML은 λ°°μ—΄, 객체, μ€‘μ²©λœ ꡬ쑰λ₯Ό μ‰½κ²Œ ν‘œν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    • λ³΅μž‘ν•œ 데이터 ꡬ쑰λ₯Ό ν‘œν˜„ν•˜λŠ” 데 더 μœ μ—°ν•©λ‹ˆλ‹€.

λ°°μ—΄ ν‘œν˜„ μ˜ˆμ‹œ.

  • application.properties μ—μ„œ 배열을 ν‘œν˜„ν•˜λŠ” 방법.
    mylist[0]=item1
    mylist[1]=item2
    mylist[2]=item3
    
  • application.yml μ—μ„œ 배열을 ν‘œν˜„ν•˜λŠ” 방법.
    ```bash
    mylist:
    • item1
    • item2
    • item3
      ```

5. 주석.

  • application.properties
    • 주석은 # 기호둜 μ‹œμž‘ν•©λ‹ˆλ‹€.
    • 주석은 ν•œ 쀄에 μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • application.yml
    • 주석도 # 기호λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.
    • 주석을 μž‘μ„±ν•˜λŠ” 방식은 application.properties와 λ™μΌν•˜μ§€λ§Œ, YAML ν˜•μ‹μ—μ„œλŠ” μ—¬λŸ¬ 쀄에 걸친 주석을 μΆ”κ°€ν•˜κΈ°μ— 더 μžμ—°μŠ€λŸ½μŠ΅λ‹ˆλ‹€.

6. μ‚¬μš© μš©λ„.

  • application.properties
    • λ‹¨μˆœν•œ 섀정을 μ •μ˜ν•  λ•Œ μœ μš©ν•©λ‹ˆλ‹€.
    • 속성 μˆ˜κ°€ 적고 계측적 ꡬ쑰가 많이 ν•„μš”ν•˜μ§€ μ•Šμ€ 경우 더 직관적일 수 μžˆμŠ΅λ‹ˆλ‹€.
  • application.yml
    • λ³΅μž‘ν•œ 섀정을 μ •μ˜ν•  λ•Œ μ ν•©ν•©λ‹ˆλ‹€.
    • YAML은 λ°μ΄ν„°μ˜ 계측적 ꡬ쑰λ₯Ό μ‰½κ²Œ ν‘œν˜„ ν•  수 μžˆμ–΄, μ€‘μ²©λœ μ„€μ •μ΄λ‚˜ λ‹€μˆ˜μ˜ 섀정이 ν•„μš”ν•œ 경우 더 μ ν•©ν•©λ‹ˆλ‹€.

2️⃣ 선택 κΈ°μ€€

  • μž‘μ€ ν”„λ‘œμ νŠΈλ‚˜ λ‹¨μˆœν•œ μ„€μ •μ—λŠ” application.propertiesκ°€ 적합할 수 μžˆμŠ΅λ‹ˆλ‹€.
    • 점 ν‘œκΈ°λ²•μœΌλ‘œ κ°„λ‹¨νžˆ μ„€μ •ν•  수 있기 λ•Œλ¬Έμ— 직관적이고 λΉ λ₯΄κ²Œ 섀정을 μ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • λ³΅μž‘ν•œ ν”„λ‘œμ νŠΈλ‚˜ 닀쀑적인 섀정이 ν•„μš”ν•œ 경우, 특히 μ„€μ • λ‘œκΉ… 레벨 μ„€μ •, 닀쀑 ν™˜κ²½ 관리 λ“±μ˜ λ³΅μž‘ν•œ ꡬ성이 μš”κ΅¬λ  λ•ŒλŠ” application.yml이 더 μ ν•©ν•©λ‹ˆλ‹€.
    • YAML의 ꡬ쑰적 ν‘œν˜„ 덕뢄에 가독성과 μœ μ§€λ³΄μˆ˜μ„±μ΄ ν–₯μƒλ©λ‹ˆλ‹€.

3️⃣ μš”μ•½.

  • application.properties
    • λ‹¨μˆœν•œ ν‚€-κ°’ 쌍으둜 이루어진 μ„€μ • νŒŒμΌμž…λ‹ˆλ‹€.
    • 점 ν‘œκΈ°λ²•μ„ μ‚¬μš©ν•΄ 계측적 ꡬ쑰λ₯Ό ν‘œν˜„ν•˜λ©°, λ‹¨μˆœν•œ 섀정에 μ ν•©ν•©λ‹ˆλ‹€.
  • application.yml
    • YAML ν˜•μ‹μ˜ μ„€μ • 파일둜, 듀여쓰기와 계측적 ꡬ쑰λ₯Ό 톡해 λ³΅μž‘ν•œ 섀정을 보닀 직관적이고 가독성 있게 ν‘œν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    • λ³΅μž‘ν•œ ν”„λ‘œμ νŠΈμ—μ„œ μœ λ¦¬ν•©λ‹ˆλ‹€.

κ²°κ΅­, λ‘˜ λ‹€ λ™μΌν•œ κΈ°λŠ₯을 μˆ˜ν–‰ν•  수 μžˆμ§€λ§Œ, μ„€μ •μ˜ λ³΅μž‘λ„μ™€ 가독성 μš”κ΅¬μ— 따라 properties와 yml 쀑 μ ν•©ν•œ ν˜•μ‹μ„ 선택할 수 μžˆμŠ΅λ‹ˆλ‹€.