콘서트 티켓 예매가 시작되면 왜 대기열이 생길까?
접속 인원을 조절하고 좌석 중복 판매를 막는 예매 시스템의 원리
부모님이 좋아하는 가수의 공연을 예매하기 위해 준서는 예매 시작 시각에 맞춰 버튼을 눌렀습니다.
좌석표 대신 대기 화면이 나타났습니다. 앞에 많은 사람이 있다는 숫자를 보며, 준서는 서버를 더 늘리면 모두 바로 들어갈 수 있지 않을까 생각했습니다.
예매 사이트는 왜 사람들을 한꺼번에 들여보내지 않는 걸까요?
1. 사람이 몰리면 단순히 화면만 느려지는 것이 아닙니다
평소에는 나뉘어 들어오던 사람들이 예매 시작 순간에 함께 접속합니다. 서비스가 주고받는 요청의 양인 트래픽이 짧은 시간에 급증하는 것입니다. 좌석을 조회하는 요청에 이어 선택과 결제 요청까지 몰리면, 처리할 일이 빠르게 쌓입니다.
식당에 손님이 한꺼번에 들어와도 주방이 동시에 만들 수 있는 음식에는 한계가 있습니다. 모든 주문을 제한 없이 받으면 전체가 늦어질 수 있죠. 예매 서비스도 처리 가능한 수준으로 입장 인원을 조절해야 합니다. 티켓마스터는 대기열을 수요 관리와 구매 과정의 원활한 진행을 위한 장치로 안내합니다. Ticketmaster의 대기열 안내
2. 대기열은 구매 화면으로 들어가는 속도를 조절합니다
대기열은 요청을 잠시 기다리게 했다가 처리할 여유가 생기면 다음 단계로 보내는 방식입니다. 공연장 입구에서 한 번에 지나갈 수 있는 사람 수를 조절하는 것과 비슷합니다. 예매 시스템에서는 입장한 이용자가 좌석을 확인하고 결제할 수 있도록, 새로운 이용자를 들여보내는 속도를 관리합니다.
티켓마스터는 사전 대기실과 대기열을 거쳐 차례가 되면 구매 화면에 들어가는 흐름을 설명합니다. 다만 모든 서비스가 같은 순서 결정 규칙을 쓰는 것은 아닙니다. 대기 번호가 남은 좌석 수를 뜻하거나, 입장이 곧 좌석 확보를 보장하는 것도 아닙니다. 줄은 구매할 기회를 조절하는 장치입니다. Ticketmaster의 Smart Queue 소개
3. 좌석 하나를 두 사람에게 팔 수는 없습니다
대기열을 통과해도 어려운 일이 남습니다. 준서와 다른 사람이 거의 동시에 같은 좌석을 누를 수 있기 때문입니다. 둘의 화면에 모두 빈자리로 보였다고 해서, 두 사람 모두에게 판매를 확정할 수는 없습니다. 최종 좌석 상태를 확인하고 구매 결과를 일관되게 기록해야 합니다.
이때 이해하면 좋은 개념이 트랜잭션입니다. 관련된 데이터 처리를 하나의 단위로 다루는 방식입니다. 예를 들어 좌석 확보와 주문 기록이 서로 어긋나지 않도록 관리하는 것입니다. 좌석을 일정 시간 임시 확보한 뒤 결제를 기다리는 방식도 이런 시스템에서 활용할 수 있습니다. 이는 일반적인 예매 설계의 예이며, 서비스마다 확보 시간과 결제 처리 방식은 다릅니다.
4. 서버를 늘리는 것과 좌석을 정확히 파는 것은 함께 해결해야 합니다
처리 자원을 늘리는 스케일링은 많은 요청을 감당하는 데 도움이 됩니다. 하지만 화면을 보여 주는 서버를 늘렸다고, 같은 좌석의 최종 판매 상태를 확인하는 과정까지 제한 없이 빨라지지는 않습니다. 여러 길에서 출발한 차가 하나의 좁은 출구를 만나듯, 특정 처리 단계가 전체 속도를 제한할 수 있습니다.
그래서 대규모 예매는 자원을 늘리는 일과 요청을 조절하는 일을 함께 생각해야 합니다. 대기열은 문제가 없다는 증거도, 무조건 장애가 났다는 신호도 아닙니다. 준서가 보는 숫자 뒤에는 접속을 조절하는 과정과, 들어온 사람들에게 좌석을 중복 없이 판매하는 과정이 이어져 있습니다. 예매 시스템은 많은 사람을 받는 동시에 한 장의 티켓을 정확히 다뤄야 합니다.