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의 적합한 활용 상황
- 간단한 어플리케이션의 경우
- application.properties는 간결하고 직관적인 구조로 되어있어 작은 규모의 어플리케이션에 적합하다. 이 파일 형식은 심플한 설정이 필요할 때 가장 좋은 선택이 될 수 있다.
- application.properties는 간결하고 직관적인 구조로 되어있어 작은 규모의 어플리케이션에 적합하다. 이 파일 형식은 심플한 설정이 필요할 때 가장 좋은 선택이 될 수 있다.
- 구성이 자주 바뀌지 않는 환경
- 설정이 복잡하지 않고 변경의 빈도가 적은 경우, application.properties의 평면적인 구조가 유지 관리에 용이하다. 새로운 설정 추가나 기존 설정 변경이 간단해지므로, 빠른 업데이트가 필요 없는 환경에서 유용하다.
- 설정이 복잡하지 않고 변경의 빈도가 적은 경우, application.properties의 평면적인 구조가 유지 관리에 용이하다. 새로운 설정 추가나 기존 설정 변경이 간단해지므로, 빠른 업데이트가 필요 없는 환경에서 유용하다.
- 계층적 구조가 필요 없는 경우
- 프로젝트가 단순하고 설정 요소가 많지 않다면, 계층적 구조의 이점이 덜 중요해진다. 이런 상황에서는 application.properties의 단순한 구조가 더 효과적일 수 있다.
application.yml의 적합한 활용 상황
- 복잡한 구성이 필요한 애플리케이션
- 여러 모듈이나 복잡한 설정을 가진 어플리케이션에서 application.yml은 그 구조를 명확하게 표현하는 데 도움을 준다. YAML 파일의 계층적 구조는 복잡한 설정을 쉽게 관리하고 이해하는 데 유리하다.
- 여러 모듈이나 복잡한 설정을 가진 어플리케이션에서 application.yml은 그 구조를 명확하게 표현하는 데 도움을 준다. YAML 파일의 계층적 구조는 복잡한 설정을 쉽게 관리하고 이해하는 데 유리하다.
- 다양한 환경에서의 설정 관리
- 프로덕션, 개발, 테스트 등 다양한 환경에 대한 설정을 효과적으로 구분하고 관리해야 할 때, YAML의 계층적 구조가 큰 장점을 제공한다. 각 환경에 맞는 설정을 분리하여 관리할 수 있어, 보다 유연한 환경 설정이 가능하다.
- 프로덕션, 개발, 테스트 등 다양한 환경에 대한 설정을 효과적으로 구분하고 관리해야 할 때, YAML의 계층적 구조가 큰 장점을 제공한다. 각 환경에 맞는 설정을 분리하여 관리할 수 있어, 보다 유연한 환경 설정이 가능하다.
- 계층적이고 구조화된 설정이 필요한 경우
- 복잡한 프로젝트 구조와 여러 설정이 필요한 경우, 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 기초 > Spring 설정' 카테고리의 다른 글
Gradle: Implementation과 RuntimeOnly의 차이점 및 활용 방법 (0) | 2023.12.11 |
---|---|
[Spring] Gradle 이해하기 (0) | 2023.11.08 |
[Spring] Maven이란? (0) | 2023.11.08 |
Spring Boot: Gradle 버전 확인하기 (0) | 2023.10.26 |
Spring 환경설정: Xml과 @Configuration의 차이점 (0) | 2023.08.09 |