A/B Testing 및 NGINX Ingress Controller 무중단 배포

NGINX Ingress Controller의 VirtualServer 리소스를 통해 A/B Testing 을 구현할 수 있습니다.
A/B Testing 은 여러 버전의 웹 애플리케이션을 제공하고 그 성과를 비교하는 중요한 방법입니다. NGINX Ingress Controller 를 사용하여 Kubernetes 환경에서 A/B 테스트를 설정하는 방법을 단계별로 설명합니다.

NGINX Ingress Controller를 통한 A/B 테스트는 MSA (MicroService Architecture, 마이크로서비스 아키텍처) 무중단 배포 시나리오에서 새로운 버전의 애플리케이션을 점진적으로 테스트하고 안정성을 검증할 수 있어 배포 중 발생할 수 있는 위험을 최소화하며, 사용자가 중단 없이 새로운 기능을 경험하도록 할 수 있는 이점이 있습니다.

목차

1. NGINX Ingress Controller A/B Testing 전제 조건
2. A/B Testing을 위한 Service 및 Deployment 배포
3. NGINX Ingress Controller VirtualServer 리소스 설정
4. A/B Testing 검증
 4-1. 분석 도구 예시
5. 결론

1. NGINX Ingress Controller A/B Testing 전제 조건

  • Kubernetes 클러스터 준비: NGINX Ingress Controller를 배포할 수 있는 클러스터가 필요합니다.
  • NGINX Ingress Controller 설치: 설치 방법은 NGINX Ingress Controller 설치 가이드를 참조하세요.

본 가이드에서는 NGINX Ingress Controller와 NGINX Plus Ingress Controller 두 Ingress Controller에 적용됩니다.

2. A/B Testing을 위한 Service 및 Deployment 배포

우선, 두 개의 버전(예: v1 및 v2)으로 애플리케이션을 배포합니다. 각 버전은 서로 다른 기능이나 UI를 제공하여 A/B Testing 을 통해 사용자 반응을 비교할 수 있게 합니다.

해당 포스트에서는 UI가 다른 로그인 서비스의 이미지를 Tag를 사용해 버전을 분리하여 애플리케이션을 배포합니다.

login-v1.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: login-v1
  labels:
    app: login-app
    version: v1
spec:
  selector:
    matchLabels:
      app: login-app
      version: v1
  template:
    metadata:
      labels:
        app: login-app
        version: v1
    spec:
      containers:
      - name: login-container-v1
        image: nginxstore/example-login-ui:v1
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: login-svc-v1
spec:
  selector:
    app: login-app
    version: v1
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80

위 yaml 파일을 통해 배포된 서비스의 접근 화면은 다음과 같습니다.

A/B Testing 및 NGINX Ingress Controller 
 를 통한 무중단 배포 시나리오 - 1

login-v2.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: login-v2
  labels:
    app: login-app
    version: v2
spec:
  replicas: 1
  selector:
    matchLabels:
      app: login-app
      version: v2
  template:
    metadata:
      labels:
        app: login-app
        version: v2
    spec:
      containers:
      - name: login-container-v2
        image: nginxstore/example-login-ui:v2
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: login-svc-v2
spec:
  selector:
    app: login-app
    version: v2
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80

위 yaml 파일을 통해 배포된 서비스의 접근 화면은 다음과 같습니다.

A/B Testing 및 NGINX Ingress Controller 
 를 통한 무중단 배포 시나리오 - 2

3. NGINX Ingress Controller VirtualServer 리소스 설정

A/B 테스트를 위해 트래픽을 각 버전으로 분배합니다. 여기서는 / 경로로 접근할 시 80%의 트래픽을 v1으로, 20%의 트래픽을 v2로 보내도록 설정합니다.

login-virtualserver.yaml

apiVersion: k8s.nginx.org/v1
kind: VirtualServer
metadata:
  name: login-virtualserver
spec:
  host: login.example.com
  upstreams:
  - name: login-v1
    service: login-svc-v1
    port: 80
  - name: login-v2
    service: login-svc-v2
    port: 80
  routes:
  - path: /
    splits:
    - weight: 80
      action:
        proxy:
          upstream: login-v1
          rewritePath: /
          requestHeaders:
            set:
            - name: Host
              value: login-svc-v1.nginx-ingress.svc.cluster.local
    - weight: 20
      action:
        proxy:
          upstream: login-v2
          rewritePath: /
          requestHeaders:
            set:
            - name: Host
              value: login-svc-v2.nginx-ingress.svc.cluster.local

4. A/B Testing 검증

이제 설정이 완료되었습니다. 실제로 트래픽을 보내어 A/B Testing 이 올바르게 설정되었는지 확인합니다. 트래픽의 80%는 app-v1으로, 20%는 app-v2로 라우팅되어야 합니다.

브라우저 접속 새로고침으로 A/B 테스팅 검증을 실행합니다.

여러 번 요청을 보내어 응답을 확인하고, 각 버전에서 응답이 오는지 확인합니다. 이를 통해 A/B 테스트 설정이 올바르게 작동하는지 검증합니다. 최적의 결과를 얻기 위해 지속적인 테스트와 분석을 진행하는 것을 추천합니다.

4-1. 분석 도구 예시

A/B Testing 의 결과를 분석하기 위해 다양한 도구를 사용할 수 있습니다. NGINX Ingress Controller와 함께 사용하는 로그 분석 도구나 모니터링 도구(Grafana, Prometheus, Kiali 등)를 통해 각 버전의 성과를 비교 분석합니다.

분석 도구 예시:

  • Grafana 및 Prometheus: 실시간 모니터링 및 메트릭 수집
  • Elastic Stack (ELK): 로그 수집 및 분석
  • Google Analytics: 사용자 행동 분석

각 버전의 트래픽, 응답 시간, 에러율, 사용자 반응 등을 분석하여 더 나은 버전을 선택할 수 있습니다. 이를 통해 최적의 사용자 경험을 제공할 수 있습니다.

5. 결론

위 가이드를 따르면 VirtualServer 리소스를 사용하여 Kubernetes 환경에서 효율적으로 A/B 테스트를 설정하고 실행할 수 있습니다. 또한 A/B 테스트는 사용자 경험을 향상시키고 애플리케이션의 성능을 최적화하는 데 중요한 도구입니다. 다양한 테스트 방법과 시나리오를 적용하여 더 나은 애플리케이션 성능을 도출할 수 있습니다.

NGINX Ingress Controller와 VirtualServer 리소스를 사용한 A/B 테스트 설정에 대해 궁금한 점이 있거나 추가 질문이 있다면 언제든지 NGINX STORE를 통해 문의하세요.

NGINX STORE를 통한 솔루션 도입 및 기술지원 무료 상담 신청

* indicates required