반응형
Spring boot 프로젝트를 하다 보면 application.yml, application.properties 파일에 프로젝트 설정 코드를 입력하게 된다.
둘다 같은 역할을 수행하지만 입력하는 방법에서 조금 차이를 보인다.
properties 가 뭔데?
위키백과에 정의된 properties의 의미
- 응용 프로그램의 구성 가능한 파라미터들을 저장하기 위해 Java 관련 기술을 사용하는 파일들을 위한 파일 확장
- 각 파라미터는 문자열들의 일부로 저장되며, 문자열은 파라미터의 이름(Key) 을 저장하며, 다른 하나는 값 (Value) 을 저장
- .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
반응형
'BE > Java' 카테고리의 다른 글
Spring Annotation - @RequiredArgsConstructor (0) | 2024.05.09 |
---|---|
Spring Security 6.1 이상 csrf 설정 방법 (0) | 2024.03.27 |
Spring JPA - update 로직 수행 (0) | 2024.03.26 |
[빡침주의] server application 설정 파일이 원복되는경우;; (1) | 2024.03.22 |
WebClient 로 외부 API 호출 시 301 에러 (0) | 2024.03.14 |