[Spring] yml vs properties 설정파일 비교

2023. 11. 8. 02:24·Spring/Spring 설정
반응형
 
 

application.yml VS application.properties 이 두가지를 비교해 보자

📌 서론

Spring Boot 프로젝트에서 가장 중요한 부분 중 하나는 설정 파일이다. 처음 프로젝트를 만들면 application.properties가 있는데 대부분은 이 파일을 application.yml로 변경해서 사용한다. 이 설정 파일들에 대해서 알아보자

 

1. application.properties

1-1. 형식

  • Key-Value 쌍으로 구성된, properties 파일이다.
  • 각 설정은 새로운 라인에 위치하고, = 기호를 사용해 키와 값을 구분한다.

1-2. 특징

  • 단순성: 구조가 매우 간단해서 작고 단순한 애플리케이션에 적합하다.
  • 평면 구조: 계층적 구조를 지원하지 않아 복잡한 구성을 표현하기 어렵다.
  • 주석 사용: #을 이용해 주석을 추가할 수 있어, 설정에 대한 설명을 넣기 쉽다.

 

1-3. 설정코드 예시

server.port=8080
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=admin
spring.datasource.password=secret
logging.level.org.springframework.web=DEBUG

 

 

2. application.yml

형식

  • YAML은 "YAML Ain't Markup Language"의 약자로, 데이터를 계층적으로 표현하는 데 유용한 데이터 직렬화 언어이다.

특징

  • 계층적 구조: 설정이 계층적으로 구성되어 있어, 복잡한 설정을 더욱 명확하게 표현할 수 있다.
  • 가독성: 들여 쓰기를 이용해 구조를 나타내므로, 보다 직관적으로 이해할 수 있다.
  • 다양성: 데이터 타입을 다양하게 표현할 수 있어, 리스트나 객체 등 복잡한 데이터 구조도 쉽게 표현할 수 있다.

 

설정코드 예시

server:
  port: 8080
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb
    username: admin
    password: secret
logging:
  level:
    org.springframework.web: DEBUG

 

 

3. 활용 상황: application.properties vs application.yml

application.properties의 적합한 활용 상황

  1. 간단한 어플리케이션의 경우
    • application.properties는 간결하고 직관적인 구조로 되어있어 작은 규모의 어플리케이션에 적합하다. 이 파일 형식은 심플한 설정이 필요할 때 가장 좋은 선택이 될 수 있다.

  2. 구성이 자주 바뀌지 않는 환경
    • 설정이 복잡하지 않고 변경의 빈도가 적은 경우, application.properties의 평면적인 구조가 유지 관리에 용이하다. 새로운 설정 추가나 기존 설정 변경이 간단해지므로, 빠른 업데이트가 필요 없는 환경에서 유용하다.

  3. 계층적 구조가 필요 없는 경우
    • 프로젝트가 단순하고 설정 요소가 많지 않다면, 계층적 구조의 이점이 덜 중요해진다. 이런 상황에서는 application.properties의 단순한 구조가 더 효과적일 수 있다.

 

application.yml의 적합한 활용 상황

  1. 복잡한 구성이 필요한 애플리케이션
    • 여러 모듈이나 복잡한 설정을 가진 어플리케이션에서 application.yml은 그 구조를 명확하게 표현하는 데 도움을 준다. YAML 파일의 계층적 구조는 복잡한 설정을 쉽게 관리하고 이해하는 데 유리하다.

  2. 다양한 환경에서의 설정 관리
    • 프로덕션, 개발, 테스트 등 다양한 환경에 대한 설정을 효과적으로 구분하고 관리해야 할 때, YAML의 계층적 구조가 큰 장점을 제공한다. 각 환경에 맞는 설정을 분리하여 관리할 수 있어, 보다 유연한 환경 설정이 가능하다.

  3. 계층적이고 구조화된 설정이 필요한 경우
    • 복잡한 프로젝트 구조와 여러 설정이 필요한 경우, application.yml의 계층적 구조는 이를 체계적으로 조직하는 데 큰 도움이 된다. 구성 요소 간의 관계를 명확하게 나타내고, 설정을 더 직관적으로 표현할 수 있다.

 

 

4. properties와 yml 비교하기: 가독성, 편집 용이성, 계층 구조

application.properties:

  • 전통적이고 단순한 형식으로 구성된다. 각 설정이 별도의 라인에 위치해 있어, 특히 작은 규모의 프로젝트에서 가독성이 좋다. 이 형식은 직관적이며, 설정을 쉽게 파악할 수 있게 해준다.

  • 단순하고 평면적인 구조로 인해 새로운 설정을 추가하거나 기존 설정을 변경하기가 상대적으로 쉽다. 초보자들이 접근하기에도 부담이 적으며, 복잡한 구문을 기억할 필요가 없다.

  • 평면적 구조로, 계층적인 표현에는 한계가 있다. 단순한 설정 관리에는 유리하지만, 더 복잡한 구조를 표현하는 데에는 제한적이다.

 

