Computer >> 컴퓨터 >  >> 프로그래밍 >> Redis

Redis로 실시간 A/B 테스트 도구 구축하는 방법: 단계별 완벽 가이드

A/B 테스트는 오늘날 디지털 경제에서 경쟁하는 마케터와 웹사이트 운영자에게 없어서는 안 될 필수 전략이 되었습니다. 기존 아이디어를 검증하고 새로운 실험을 시도하며, 무엇이 효과가 있고 무엇이 그렇지 않은지 명확하게 파악할 수 있게 해주기 때문입니다.

하지만 이러한 데이터 없이 웹페이지를 최적화하려고 하면 시간도 많이 들고 답답한 과정이 될 수밖에 없습니다. 문제는 A/B 테스트 소프트웨어가 대체로 비싸다는 점입니다. 그래서 많은 사람들이 그 혜택을 누리기 어렵습니다.

그러나 프로그래머 Thiago Camargo는 Redis를 활용해 이런 장벽을 허물었습니다. 실시간으로 작동하는 오픈형 A/B 테스트 도구를 만든 것입니다. Redis의 강력한 데이터 처리 기능 덕분에 사용자는 원하는 변수를 자유롭게 실험하고, 웹페이지를 최적화하는 가장 효과적인 방법을 찾아낼 수 있습니다.

이 글에서는 Thiago가 이 애플리케이션을 어떻게 만들었는지 살펴보겠습니다. 참고로 Redis Launchpad에는 이 외에도 다양한 혁신적인 애플리케이션이 공개되어 있으니, 글을 읽은 후 한번 둘러보시기 바랍니다.

목차

  1. 무엇을 만들게 되나요?
  2. 필요한 준비물
  3. 아키텍처
  4. 시작하기
  5. 작동 원리

1. 무엇을 만들게 되나요?

이 프로젝트에서는 확장 가능하고 실시간으로 작동하는 강력하면서도 간단한 A/B 테스트 도구를 만듭니다. 아래에서는 필요한 구성 요소와 각각의 기능을 짚어가며, 애플리케이션을 처음부터 끝까지 어떻게 구축하는지 소개합니다.

2. 필요한 준비물

  • Kotlin: 오픈소스 프로그래밍 언어로, Google이 Android 앱 개발에 사용하는 언어이기도 합니다.
  • Gradle: 다국어 소프트웨어 개발을 위한 빌드 자동화 도구입니다.
  • Lettuce: 논블로킹(Non-blocking) 리액티브 애플리케이션을 구축하는 데 사용됩니다.
  • RedisGraph: 희소 행렬(Sparse Matrix)로 그래프의 인접 행렬을 표현하고, 선형대수를 활용해 그래프를 쿼리합니다.
  • RedisTimeSeries: 수백만 개의 샘플과 이벤트를 초고효율로 수집하고 쿼리할 수 있습니다.
  • RedisJSON: Redis 키에 JSON 값을 저장, 업데이트, 조회할 수 있습니다.

3. 아키텍처

Redis로 실시간 A/B 테스트 도구 구축하는 방법: 단계별 완벽 가이드
  • Swagger에서 웹사이트에서 테스트하고 싶은 변수를 기반으로 실험을 생성합니다. 이 예제에서 사용자는 서로 다른 색상이 매출에 미치는 영향을 테스트하기로 했습니다.
  • 트리거 이벤트는 어떤 사용자가 실험에 자동으로 등록될지를 결정합니다.
  • 구독에 가입한 사용자는 트리거 이벤트(전환)로 기록되며, 각 트리거 이벤트가 발생한 화면의 색상 정보도 함께 기록되어 결과를 측정합니다.

A/B 테스트란 무엇인가?

A/B 테스트는 '분할 테스트(Split Testing)'라고도 불리며, 두 개 이상의 변수 버전을 웹사이트 방문자에게 보여주어 어느 쪽이 전환에 더 큰 영향을 미치는지 확인하는 체계적인 실험 방법입니다.

이를 통해 브랜드, 제품, 서비스를 시장에서 더 효과적으로 포지셔닝하는 방법을 명확히 파악할 수 있습니다.

예를 들어 웹사이트에서 판매하려는 제품이 있다고 가정해 보겠습니다. 실험할 수 있는 변수 중 하나는 제품 옆의 CTA(Call To Action) 버튼입니다. CTA는 다음과 같은 다양한 방식으로 A/B 테스트를 진행할 수 있습니다.

  1. 위치
  2. 디자인
  3. 색상
  4. 크기
  5. 카피라이팅

이러한 변수들을 분할 테스트하면 전환을 유도하는 데 가장 최적화된 CTA 버전이 무엇인지 알아낼 수 있습니다.

4. 시작하기

사전 준비 사항

  • Docker
  • Gradle 7.2 설치
  • Maven 3.8.1
  • OpenJDK 설치
  • Swagger API 문서

1단계: 저장소 클론하기

먼저 GitHub에서 프로젝트 저장소를 로컬 환경으로 클론(clone)합니다.

2단계: 빌드 태스크 실행하기

Gradle을 사용해 프로젝트를 빌드하여 필요한 의존성과 설정을 준비합니다.

3단계: Redis 모듈 설정하기

Docker Desktop을 사용하는 경우 볼륨 마운트를 위해 파일 공유 옵션이 활성화되어 있는지 확인하세요. 이후 제공된 코드를 사용해 Redis 환경을 설정합니다.

4단계: 애플리케이션 실행하기

아래 코드를 사용해 Docker를 시작하면 애플리케이션이 실행됩니다.

작동 원리

Experiments API

