A/B 테스트는 오늘날 디지털 경제에서 경쟁하는 마케터와 웹사이트 운영자에게 없어서는 안 될 필수 전략이 되었습니다. 기존 아이디어를 검증하고 새로운 실험을 시도하며, 무엇이 효과가 있고 무엇이 그렇지 않은지 명확하게 파악할 수 있게 해주기 때문입니다.
하지만 이러한 데이터 없이 웹페이지를 최적화하려고 하면 시간도 많이 들고 답답한 과정이 될 수밖에 없습니다. 문제는 A/B 테스트 소프트웨어가 대체로 비싸다는 점입니다. 그래서 많은 사람들이 그 혜택을 누리기 어렵습니다.
그러나 프로그래머 Thiago Camargo는 Redis를 활용해 이런 장벽을 허물었습니다. 실시간으로 작동하는 오픈형 A/B 테스트 도구를 만든 것입니다. Redis의 강력한 데이터 처리 기능 덕분에 사용자는 원하는 변수를 자유롭게 실험하고, 웹페이지를 최적화하는 가장 효과적인 방법을 찾아낼 수 있습니다.
이 글에서는 Thiago가 이 애플리케이션을 어떻게 만들었는지 살펴보겠습니다. 참고로 Redis Launchpad에는 이 외에도 다양한 혁신적인 애플리케이션이 공개되어 있으니, 글을 읽은 후 한번 둘러보시기 바랍니다.
목차
- 무엇을 만들게 되나요?
- 필요한 준비물
- 아키텍처
- 시작하기
- 작동 원리
1. 무엇을 만들게 되나요?
이 프로젝트에서는 확장 가능하고 실시간으로 작동하는 강력하면서도 간단한 A/B 테스트 도구를 만듭니다. 아래에서는 필요한 구성 요소와 각각의 기능을 짚어가며, 애플리케이션을 처음부터 끝까지 어떻게 구축하는지 소개합니다.
2. 필요한 준비물
- Kotlin: 오픈소스 프로그래밍 언어로, Google이 Android 앱 개발에 사용하는 언어이기도 합니다.
- Gradle: 다국어 소프트웨어 개발을 위한 빌드 자동화 도구입니다.
- Lettuce: 논블로킹(Non-blocking) 리액티브 애플리케이션을 구축하는 데 사용됩니다.
- RedisGraph: 희소 행렬(Sparse Matrix)로 그래프의 인접 행렬을 표현하고, 선형대수를 활용해 그래프를 쿼리합니다.
- RedisTimeSeries: 수백만 개의 샘플과 이벤트를 초고효율로 수집하고 쿼리할 수 있습니다.
- RedisJSON: Redis 키에 JSON 값을 저장, 업데이트, 조회할 수 있습니다.
3. 아키텍처
- Swagger에서 웹사이트에서 테스트하고 싶은 변수를 기반으로 실험을 생성합니다. 이 예제에서 사용자는 서로 다른 색상이 매출에 미치는 영향을 테스트하기로 했습니다.
- 트리거 이벤트는 어떤 사용자가 실험에 자동으로 등록될지를 결정합니다.
- 구독에 가입한 사용자는 트리거 이벤트(전환)로 기록되며, 각 트리거 이벤트가 발생한 화면의 색상 정보도 함께 기록되어 결과를 측정합니다.
A/B 테스트란 무엇인가?
A/B 테스트는 '분할 테스트(Split Testing)'라고도 불리며, 두 개 이상의 변수 버전을 웹사이트 방문자에게 보여주어 어느 쪽이 전환에 더 큰 영향을 미치는지 확인하는 체계적인 실험 방법입니다.
이를 통해 브랜드, 제품, 서비스를 시장에서 더 효과적으로 포지셔닝하는 방법을 명확히 파악할 수 있습니다.
예를 들어 웹사이트에서 판매하려는 제품이 있다고 가정해 보겠습니다. 실험할 수 있는 변수 중 하나는 제품 옆의 CTA(Call To Action) 버튼입니다. CTA는 다음과 같은 다양한 방식으로 A/B 테스트를 진행할 수 있습니다.
- 위치
- 디자인
- 색상
- 크기
- 카피라이팅
이러한 변수들을 분할 테스트하면 전환을 유도하는 데 가장 최적화된 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로 무엇을 만들 수 있을까요?
앱 제작자는 누구인가?

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