application.yml:

  • 계층적인 구조를 갖고 있어, 설정 간의 관계가 명확하게 드러난다. 들여 쓰기와 구조화된 형식은 복잡한 설정의 상호 관계를 한눈에 이해하기 용이하게 만들어준다.

  • 계층 구조와 들여쓰기는 익숙해져야 하는 부분이지만, 한 번 익숙해지면 복잡한 구성을 효과적으로 관리할 수 있다. 들여쓰기 오류에 주의해야 하지만, 익숙해진다면 복잡한 설정도 쉽게 편집할 수 있다.

  • 계층적 구조를 지원하며, 이를 통해 복잡한 설정을 명확하고 구조적으로 표현할 수 있다. 특히, 큰 규모의 프로젝트나 다양한 환경 설정이 필요한 경우에 효과적이다.

 

5. 실제 예시

application.properties

  • 이 파일에서는 단순한 키-값 쌍을 사용하여 데이터베이스 연결 정보를 설정한다. 각 설정은 새로운 라인에 위치하며, 간단하게 입력할 수 있다.
# MySQL 데이터베이스 연결을 위한 기본 설정
spring.datasource.url=jdbc:mysql://localhost:3306/db
spring.datasource.username=user
spring.datasource.password=pass

# 추가적인 데이터베이스 설정 (예시)
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.hibernate.ddl-auto=update

 

application.yml

  • YAML 형식에서는 계층적 구조를 사용해 설정을 정의한다. 들여 쓰기를 통해 설정 간의 관계를 명확하게 나타낼 수 있고, 복잡한 구성을 좀 더 체계적으로 관리할 수 있다.
# MySQL 데이터베이스 연결을 위한 계층적 설정
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/db
    username: user
    password: pass
    driver-class-name: com.mysql.cj.jdbc.Driver
  jpa:
    hibernate:
      ddl-auto: update

 

📌 결론

이렇게 properties와 yaml 방식을 통해서 SpringBoot의 설정파일을 작성하는 방식에 대해서 알아봤다.
사실 이건 둘 중 어떤 방식을 선택해서 사용해도 문제 될 것이 없지만 요즘에는 항상 yml로 사용하는 것 같다.
내가 사용했을 때 느낀 점은 yml을 사용해서 계층형 구조로 작성하는 것이 훨씬 보기 편하고 설정하기도 쉬웠다. 그래도 가끔은 Spring이 자체적으로 프로젝트를 만들어 줄 때 properties로 생성해 주는 이유가 있을까?라는 고민을 한다.
사실 이 글도 그렇게 작성하기 시작했다.
이러한 설정 파일의 확장자 타입에 대한 내용이 사소할지 몰라도 나중에 개발할 때 어떤 것을 선택해서 사용하게 될지 모르니 둘 다 알아두면 굉장히 유용할 것이라고 생각한다.

 

 

SpringBoot의 tomcat에 환경 변수를 적용시켜 보자👇🏻👇🏻

 

Spring Boot에서 내장 Tomcat 환경변수 설정하기 (보안)

SpringBoot에서 Tomcat에 환경변수를 설정해 보자 스프링부트를 사용하다 보면 application.properties나 application.yml에 환경변수(api키, db연결정보)를 적은 채로 github에 그대로 push 해서 코드를 노출하는 경

curiousjinan.tistory.com

 

반응형

'Spring > Spring 설정' 카테고리의 다른 글

[Spring] Maven이란?  (0) 2023.11.08
Spring Boot: Gradle 버전 확인하기  (0) 2023.10.26
Spring 환경설정: Xml과 @Configuration의 차이점  (0) 2023.08.09
Spring Boot: Tomcat 환경변수 설정  (0) 2023.08.08
[Spring Boot] Properties와 YAML 설정 파일 작성 가이드  (0) 2023.08.07
'Spring/Spring 설정' 카테고리의 다른 글
  • [Spring] Maven이란?
  • Spring Boot: Gradle 버전 확인하기
  • Spring 환경설정: Xml과 @Configuration의 차이점
  • Spring Boot: Tomcat 환경변수 설정
Stark97
Stark97
dig04059@gmail.com 링크드인 소통도 환영합니다!
  • Stark97
    오늘도 개발중입니다
    Stark97
  • 전체
    오늘
    어제
    • 분류 전체보기 (257)
      • 개발지식 (20)
        • 스레드(Thread) (8)
        • WEB, DB, GIT (3)
        • 디자인패턴 (8)
      • AI (7)
      • JAVA (21)
      • Spring (88)
        • Spring 기초 지식 (35)
        • Spring 설정 (6)
        • JPA (7)
        • Spring Security (17)
        • Spring에서 Java 활용하기 (8)
        • 테스트 코드 (15)
      • 아키텍처 (6)
      • MSA (15)
      • DDD (13)
      • gRPC (9)
      • Apache Kafka (19)
      • DevOps (23)
        • nGrinder (4)
        • Docker (1)
        • k8s (1)
        • 테라폼(Terraform) (12)
      • AWS (32)
        • ECS, ECR (14)
        • EC2 (2)
        • CodePipeline, CICD (8)
        • SNS, SQS (5)
        • RDS (2)
      • notion&obsidian (3)
      • 채팅 서비스 (1)
      • 팀 Pulse (0)
  • 링크

    • notion기록
    • 깃허브
    • 링크드인
  • hELLO· Designed By정상우.v4.10.0
Stark97
[Spring] yml vs properties 설정파일 비교
상단으로

티스토리툴바