1. YAML이란?
▶ YAML (YML Ain't Markup Language)
- 자세한 내용은 위키 참조(위키를 참조하여 간략히 정리 하였다.) : https://ko.wikipedia.org/wiki/YAML
- XML, C, 파이썬, 펄, RFC2822에서 정의된 e-mail 양식에서 개념을 얻어 만들어진 '사람이 쉽게 읽을 수 있는' 데이터 직렬화 양식.
- YAML은 모든 데이터를 리스트, 해쉬, 스칼라 데이터의 조합으로 적절히 표현할 수 있다는 믿음을 가지고 만들어졌다.
문법은 상대적으로 이해하기 쉽고, 가독성이 좋도록 디자인되었으며, 고급 컴퓨터 언어에 적합하다.
또한 들여쓰기 및 XML의 특수기호를 사용하기 때문에, XML과 거의 비슷 핟.
- JSON은 yaml의 일종이다.
▶ 사용방법 및 Properties와 비교시 이점
1. 가독성이 좋다.
계층구조로 표현하여 가독성이 좋다. 또한 불필요한 소스의 중복도 제거 할 수 있다.
들여쓰기, 띄어쓰기로 구분하여 보기 편하다.
ex) properties
spring.datasource.driverClassName=net.sf.log4jdbc.sql.jdbcapi.DriverSpy
spring.datasource.url=jdbc:log4jdbc:mariadb://localhost:3306/test?characterEncoding=UTF-8&serverTimezone=UTC
spring.datasource.hikari.username=root
spring.datasource.hikari.password=qlalfqjsgh
spring.datasource.hikari.maximum-pool-size=10
ex) yaml
spring:
datasource:
driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
url: jdbc:log4jdbc:mariadb://localhost:3306/test?characterEncoding=UTF-8&serverTimezone=UTC
hikari:
username: root
password: qlalfqjsgh
maximum-pool-size: 10
2. 리스트 표현
- 여러 줄에 쓸 때에는 하이픈(-)으로 시작하는 한 줄에 하나의 요소를 표현한다.
- 한 줄에 모아 쓸 때에는 대괄호([])를 이용하며 쉼표로 각 요소를 구분한다.
ex) properties
my.servers[0]=dev.example.com
my.servers[1]=another.example.com
ex) yaml(1) - 여러줄 표현
my:
servers:
- dev.example.com
- another.example.com
ex) yaml(2) - 한줄 표현
my:
servers: [dev.example.com, another.example.com]
3. 주석
- 주석은 #으로 표시하며, 한 줄이 끝날 때까지 유효하다.
ex)
spring:
datasource: #db 접속 정보
driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
url: jdbc:log4jdbc:mariadb://localhost:3306/test?characterEncoding=UTF-8&serverTimezone=UTC
hikari: #hikari 설정 정보
username: root
password: qlalfqjsgh
maximum-pool-size: 10
4. SpringBoot Profile적용이 용이하다. (with "--- " 구분자)
- 한 파일 내에서 여러 파일을 사용하는 것처럼 분리가 가능하다.
- application.yml 파일 하나로 여러개의 yml을 생성 한것과 같이 처리 가능
1) properties
- application-{profile}.properties 형식으로 다음과 여러개의 파일을 생성하여 사용했다.
ex) application-{profile}.properties
application-local.properties
application-dev.properties
application-prod.properties
※ 참고
if no profiles are explicitly activated, then properties from application-default.properties are loaded.
- 프로파일을 설정하지않으면 application-default.properties 을 기본으로 사용하도록 한다.
2) yaml
ex) profiles를 선언하여 한 yaml파일 내에서 구분 가능
#local, dev, prod 공통 설정
application:
version: 1.0.0
title: bo
spring:
profiles:
active: local #profiles 선언하여 적용할 profile을 선택 한다.
thymeleaf:
view-names: thymeleaf/*
prefix: classpath:templates/
suffix: .html
cache: false
--- #local 환경
spring:
profiles: local
logging:
level:
root: debug
--- #dev 환경
spring:
profiles: dev
logging:
level:
root: info
--- #prod 환경
spring:
profiles: prod
server:
port: 9090
logging:
level:
root: error
5.단점
- @PropertySource 어노테이션으로 프로퍼티 값을 불러 올 수 없다.
- 해당 어노테이션을 사용 하려면 프로퍼티 파일을 사용해야된다.
> yaml을 프로퍼티에 적용하는 방법은 역시 공식 문서를 참고하도록 하자.
6.기타
- .properties나 .yml 파일은 Kebob case를 권장 한다.
The prefix value for the annotation must be in kebab case (lowercase and separated by -, such as acme.my-project.person).
Property | Note |
acme.my-project.person.first-name | Kebab case, which is recommended for use in .properties and .yml files. |
acme.myProject.person.firstName | Standard camel case syntax. (표준 카멜 케이스) |
acme.my_project.person.first_name | Underscore notation, which is an alternative format for use in .properties and .yml files. |
ACME_MYPROJECT_PERSON_FIRSTNAME | Upper case format, which is recommended when using system environment variables. (시스템 환경 변수 사용시) |
출처 및 참고
'수업자료 > Spring Boot' 카테고리의 다른 글
SpringBoot3 H2 FullCalendar 예제(7월 7일) (0) | 2023.07.07 |
---|---|
Boot와 React 연동하기(7월 5일) (0) | 2023.07.05 |
Spring Boot Webjars 사용하기(7월 4일) (0) | 2023.07.04 |
Spring Boot3 REST Service(7월 3일) (0) | 2023.07.03 |
Spring Boot3 파일 업로드하기(6월 30일) (0) | 2023.06.30 |