기타

[YAML] 변수 할당 및 참조 - anchor & alias

비번변경 2025. 1. 6. 11:23

개요

2024.12.22-[Yaml] 텍스트 표현 - 개행 처리 글을 작성하기 위해 자료를 찾다가 yaml에는 값 재사용을 위한 변수 할당이라는 좋은 문법이 있는 것을 알게 되었다. 변수 할당 방법을 인지하고 있으면 이후에 복잡한 문서도 보다 효율적으로 작성할 수 있을 것 같아 기록차 적어둔다.

 

 

anchor

yaml에서는 & 기호(anchor)를 사용하여 변수를 선언할 수 있다.

key: &var_name value

# 예시
default: &default_school 
   grade: &default_grade 1
   group: 서울대학교
   description: 1946년에 설립된 국립대

위의 데이터의 경우에는 값 1을 default_grade라는 변수에 저장하고, default 키의 값을 default_school이라는 변수에 저장한다.

 

 

alias

이제 위에서 선언한 변수를 참조해 보자. 변수를 참조할 때는 * 기호를 사용한다. 값을 재정의하는 등의 추가 작업이 필요한 경우에는 << 기호를 사용해 오버라이드하기도 한다.

*var_name

# 값 재정의
<<: *var_name

 

예시로 아래와 같이 student라는 키에 name과 grade를 정의하되, grade는 default_grade 변수값을 참조한다.

default: &default_school 
   grade: &default_grade 1
   group: 서울대학교
   description: 1946년에 설립된 국립대

student:
  - name: James
    grade: *default_grade

이 데이터를 JSON으로 변환하면 다음과 같다.

{
  "default": {
    "grade": 1,
    "group": "서울대학교",
    "description": "1946년에 설립된 국립대"
  },
  "student": [
    {
      "name": "James",
      "grade": 1
    }
  ]
}

저장했던 값에 해당하는 1로 잘 매핑된 것을 확인할 수 있다. 이제 student에 학교 정보를 포함해 보자.

.. 생략 ..
student:
  - name: James
    <<: *default_school

다음과 같이 grade, group, description 정보가 모두 json으로 잘 파싱 되었다. 

{
  "default": { .. },
  "student": [
    {
      "name": "James",
      "grade": 1,
      "group": "서울대학교",
      "description": "1946년에 설립된 국립대"
    }
  ]
}

만약 값 재정의가 필요하다면, 해당 값을 다시 정의하면 된다.

.. 생략 ..
student:
  - name: James
    <<: *default_school
    grade: 2

파싱 결과는 아래와 같다.

{
  "default": { .. },
  "student": [
    {
      "name": "James",
      "grade": 2,
      "group": "서울대학교",
      "description": "1946년에 설립된 국립대"
    }
  ]
}

 

 

참고 문서

📑 YAML 개념 & 문법 마스터 하기