쿠버네티스 환경에서 OpenFeature로 기능 플래그 관리하기

IMKUNYOUNG·2025년 4월 13일
0

기능 플래그(Feature Flags)는 점진적 배포, A/B 테스트, 실험적 기능 출시 등 현대적인 소프트웨어 개발에 있어 필수적인 전략 중 하나입니다. 이러한 기능 플래그를 표준화된 방식으로 관리할 수 있도록 도와주는 도구가 바로 OpenFeature입니다.

이 글에서는 OpenFeature에 대한 기본적인 개요와 함께, 쿠버네티스(Kubernetes) 환경에서 어떻게 OpenFeature를 활용할 수 있는지에 대해 소개합니다.

OpenFeature란?

OpenFeature는 CNCF(Cloud Native Computing Foundation) 산하의 오픈소스 기능 플래그 표준입니다. 주요 목표는 기능 플래그를 다양한 백엔드 서비스(예: LaunchDarkly, Flagsmith, Unleash 등)와 쉽게 통합할 수 있도록 공통 인터페이스와 SDK를 제공하는 것입니다.

OpenFeature의 핵심 구성 요소

  • SDK: 애플리케이션 코드에 포함되어 기능 플래그를 처리
  • Provider: 플래그의 실제 저장소/백엔드(예: 파일, Redis, 외부 SaaS 등)
  • Evaluation Context: 플래그 평가 시 사용할 사용자 정보, 환경 변수 등
  • Hooks: 플래그 평가 전후에 실행되는 커스텀 로직

쿠버네티스 환경에서의 OpenFeature

쿠버네티스 환경에서 OpenFeature를 적용하면 다음과 같은 시나리오에서 유용합니다:

  • 새로운 기능을 특정 네임스페이스 혹은 서비스에만 적용
  • Helm 차트 또는 GitOps로 배포되는 서비스 간의 플래그 전략 분리
  • 애플리케이션을 재배포하지 않고도 동적으로 플래그 변경
  • Istio 같은 서비스 메시와 연계한 트래픽 기반 플래그 전환

구성 예시

애플리케이션 (Go/Java/Node SDK)
  │
  ├── OpenFeature SDK
  │     └── Provider (예: file-provider, flagd)
  │           └── 플래그 저장소 (ConfigMap, Redis, External API 등)

실습: flagd와 함께 OpenFeature 구성하기

flagd는 OpenFeature 팀이 제공하는 경량 기능 플래그 데몬입니다. Kubernetes 클러스터에서 사이드카 또는 디플로이먼트로 분리된 서비스 형태로 배포할 수 있습니다.

1. flagd 배포 (사이드카 방식)

# 예시: app-deployment.yaml
spec:
  containers:
    - name: my-app
      image: my-app:latest
    - name: flagd
      image: ghcr.io/open-feature/flagd
      args: ["start", "--uri", "file:/flags/flags.json"]
      volumeMounts:
        - name: flags-volume
          mountPath: /flags
  volumes:
    - name: flags-volume
      configMap:
        name: my-feature-flags

2. ConfigMap으로 플래그 정의

apiVersion: v1
kind: ConfigMap
metadata:
  name: my-feature-flags
data:
  flags.json: |
    {
      "flags": {
        "new-ui": {
          "variants": ["on", "off"],
          "defaultVariant": "off",
          "state": "ENABLED"
        }
      }
    }

3. 애플리케이션에서 OpenFeature SDK 사용 (예: Go)

client := openfeature.NewClient("my-app")
val, err := client.StringValue("new-ui", "off")
if val == "on" {
    // 새로운 UI 활성화
}

장점과 고려사항

장점

  • OpenFeature SDK가 표준화되어 다양한 언어에서 일관된 방식으로 플래그 처리 가능
  • Provider만 교체하면 플래그 백엔드를 쉽게 전환할 수 있음
  • 쿠버네티스와 자연스럽게 통합 (ConfigMap, Secrets, 사이드카 패턴 등)

고려사항

  • 상태 저장이 필요한 경우 Redis, DB 등 외부 백엔드 연동 필요
  • 플래그 정의 변경 시 실시간 반영 여부는 구성에 따라 다름
  • 네트워크 의존성이 있는 Provider 사용 시 장애 전파 가능성 있음

마치며

OpenFeature는 기능 플래그 관리의 복잡성을 줄이고, 여러 언어나 플랫폼에서 일관된 경험을 제공합니다. 쿠버네티스 환경에서 flagd와 같은 경량화된 데몬과 함께 사용하면, DevOps/플랫폼 팀 입장에서도 운영이 쉬운 기능 플래그 시스템을 구축할 수 있습니다.

0개의 댓글