본문 바로가기
프로그래밍/Spring Boot

[SpringBoot] application.properties를 yml로 교체하기

by 카프카뮈 2021. 8. 31.

이 글은 다음 목적을 가지고 작성되었다.

  • YAML이 무엇인지 알아본다.
  • 스프링에서 YAML을 어떻게 활용할 수 있는지 알아본다.
  • configuration 파일을 yml 파일로 교체해본다.

YAML

YAMLYAML Ain't Markup Language 라는 의미로, 'YAML은 마크업 언어가 아니다'라는 재귀적인 의미를 가진다. 

마크업 언어가 아니면 YAML은 무슨 언어라는 것일까? 일단 공식 웹페이지에 가보자.

 

The Official YAML Web Site

 

yaml.org

공식 웹페이지에서는 YAML을 다음과 같이 정의한다.

YAML is a human friendly data serialization
standard for all programming languages.

 

해석하자면 다음과 같다: YAML은 인간 친화적이며 모든 프로그래밍 언어를 위한 데이터 직렬 표준이다!

XML이 확장 가능한 마크업 언어(eXtensible Markup Language)를 의미하는 데에 비해, YAML은 데이터를 표현하고 다양한 언어에 전달하여 직렬화하는 데에 목표가 있다는 점에 주의하면 되겠다.

그리고 YAML 파일은 확장자로 .yml을 사용한다. 혼동할까봐 기재해둔다.


YAML의 간결함

만약에 XML로 어떤 데이터를 전달한다고 가정해 보자.

<?xml version="1.0" encoding="UTF-8" ?>
<root>
  <version> v1 </version>
  <metadata>
    <name> kafka </name>
    <email> kafka@gmail.com </email>
  </metadata>
</root>

간단하게 루트 아래에 버전정보와 메타데이터가 있고, 그 안에 이름과 이메일이 존재한다.

그런데 겨우 서너가지 데이터를 전달하는데 벌써 가독성이 많이 떨어진다. 

그렇다면 JSON으로 써보면 어떨까? 요새는 보통 JSON으로 서버에 요청/응답을 주고받으니까!

{
  "version":"v1",
  "metadata": {
    "name":"kafka",
    "email":"kafka@gmail.com"
  }
}

그나마 조금 간결해졌다!

그러면 여기에서, 한번 YAML 파일, 즉 yml 파일로 위의 데이터를 표현해 보자.

version: v1
metadata:
    name: kafka
    email: kafka@gmail.com

엄청나게 간결해 졌다! 

불필요한 요소들이 전부 삭제되었고, 한 요소 아래의 하위 요소라면 들여쓰기만으로 간결히 표시할 수 있다.

세 가지 형식을 비교해 보았을 때, yml이 가지는 강점이 더욱 부각된다고 할 수 있다.

  • 만약 YAML이 Array, Hash 등을 어떻게 표현하는지 더 알고 싶다면 위키피디아 링크의 예시를 참조!

Spring 프로젝트에 YAML 적용하기

이제 Spring 프로젝트에 YAML을 적용해 보자!

우리는 먼저, .properties로 표현되는 파일들을 대체하려고 한다.

.properties는 자바 관련 기술을 사용하는 경우 응용 프로그램의 구성 가능한 파라미터를 저장하는데에 사용된다.

예를 들어볼까? 우리에게 제일 익숙한 application.properties를 보자.

# application.properties
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=create

이 properties 파일은 예전에 하던 프로젝트에서 가져온 파일이다.

application.properties의 경우 /src/main/resources 아래에 존재하면 자동적으로 감지된다.

내용을 보면, spring jpa나 spring h2의 설정값 등을 여기에 기재해 두는 것을 알 수 있다.

 

그런데, 위 파일을 보면 여러 가지 문제점이 보인다.

  • 같은 부모 디렉토리를 가지는 파라미터들이 있는데, 그 탓에 중복된 코드가 길어진다.
  • 같은 이유로, 파라미터 간의 관계를 알아보기가 힘들다.
  • 한눈에 알아보기가 힘들다.

이제 한 번, application.properties를 application.yml로 교체해 보자.

spring:
  h2:
    console:
      path: /h2-console
      enabled: true
  datasource:
    url: jdbc:h2:mem:testdb
    driver-class-name: org.h2.Driver
    username: sa
  jpa:
    properties:
      hibernate:
        format_sql: true
    show-sql: true
    generate-ddl: true

말도 안되게 간결해졌다!

  • 일단 중복된 코드가 모두 삭제되어 간결해졌다.
  • 각각의 인자들이 어떻게 관계를 맺고 있는지 확인하기 편해졌다.
  • 인자의 깊이 등을 직관적으로 알 수 있다.

게다가, 스프링은 yml 파일 역시 자동으로 인식하므로 별도의 설정은 필요하지 않다.

아무래도 바꾸는 쪽이 훨씬 편하다는 것. 장기적으로는 모든 .properties 파일을 .yml로 고치는 걸 추천한다.


원래는 application.properties를 yml 파일로 교체한 이슈에 대해 소개하려고 쓴 글이었다.

그런데 쓰다 보니, 나도 잘 몰라서 yaml, xml, json, .properties까지 정의만 한참 찾았던 것 같다.

아무쪼록, 간결한 프로젝트 유지에 도움이 되시길 바란다.

 

더 자세한 세부 설정이 필요하다면, 아래 글을 참조하시길.

 

잘못된 내용이 있다면 댓글 부탁드립니다.

반응형

댓글