교육/코드스테이츠

[26일차] yaml파일 작성

nooh_ij 2023. 1. 2. 13:26

 

https://www.atatus.com/glossary/yaml/

Yaml

yamlxmljson 포맷과 같이 타 시스템 간에 데이터를 주고받을 때 약속된 포맷(규칙)이 정의되어있는 또 하나의 파일 형식이라고 보면 된다.

  • 다만 좀더 인간 친화적으로 작성해 가독성을 높이는 쪽으로 무게를 두어 고급 컴퓨터 언어에 친화적이다.
  • 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