선언형 설정 ( Declarative config )

Declarative configuration

선언형 설정과 명령형 설정 비교 및 선언형 설정의 우수성

1. 선언형 설정 (Declarative Configuration)

정의:

  • 사용자가 원하는 최종 상태를 정의하고, 시스템이 자동으로 이를 달성하도록 설정하는 방식입니다.

  • 예: Kubernetes에서 리소스를 YAML 파일로 정의하여 사용.

특징:

  • 상태 중심: 현재 시스템의 상태와 목표 상태를 비교하고, 필요한 변경만 적용합니다.

  • 반복 가능성(멱등성): 동일한 선언형 설정 파일을 여러 번 적용해도 결과가 일관됩니다.

  • 자동화 지원: Kubernetes와 같은 플랫폼은 선언된 상태에 따라 자동으로 관리합니다.

예시 (Kubernetes YAML 파일):

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: my-container
    image: nginx

2. 명령형 설정 (Imperative Configuration)

정의:

  • 시스템에 직접 명령을 내리거나 특정 작업을 수행해 원하는 상태를 만들도록 하는 방식입니다.

  • 예: Kubernetes에서 CLI 명령어로 리소스를 생성하거나 수정.

특징:

  • 동작 중심: 어떤 작업을 수행할지를 명시하며, 이를 통해 상태를 변경합니다.

  • 단발성 작업: 한 번 명령을 실행하면 그 상태에 대한 기록이나 관리가 어렵습니다.

  • 자동화 어려움: 복잡한 설정이나 일관성 있는 상태 관리를 위해 스크립트 작성이 필요합니다.

예시 (Kubernetes 명령어):

kubectl run my-pod --image=nginx

3. 선언형 설정 vs 명령형 설정: 차이점 비교

특징

선언형 설정

명령형 설정

접근 방식

원하는 최종 상태를 정의

수행할 명령을 단계별로 실행

일관성

여러 번 적용해도 결과가 동일

상태를 추적하기 어려워 일관성 유지 어려움

자동화

자동화 도구와 쉽게 통합 가능

자동화가 복잡하고 수작업이 많이 필요

유지보수

설정 파일을 통해 관리 용이

개별 명령 추적이 어려워 유지보수 어려움

복잡도

복잡한 설정도 파일로 쉽게 관리

복잡한 설정은 스크립트로 처리해야 함


4. 선언형 설정이 우수한 이유

  1. 자동화 및 지속적 관리:

    • 선언형 설정은 자동화 도구(Kubernetes 등)와 자연스럽게 연동되어 지속적 관리와 상태 유지가 용이합니다.

    • 사용자가 설정한 최종 상태를 시스템이 자동으로 유지해 주기 때문에 자동화에 적합합니다.

  2. 일관성:

    • 명령형 설정은 매번 명령을 실행할 때마다 변동이 발생할 수 있지만, 선언형 설정은 항상 일관된 상태를 유지합니다.

    • 변경 사항이 있을 때도 새로운 상태만 반영되며, 필요한 변경만 이루어집니다.

  3. 복잡한 환경에서의 효율성:

    • 여러 리소스를 동시에 관리해야 하는 복잡한 환경에서는 선언형 설정이 훨씬 더 효율적입니다.

    • YAML 파일 등의 구성 파일로 복잡한 상태를 명확하게 정의할 수 있고, 추적하기 쉬워지며 유지 관리도 간편합니다.

  4. 가독성과 관리 용이성:

    • 선언형 설정은 파일로 구성되어 있기 때문에 변경 기록을 쉽게 관리할 수 있고, 협업 시에도 가독성이 뛰어나 여러 사람이 동시에 관리하기 좋습니다.


5. 선언형 설정이 더 우수한 이유

  • 관리 효율성: 선언형 설정은 최종 상태만 정의하고 시스템이 이를 자동으로 유지하기 때문에, 반복적이고 복잡한 설정 관리를 단순화시켜 줍니다.

  • 협업 우수성: Github와 같은 도구를 함께 이용하여, 동료들과 서로 리뷰를 하여, 서로의 성장을 돕는 방식의 형태로 쉽게 협업을 가능케 합니다.

  • 유지보수 용이성: 복잡한 설정 변경도 추적과 관리가 용이하며, 여러 시스템을 일관된 방식으로 관리할 수 있습니다. 특

  • 자동화 적합성: 지속적 통합(CI)과 지속적 배포(CD) 파이프라인에서도 선언형 설정은 이상적인 방식입니다.

Last updated