[Yaml] 앵커(anchor)
yaml에서 반복되는 부분을 줄일 수 있는 기능이 있는데, 바로 앵커(anchor)다.
&로 정의하고, *로 사용할 수 있다.
사용 예시
단순 value
anchored_content: &anchor_name TEST_STRING
other_anchor: *anchor_name
위처럼 단순한 value를 정의하면, 아래 json과 동일하다
{
"anchored_content": "TEST_STRING",
"other_anchor": "TEST_STRING"
}
key/value
anchored_content: &anchor_name
- key1: value1
key2: value2
other_anchor: *anchor_name
key/value를 넣을 수도 있다
{
"anchored_content": [
{
"key2": "value2",
"key1": "value1"
}
],
"other_anchor": [
{
"key2": "value2",
"key1": "value1"
}
]
}
map merging
base: &base
name: Everyone has same name
foo:
<<: *base # 이미 name이 있어 머지되지 않는다
age: 10
name: John
bar:
<<: *base # 여긴 머지된다
age: 20
<<
를 key 부분에 쓰면 anchor map을 현재 map에 병합시킨다
주의할 점은 이미 해당 map에 key가 있다면 병합에서 제외된다.
{
"base": {
"name": "Everyone has same name"
},
"bar": {
"age": 20,
"name": "Everyone has same name"
},
"foo": {
"age": 10,
"name": "John"
}
}
multiple
anchor1: &anchor1
x: 1
y: 2
anchor2: &anchor2
key1: value1
key2: value2
merge_arr:
<<: [*anchor1, *anchor2]
just_arr: [*anchor1, *anchor2]
위처럼 여러개 앵커를 사용할 수도 있다
{
"anchor2": {
"key2": "value2",
"key1": "value1"
},
"merge_arr": {
"y": 2,
"key2": "value2",
"key1": "value1",
"x": 1
},
"just_arr": [
{
"y": 2,
"x": 1
},
{
"key2": "value2",
"key1": "value1"
}
],
"anchor1": {
"y": 2,
"x": 1
}
}