yml ? properties?

좐쓰 ㅣ 2024. 5. 23. 10:56

반응형
 Spring boot 프로젝트를 하다 보면 application.yml, application.properties 파일에 프로젝트 설정 코드를 입력하게 된다. 
둘다 같은 역할을 수행하지만 입력하는 방법에서 조금 차이를 보인다. 


 

properties 가 뭔데?

 

위키백과에 정의된 properties의 의미

 

  1. 응용 프로그램의 구성 가능한 파라미터들을 저장하기 위해 Java 관련 기술을 사용하는 파일들을 위한 파일 확장
  2. 각 파라미터는 문자열들의 일부로 저장되며, 문자열은 파라미터의 이름(Key) 을 저장하며, 다른 하나는 값 (Value) 을 저장
  3. .properties 의 각 줄은 하나의 프로퍼티를 저장
spring.profiles.active=${ACTIVE}
logging.level.org.springframework.web=INFO
#local
#spring.datasource.url=jdbc:mysql://xxx.xx.xxx.xx:3306/iliweb_test?rewriteBatchedStatements=true&profileSQL=true&logger=Slf4JLogger&maxQuerySizeToLog=999999
spring.datasource.username=logisticsbiz
spring.datasource.password=
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

#JPA
spring.jpa.database=mysql
spring.jpa.show-sql=true

#Port
server.port=80

YAML 이란?

 

Yet Another Markup Language 의 약자, 사람이 읽을 수 있는 데이터 직력화 언어이다.

최근에는 YAML Ain't Markup Language 라고도 한다 아무튼 마크업 언어가 아니란다;;

 

YAML의 기본 자료형

  • 스칼라(Scalar) : String 혹은 숫자
  • 시퀀스(Sequence): 배열 혹은 리스트
  • 매핑(Mapping): 해시 혹은 딕셔너리, key-value 쌍

Collections

  • block Sequence는 각각의 entry 마다 dash + space bar(공백)으로 구성
  • Key-Value의 매핑은 :으로 구분
  • 문서의 시작('...' 삽입)과 끝('' 삽입)을 지정 할 수 있다 (선택 사항)
  • tab 키가 아닌 space bar 하나로 들여쓰기
  • key와 value 사이에 공백이 존재
  • 주석(Comment)은 '#' 태그를 달아서 사용합니다. 파이썬과 동일한 규칙
FaceBook:
 Profile:
    name : juhan
    job : developer
    name : inkoo
    job : undefind
    name : minhyeok
    job : teacher

 

어딘가 익숙한 이 구조는 yaml 형식이 json 의 불편함에서 기인했기 때문이다.

 

똑같은 설정 파일을 xml, json, yml 로 표현해보겠다.

 

1. xml

 

<?xml version="1.0" encoding="UTF-8" ?>
<root>
    <name>Rust</name>
    <on>
        <push>
            <branches>master</branches>
        </push>
        <pull_request>
            <branches>master</branches>
        </pull_request>
    </on>
    <env>
        <CARGO_TERM_COLOR>always</CARGO_TERM_COLOR>
    </env>
    <jobs>
        <build>
            <runs-on>ubuntu-latest</runs-on>
            <steps>
                <uses>actions/checkout@v2</uses>
            </steps>
            <steps>
                <name>Build</name>
                <run>cargo build --verbose</run>
            </steps>
            <steps>
                <name>Run tests</name>
                <run>cargo test --verbose</run>
            </steps>
        </build>
    </jobs>
</root>​

 

2. json 

 

{
    "name": "Rust",
    "on": {
        "push": {
            "branches": [
                "master"
            ]
        },
        "pull_request": {
            "branches": [
                "master"
            ]
        }
    },
    "env": {
        "CARGO_TERM_COLOR": "always"
    },
    "jobs": {
        "build": {
            "runs-on": "ubuntu-latest",
            "steps": [
                {
                    "uses": "actions/checkout@v2"
                },
                {
                    "name": "Build",
                    "run": "cargo build --verbose"
                },
                {
                    "name": "Run tests",
                    "run": "cargo test --verbose"
                }
            ]
        }
    }
}
​

 

 

3.yml

 

#!syntax yaml
name: Rust
on:
    push:
        branches: [master]
    pull_request:
        branches: [master]
env:
    CARGO_TERM_COLOR: always
jobs:
    build:
        runs-on: ubuntu-latest
        steps:
            - uses: actions/checkout@v2
            - name: Build
              run: cargo build --verbose
            - name: Run tests
              run: cargo test --verbose

 

 

단순히 길이가 짧은 것뿐만 아니라, 불필요한 따옴표나 기호 등이 사라져 가독성이 높기 때문에 사람이 읽거나 편집하기 쉽다.
또한 json과는 다르게 타입을 명시해 줄 수 있어 불필요한 실수를 피할 수 있다.

 

 

YAML 의 활용

  • Flutter : dart 패키지를 관리하기 위해 pubspec.yaml 에 설정을 저장한다.
  • GitHub, Docker, 쿠버네티스 등 devOps 툴
  • Spring Boot 설정 파일
  • OpenAPI
반응형