기능 플래그(Feature Flags)는 점진적 배포, A/B 테스트, 실험적 기능 출시 등 현대적인 소프트웨어 개발에 있어 필수적인 전략 중 하나입니다. 이러한 기능 플래그를 표준화된 방식으로 관리할 수 있도록 도와주는 도구가 바로 OpenFeature입니다.
이 글에서는 OpenFeature에 대한 기본적인 개요와 함께, 쿠버네티스(Kubernetes) 환경에서 어떻게 OpenFeature를 활용할 수 있는지에 대해 소개합니다.
OpenFeature는 CNCF(Cloud Native Computing Foundation) 산하의 오픈소스 기능 플래그 표준입니다. 주요 목표는 기능 플래그를 다양한 백엔드 서비스(예: LaunchDarkly, Flagsmith, Unleash 등)와 쉽게 통합할 수 있도록 공통 인터페이스와 SDK를 제공하는 것입니다.
쿠버네티스 환경에서 OpenFeature를 적용하면 다음과 같은 시나리오에서 유용합니다:
애플리케이션 (Go/Java/Node SDK)
│
├── OpenFeature SDK
│ └── Provider (예: file-provider, flagd)
│ └── 플래그 저장소 (ConfigMap, Redis, External API 등)
flagd는 OpenFeature 팀이 제공하는 경량 기능 플래그 데몬입니다. Kubernetes 클러스터에서 사이드카 또는 디플로이먼트로 분리된 서비스 형태로 배포할 수 있습니다.
# 예시: 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
apiVersion: v1
kind: ConfigMap
metadata:
name: my-feature-flags
data:
flags.json: |
{
"flags": {
"new-ui": {
"variants": ["on", "off"],
"defaultVariant": "off",
"state": "ENABLED"
}
}
}
client := openfeature.NewClient("my-app")
val, err := client.StringValue("new-ui", "off")
if val == "on" {
// 새로운 UI 활성화
}
OpenFeature는 기능 플래그 관리의 복잡성을 줄이고, 여러 언어나 플랫폼에서 일관된 경험을 제공합니다. 쿠버네티스 환경에서 flagd와 같은 경량화된 데몬과 함께 사용하면, DevOps/플랫폼 팀 입장에서도 운영이 쉬운 기능 플래그 시스템을 구축할 수 있습니다.