여기서는 트리거 기반 가중치 등록(Trigger-based Weighted Enrollment) 방식으로 확장 가능한 A/B 테스트 실험을 만드는 방법을 보여줍니다.

실험 생성 방법

이 단계에서는 다양한 변수를 A/B 테스트할 수 있는 실험을 생성합니다. 여기서는 서로 다른 화면 색상이 매출에 어떤 영향을 주는지 분할 테스트하려는 마케터의 입장이 되어 보겠습니다.

시작하려면 제공된 코드를 사용하세요.

주목할 점은 상단의 'goalIds'를 'purchase'로 변경하여 각 화면 색상에서 발생한 판매 건수를 측정한다는 것입니다. 그 아래에서는 실험의 'id'를 'subscription1'으로 지정했습니다.

트리거 이벤트를 결정하기 위해 'user-plan-screen-view'를 삽입했습니다. 즉, 해당 이벤트가 발생하면 사용자가 자동으로 실험에 등록됩니다.

다음으로 변형(variant)을 'red'와 'blue'로 지정했습니다. 이 두 가지가 A/B 테스트의 대상 변수이기 때문입니다.

실험 조회 방법

API를 호출하면 생성된 실험의 세부 정보를 확인할 수 있습니다. 응답(Response)에는 실험 ID, 목표, 트리거 이벤트, 변형 목록이 포함됩니다.

Remote Config API

여기서는 동적이고 확장 가능한 원격 클라이언트 구성 서비스(Firebase 대체재)를 만드는 방법을 소개합니다.

원격 구성 업데이트 방법

API를 통해 클라이언트 설정값을 실시간으로 업데이트할 수 있습니다.

원격 구성 조회 방법

저장된 구성값을 조회하면 현재 적용 중인 설정을 확인할 수 있습니다.

Event API

이 단계는 TimeSeries 이벤트 인덱싱과 관련이 있습니다.

이벤트 푸시 방법

발생한 이벤트를 RedisTimeSeries에 기록하여 실시간 분석 데이터로 활용할 수 있습니다.

Summary API – 범용 요약 서비스

다양한 유형의 애플리케이션 요약을 저장하고 관리할 수 있는 간단하고 유연한 요약 서비스입니다. 게임 스코어보드, 제품 평점, 사용자 평점, 증분 지표 등 다양한 용도로 활용할 수 있습니다.

요약 업데이트 방법

새로운 데이터가 들어올 때마다 요약 정보를 갱신하여 최신 상태를 유지합니다.

요약 조회 방법

저장된 요약 데이터를 조회하면 집계된 결과를 확인할 수 있습니다.

Drawer API – 범용 키/값 서비스

유연한 속성 저장소를 제공하는 범용 키/값(Key/Value) 서비스입니다.

Drawer 업데이트 방법

키에 해당하는 속성 값을 자유롭게 추가하거나 수정할 수 있습니다.

Drawer 조회 방법

저장된 키/값 데이터를 조회하여 필요한 속성을 가져올 수 있습니다.

사용된 Redis 쿼리

아래 대부분의 명령어는 Lettuce Redis Command Annotation을 사용해 구현되었습니다.

Graph

  • enrollEmitterOnExperiment
  • fetchParticipantsOnExperiment
  • graphQuery

TimeSeries

  • pushEvent

JSON

  • setObject
  • getObject
  • setPathValue
  • getPathValue

Core

  • HSET
  • HGET / HGETALL
  • HEXISTS

결론: 모두를 위한 A/B 테스트

A/B 테스트는 오늘날 디지털 시장에서 경쟁하는 모든 마케터에게 필수적인 요소가 되었습니다. 하지만 관련 소프트웨어를 구입하는 비용이 만만치 않아 많은 사람들이 최적화되지 못한 웹사이트로 운영해야 했습니다. 게다가 직접 분할 테스트 소프트웨어를 개발하는 것 역시 상당한 프로그래밍 난이도를 요구합니다.

이런 애플리케이션을 만들려면 컴포넌트 간에 데이터를 효율적으로 전송할 수 있는 다재다능하고 강력한 데이터베이스가 필요합니다. Redis는 바로 이러한 장애물을 모두 해결해 주었습니다.

노트북 하나에 Redis만 설치하면 웹사이트의 어떤 변수든 A/B 테스트할 수 있고, 타깃 시장에 한 걸음 더 가까워질 수 있습니다. Redis의 고급 데이터 처리 능력 덕분에 컴포넌트 간 데이터 전송이 초고효율적이면서도 안정적으로 이루어져, 반응성이 뛰어난 애플리케이션이 완성됩니다.

그 결과 지연도 없고, 끊김도 없으며, 사용자와 애플리케이션 사이에 마찰 요인이 전혀 없습니다. 이 애플리케이션이 어떻게 만들어졌는지 더 궁금하다면 YouTube 영상을 확인해 보세요.

이 글이 유익했다면 Redis Launchpad에서 더 많은 사례를 만나보세요. 실시간 차량 추적 시스템부터 개발도상국의 농작물 보험사를 보호하는 드론 시스템까지, 전 세계 프로그래머들이 일상을 개선하기 위해 Redis를 활용하고 있습니다.

당신은 Redis로 무엇을 만들 수 있을까요?

Redis로 실시간 A/B 테스트 도구 구축하는 방법: 단계별 완벽 가이드

앱 제작자는 누구인가?

Redis로 실시간 A/B 테스트 도구 구축하는 방법: 단계별 완벽 가이드

Thiago Camargo

이 애플리케이션이 마음에 드셨다면 Thiago의 GitHub 페이지를 방문해 그가 진행 중인 다양한 프로젝트를 계속 확인해 보세요.