Kubernetes/Kubernetes Advanced

📌 [Deployment 심화편 #9] Deployment와 Feature Flag를 활용한 동적 배포

ygtoken 2025. 3. 13. 10:45
728x90

 

1️⃣ 개요

 

애플리케이션을 운영할 때, 새로운 기능을 배포하더라도 모든 사용자에게 즉시 공개하는 것은 위험할 수 있습니다.

이때 Feature Flag(기능 플래그) 를 활용하면, 코드 배포와 기능 활성화를 분리하여 특정 사용자 그룹에게만 새로운 기능을 점진적으로 제공할 수 있습니다.

 

Feature Flag를 활용하면:

✅ 새로운 기능을 배포하되, 일부 사용자만 활성화

✅ 문제가 발생하면 즉시 기능을 비활성화(롤백 없이 기능 차단 가능)

A/B 테스트, Canary 배포와 결합하여 점진적인 배포 가능

 

이번 글에서는 Feature Flag의 개념과, Kubernetes 환경에서 Feature Flag를 활용한 동적 배포 방법을 설명하겠습니다. 🚀

 


2️⃣ Feature Flag란?

 

✅ 1. Feature Flag의 개념

코드 배포와 기능 활성화를 분리하는 기법

새로운 기능을 Feature Flag(토글)로 감싸고, 특정 조건을 만족하는 경우에만 활성화

운영 중에도 실시간으로 기능을 ON/OFF 가능

배포 후 문제가 발생하면 롤백 없이 즉시 기능 비활성화 가능

 

📌 기존 배포 vs Feature Flag 배포 비교

특징 기존 배포 방식 Feature Flag 기반 배포
기능 활성화 시점 코드 배포 시점 배포 후 운영 중에도 조정 가능
롤백 방식 이전 버전으로 롤백 필요 Feature Flag 비활성화로 즉시 롤백 가능
A/B 테스트 지원 🚫 불가능 ✅ 가능 (특정 사용자 그룹만 활성화)
사용자별 기능 조정 🚫 불가능 ✅ 가능 (특정 조건 기반 활성화)

Feature Flag를 활용하면 배포 후에도 기능을 유연하게 제어할 수 있습니다.

 


3️⃣ Feature Flag 구현 방법

 

Feature Flag는 일반적으로 환경 변수, ConfigMap, API 기반 설정을 활용하여 관리할 수 있습니다.

대표적인 구현 방식은 Kubernetes ConfigMap을 활용하는 방법과, Feature Flag 서비스(LaunchDarkly, Unleash)와 연동하는 방법입니다.

 


✅ 1. Kubernetes ConfigMap을 활용한 Feature Flag

 

ConfigMap을 활용하면 애플리케이션의 환경 설정을 변경하여 Feature Flag를 제어할 수 있습니다.

 

📌 Feature Flag가 포함된 ConfigMap 예제

apiVersion: v1
kind: ConfigMap
metadata:
  name: feature-flags
data:
  NEW_FEATURE_ENABLED: "true"

 

📌 ConfigMap을 Deployment에 적용

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
        - name: my-container
          image: nginx
          env:
            - name: NEW_FEATURE_ENABLED
              valueFrom:
                configMapKeyRef:
                  name: feature-flags
                  key: NEW_FEATURE_ENABLED

 

📌 ConfigMap 변경을 통해 Feature Flag 활성화/비활성화

kubectl edit configmap feature-flags

이 방식은 간단하지만, 실시간으로 Feature Flag를 변경하기 어려울 수 있습니다.

 


✅ 2. Feature Flag 서비스(Unleash, LaunchDarkly) 활용

 

Feature Flag 서비스(Unleash, LaunchDarkly)를 활용하면 실시간으로 기능을 활성화하거나 비활성화할 수 있습니다.

 

📌 Unleash 설치 및 실행

kubectl apply -f https://docs.getunleash.io/deploy/kubernetes/unleash-deployment.yaml

 

📌 Unleash를 활용한 Feature Flag 예제 (YAML 설정)

apiVersion: v1
kind: ConfigMap
metadata:
  name: unleash-config
data:
  UNLEASH_URL: "http://unleash:4242/api"
  UNLEASH_FEATURE: "new-feature"

 

📌 애플리케이션 코드에서 Feature Flag 적용 (Python 예제)

import requests
UNLEASH_URL = "http://unleash:4242/api"
FEATURE_NAME = "new-feature"

def is_feature_enabled():
    response = requests.get(f"{UNLEASH_URL}/client/features")
    feature_flags = response.json()
    return feature_flags.get(FEATURE_NAME, {}).get("enabled", False)

if is_feature_enabled():
    print("🚀 새로운 기능 활성화됨!")
else:
    print("❌ 기존 기능 유지됨")

Unleash와 같은 서비스 기반 Feature Flag는 운영 중에도 실시간으로 변경이 가능하며, Canary 배포와도 쉽게 결합할 수 있습니다.

 


4️⃣ Feature Flag 운영 시 고려해야 할 점

 

✅ 1. 동적 배포와 함께 활용하기

 

Feature Flag는 Canary Deployment와 결합하여 점진적으로 새로운 기능을 활성화하는 데 유용하게 활용될 수 있습니다.

 

📌 Feature Flag + Canary 배포 시나리오

1) 새로운 기능을 포함한 애플리케이션을 배포 (Feature Flag OFF 상태로 배포)

2) Feature Flag를 일부 사용자(예: 내부 직원)에게만 활성화

3) 에러 발생 시 즉시 Feature Flag를 비활성화하여 기능 차단

4) 문제가 없으면 전체 사용자에게 기능을 활성화

 

Feature Flag를 사용하면 Canary 배포보다 더 세밀한 기능 활성화가 가능합니다.

 


✅ 2. 운영 중 Feature Flag 정리 (Cleanup)

 

Feature Flag를 남용하면 코드 복잡도가 증가할 수 있으므로, 기능이 완전히 안정화되면 불필요한 Feature Flag를 정리해야 합니다.

 

📌 Feature Flag 정리 체크리스트

✅ 새로운 기능이 전체 사용자에게 적용되었는가?

✅ 해당 Feature Flag가 더 이상 변경되지 않는가?

✅ 기존 코드에서 Feature Flag 관련 로직을 제거했는가?

 

Feature Flag를 무분별하게 남용하면 코드 관리가 어려워지므로, 일정 기간 후 정리하는 것이 중요합니다.

 


🔥 5️⃣ 결론

 

Feature Flag를 활용하면 배포 후에도 기능을 점진적으로 활성화할 수 있음

ConfigMap을 활용한 방법과 Unleash/LaunchDarkly 같은 서비스 기반 솔루션 활용 가능

Canary 배포와 결합하면 더욱 강력한 동적 배포 전략을 수립할 수 있음

운영 중에도 Feature Flag를 통해 기능을 활성화/비활성화할 수 있어 빠른 롤백 가능

Feature Flag는 남용하지 않도록 주기적으로 정리해야 함

728x90