IT 일반,소식

📝 YAML의 꽃, 앵커(&)와 별칭(*)로 설정 파일 중복 제거하기

_Blue_Sky_ 2025. 12. 10. 22:55
728x90

 

📌 1. JSON으로는 부족할 때: YAML이 제공하는 유연성

API 설정, CI/CD 파이프라인(Jenkins, GitLab CI), 컨테이너 오케스트레이션(Kubernetes) 등 현대적인 개발 환경에서는 복잡하고 반복적인 설정 파일을 다루는 일이 많습니다. 순수 JSON은 데이터 구조를 표현하는 데는 완벽하지만, 설정 간에 중복되는 값이 있을 때 이를 재사용할 방법이 없어 비효율적입니다.

이때 YAML(YAML Ain't Markup Language)은 앵커(&)별칭(*)이라는 강력한 기능을 제공하여, 설정 파일의 중복을 제거하고 유지 보수성을 극적으로 향상시킵니다.

⚓ 2. 앵커(&)와 별칭(*)의 원리

YAML 파일은 파서(Parser)에 의해 최종 데이터 구조로 변환됩니다. 앵커와 별칭은 이 파싱 과정에서 데이터의 복사 및 대입을 지시하는 메커니즘입니다.

문법 이름 역할 예시
&name 앵커 (Anchor) 재사용하고 싶은 데이터 블록에 이름표를 붙입니다. &default-settings
*name 별칭 (Alias) 앵커로 정의된 데이터 블록을 현재 위치에 참조/복사합니다. *default-settings
<<: *name 병합 (Merge Key) 맵(객체) 내에서 다른 맵의 키-값 쌍만 병합(추가) 합니다. <<: *server-config

✍️ 3. 실전 예제: API 서버 환경 설정

여러 개의 환경을 설정해야 하는 API 프로젝트를 예로 들어보겠습니다. 개발 환경과 스테이징 환경은 대부분의 설정을 공유하지만, 호스트 주소만 다릅니다.

단계 1: 공통 설정 정의 (앵커 사용)

먼저, 모든 환경이 공유하는 기본 설정을 &common-env 앵커로 정의합니다.

# 1. 공통 설정 (앵커 정의)
common-settings: &common-env
  port: 8080
  protocol: "http"
  timeout_ms: 3000
  logging_level: "info"

단계 2: 환경별 설정 정의 (별칭 및 병합 사용)

A. 스테이징 환경 (전체 복사)

스테이징 환경은 공통 설정을 전체 사용하고, 호스트 주소만 추가합니다.

staging:
  # <<: *common-env 를 사용하여 common-env의 모든 키를 현재 맵에 복사/병합합니다.
  <<: *common-env
  host: "stg.myapi.com"

B. 개발 환경 (전체 참조)

개발 환경은 로컬 테스트를 위해 common-settings 전체를 그대로 참조하여 간결하게 작성합니다. 이 경우 host 필드를 추가할 수 없으므로 단순 데이터 템플릿 참조에 적합합니다.

# 맵 병합 없이, &common-env가 정의된 맵 자체를 통째로 복사합니다.
development: *common-env

📋 최종 YAML 파일과 파싱 결과

common-settings: &common-env
  port: 8080
  protocol: "http"
  timeout_ms: 3000
  logging_level: "info"

staging:
  <<: *common-env
  host: "stg.myapi.com"

development: *common-env

파싱 후 JavaScript 객체 형태로 변환되면 다음과 같은 결과를 얻습니다.

설정 이름 port protocol host
common-settings 8080 http -
staging 8080 http https://www.google.com/url?sa=E&source=gmail&q=stg.myapi.com
development 8080 http -

✅ 4. YAML 앵커와 별칭 사용의 장점

  1. 중복 제거: 설정 파일의 크기를 줄이고, 반복되는 코드를 제거하여 가독성을 높입니다.
  2. 일관성 유지: 공통으로 사용되는 값(예: 기본 포트, 타임아웃)을 한 곳에서 관리하여, 수정이 필요할 때 앵커 정의 부분만 변경하면 모든 별칭에 자동으로 적용됩니다.
  3. 유지 보수성: 설정 오류를 줄이고, 복잡한 환경 파일도 쉽게 파악할 수 있게 해줍니다.

YAML의 앵커와 별칭은 복잡한 설정을 다루는 모든 개발자에게 필수적인 기능입니다. 지금 바로 여러분의 설정 파일에서 중복을 찾아 제거해 보세요!

728x90