교육/코드스테이츠
[26일차] yaml파일 작성
nooh_ij
2023. 1. 2. 13:26
Yaml
yaml은 xml과 json 포맷과 같이 타 시스템 간에 데이터를 주고받을 때 약속된 포맷(규칙)이 정의되어있는 또 하나의 파일 형식이라고 보면 된다.
- 다만 좀더 인간 친화적으로 작성해 가독성을 높이는 쪽으로 무게를 두어 고급 컴퓨터 언어에 친화적이다.
- json과 달리 주석도 쓸수 있으며, 간결한 문법으로 같은 데이터량이라도 코드길이를 많이 줄일수 있다.
- yaml은 주로 Doker Compose, Kubernetes, Flutter, Spring boot 프로젝트에서 설정파일을 정의할때 자주 애용된다.
- YAML이 JSON 보다 좀 더 복잡하기 때문에 파싱하고 생성하는데 YAML이 더 느리다.
웹에서 데이터 통신을 위해 JSON을 많이 사용하고, reference를 정의할때 복잡한 object 구조를 표현 하기 위해 YAML이 적합하다고 보면 된다.
YAML 문법 정리
- yaml은 띄어쓰기로 데이터 구분을 한다.
- Key: Value는 콜론을 기준으로 표기하며(:) 뒤에 띄어쓰기를 한번 해줘야 한다
- 콜론(:) 뒤에 공백이 없으면 하나의 스트링으로 인식되어, 문법 오류가 나타나게 된다
- 콤마 표기 안함
- 중괄호로 계층 구조를 표현하는 JSON과 달리, YAML은 파이썬과 같이 들여쓰기로 계층 구조를 표현하기 때문에 들여쓰기 유무는 매우 중요하다. 들여쓰기는 기본적으로 2칸 혹은 4칸을 지원한다.
- YAML을 쓸 때는 큰 따옴표, 작은 따옴표를 안 써도 자동으로 숫자와 문자열로 인식 된다. 그런데 만일 "쌍점 : "이 들어간 문자열의 경우 무조건 따옴표로 둘러쌓야 제대로 인식된다. ex) "1:2"
- YAML에서의 배열을 표현할 때는 하이픈(-)으로 시작하는 하위 엘리먼트로 표현하며 반드시 하이픈(-) 뒤에 띄어쓰기를 써주어야 리스트 인식이 된다. 하이픈(-) 대신, 일반적인 배열 표현법 같이 대괄호로 리스트를 한줄로 표현도 가능하다. ex) ingredients: [닭, 튀김가루, 자바소스]
- Boolean 표현은 데이터 부분에 yes, no, true, false 를 지정하면 boolean 값으로 인식된다. 추가적으로 대문자 소문자를 가리지 않는다. 만약 yes나 no를 문자열 값으로서 전달하고자 한다면 따옴표로 묶어주어야 한다.
- 하이픈(-) 뒤에 key: value 구조가 온다면 이것은 객체를 포함한 배열, 그냥 데이터가 바로 온다면 단순 원소 배열이라고 인식하면 된다
ingredients: # 단일 원소 배열
- 닭
- 튀김가루
- 자바소스
ingredients2: # 객체 원소를 포함한 배열
- animal: 닭
- spice: 튀김가루
- source: 자바소스
Yaml 작성 연습
test1:
Car:
Color: Blue
Model:
Name: Cyber Truck
Year: 2022
Fuel: Electric
Price: $100,000

test2:
Version: 2012-10-17
Statement:
- Effect: Allow
Action:
- ec2:*
- elasticloadbalancing:*
- route53:*
- autoscaling:*
- cloudwatch:*
- SNS:*
Resource:
- "*"
- Effect: Allow
Action:
- s3:*
Resource:
- arn:aws:s3:::travis-terraform-state
- arn:aws:s3:::travis-terraform-state/*
- arn:aws:s3:::travis-shared-1-registry-images
- arn:aws:s3:::travis-shared-1-registry-images/*
- arn:aws:s3:::travis-shared-2-registry-images
- arn:aws:s3:::travis-shared-2-registry-images/*
- Effect: Allow
Action:
- iam:GetUser
Resource:
- arn:aws:iam::341288657826:user/igor-terraform
- Effect: Allow
Action:
- iam:*
Resource:
- arn:aws:iam::341288657826:role/*
- arn:aws:iam::341288657826:user/registry-shared-1
- arn:aws:iam::341288657826:user/registry-shared-2
- arn:aws:iam::*:user/cyclist-*
- arn:aws:iam::*:user/worker-*
- arn:aws:iam::*:user/build-trace-*
- Effect: Allow
Action:
- dynamodb:*
Resource:
- arn:aws:dynamodb:us-east-1:341288657826:table/travis-terraform-state

test3:
name: Node.js CI
on:
push:
branches: main
pull_request:
branches: main
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Use Node.js
uses: actions/setup-node@v1
with:
always-auth: true
node-version: 12.x
registry-url: https://registry.npmjs.org
scope: "@octocat"
- name: Install dependencies
run: npm ci
env:
NODE_AUTH_TOKEN: "${{secrets.NPM_TOKEN}}"
================================================================
참고 문서
https://www.atatus.com/glossary/yaml/
YAML: Definition, How Does It Work, Features, and More
YAML is a programming language that is frequently combined with a wide range of other languages and is mostly used for creating configuration files.
www.atatus.com