[python] Tornado를 사용한 A/B 테스트 구현

A/B 테스트는 사용자들에게 두 가지 이상의 버전을 제시하여 어떤 버전이 더 우수한지를 비교하는 실험적인 방법입니다. 이번 글에서는 Tornado 웹 프레임워크를 활용하여 A/B 테스트를 구현하는 방법에 대해 알아보겠습니다.

1. Tornado 설치

먼저, Tornado를 사용하기 위해서는 Python 패키지 매니저인 pip를 통해 Tornado를 설치해야 합니다. 아래의 명령을 터미널에서 실행해서 Tornado를 설치해주세요.

pip install tornado

2. 기본 구조 설정

Tornado에서는 tornado.web 모듈을 사용하여 웹 애플리케이션을 작성합니다. 먼저, 다음과 같이 기본적인 구조를 설정해봅시다.

import tornado.ioloop
import tornado.web

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello World")

def make_app():
    return tornado.web.Application([
        (r"/", MainHandler),
    ])

if __name__ == "__main__":
    app = make_app()
    app.listen(8888)
    tornado.ioloop.IOLoop.current().start()

이 코드는 MainHandler 클래스를 생성하고, / 경로로 요청이 들어오면 “Hello World” 메시지를 출력하는 간단한 웹 애플리케이션입니다.

3. A/B 테스트 구현

A/B 테스트를 구현하기 위해 다음과 같은 단계를 따릅니다.

3.1. 버전 설정

먼저, A/B 테스트를 진행할 두 가지 이상의 버전을 설정해야 합니다. 각 버전은 다른 경로로 접근할 수 있도록 설정합니다. 예를 들어, version_aversion_b라는 두 가지 버전을 사용한다면, 다음과 같이 경로를 설정할 수 있습니다.

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        version = self.get_argument("version", default=None)
        
        if version == "a":
            self.write("Hello from version A")
        elif version == "b":
            self.write("Hello from version B")
        else:
            self.write("Invalid version")

3.2. 트래픽 분배

다음으로, 트래픽을 분배하는 로직을 구현해야 합니다. Tornado에서는 다양한 방법으로 트래픽 분배를 처리할 수 있습니다. 예를 들어, 요청이 들어올 때마다 각 버전에 대한 확률을 설정하여 분배할 수 있습니다.

import random

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        version = self.choose_version()
        
        if version == "a":
            self.write("Hello from version A")
        elif version == "b":
            self.write("Hello from version B")
        else:
            self.write("Invalid version")
    
    def choose_version(self):
        probability = random.random()
        
        if probability < 0.5:
            return "a"
        else:
            return "b"

이 예제에서는 choose_version 함수를 통해 확률에 따라 version_aversion_b를 선택합니다. 여기서는 50% 확률로 각 버전을 선택하도록 설정했습니다.

4. 완성된 A/B 테스트 웹 애플리케이션 실행

위의 코드를 저장한 후, 터미널에서 다음 명령을 실행하여 Tornado 서버를 실행합니다.

python app.py

이제 웹 브라우저에서 http://localhost:8888/?version=a 또는 http://localhost:8888/?version=b 경로로 접속하면, 각 버전에 해당하는 메시지가 출력됩니다.

결론

Tornado를 사용하면 간단하게 A/B 테스트를 구현할 수 있습니다. 위의 예제를 참고하여 자신만의 A/B 테스트 웹 애플리케이션을 만들어보세요.

참고 자료