개인적인 이유로 프로젝트는 잠정 중단하게 되었습니다. (23.09.10)
안녕하세요, 개발자 송은석입니다.
새로운 토이 프로젝트를 하나 시작해보려고 합니다. 주제는 "티켓 예매 서비스 만들기" 인데요, 자세한 설명은 아래에서 함께 보시죠!
서비스의 목적이 무엇인가요?
2023년 내한했던 브루노 마스의 티켓 예매 사이트 동접자가 100만을 넘었던 것을 모티브로 삼아 이와 같은 티켓 예매 시스템을 설계, 구현해보고자 했습니다.
누가 이 서비스의 대상인가요?
티켓을 구매하고자 하는 티켓 예매 사이트에 가입한 유저들 (사이트 가입 유저 200만 추정)
2023.06 브루노 마스 티켓팅을 기준으로, 100만의 유저가 동시간 대에 티켓 구매 요청을 할 것으로 예상합니다.
서비스를 위해 충족해야 하는 요구사항은 무엇인가요?
동접자 100만의 트래픽을 처리할 수 있어야 합니다.
접속한 순서대로 티켓을 예매할 수 있어야 합니다.
티켓은 좌석 마다 하나 씩 발급 되어야 합니다.
1명의 유저당 최대 3개의 티켓을 구매할 수 있습니다.
예매 완료 시 유저는 자신이 예매한 티켓 정보를 조회할 수 있습니다.
티켓 예매는 어떻게 진행되어야 할까요?
사용되는 기술 및 상세 구현을 시작하기 전, 간략하게 예매 흐름을 작성 해보았습니다. 실제 구현될 내용과는 다를 수 있습니다.
예매 전
아래의 티켓팅 정보를 등록합니다. (실제 DB 테이블 내용과는 다를 수 있습니다.)
티켓팅할 행사 이름
티켓팅 시작 시간
행사 시 사용될 티켓 좌석
예매 시
사용자가 예매 준비 페이지에 접속합니다. 예매를 하기 위해서 유저는 로그인 된 상태이어야 하며, 지정된 시간부터 예매가 가능합니다.
예매 가능 시간 이후부터 “예매하기” 버튼을 통해 예매 대기열 페이지로 접속이 가능합니다.
ex. 예매 가능 시간이 오전 10시부터 시작일 경우, 10시 0분 0초부터 예매 대기열 페이지 접속이가 가능합니다.
접속한 인원들은 우선 대기열 페이지로 이동합니다.
대기열 페이지에서 선착순 n명의 인원만 예매 페이지로 이동하여 좌석 예매를 시작하도록 합니다.
예매 페이지에 접속한 유저는 좌석을 선택합니다.
좌석을 선택한 유저는 결제 페이지로 넘어갑니다.
결제까지 완료되었을 경우, 티켓 예매 접속이 종료됩니다.
N명 만큼 예매 페이지 접속이 종료되면, 그리고 남은 티켓이 존재한다면 대기 페이지에 있는 유저를 최대 N명만큼 선착순 예매 페이지로 이동시킵니다.
구체적으로 어떤 기술을 사용할지는 정하지 않은 상태에서, 전체적인 데이터의 흐름을 바탕으로 시스템을 추상화해보았습니다.
프로젝트에서 주로 다룰 부분은 아래의 3 서버 애플리케이션입니다.
User, Ticket Info를 관리하는 User and Ticket Info Management Server
티켓 예매를 기다리는 유저들을 순차적으로 관리하는 Queue Management Server
좌석 예매 기능을 제공하는 Ticketing Server
주요 기능 위주로 나눈 각 서버의 구체적인 기능, 그리고 간단한 시스템 구조를 작성해보았습니다.
기능
유저 선착순 등록 기능
유저 연결 기능
티켓팅 서버 리다이렉트 기능
토큰 기반 접속 기능
유저 연결 기능
좌석 선택 기능
결제 기능
프로젝트 소개글 치고는 여러 내용을 다룬 것 같습니다😂
프로젝트의 처음은 유저 • 티켓 서버(User And Ticket Info Server)를 개발하는 것으로 시작될 것 같습니다.
그럼 다음 개발이 진행된 후에, 다시 찾아뵙겠습니다. 감사합니다.
*PS. 중간 중간 있는 각 시스템의 구성도를 보시면서 분산 서버 환경은 고려하지 않았나요? 라는 질문을 하실 수도 있을 것 같습니다. 현재 단계에서 각 시스템은 단일 서버 기준으로 설계된 상태입니다. (DB나 Redis 역시 마찬가지 입니다.) 이는 현재 상태에서 안정적으로 유지될 수 있는 최대의 수준을 테스트하고, 이를 기반으로 분산 서버 환경을 구축하고자 했기 때문입니다.
*프로젝트에 대해 나누고 싶은 의견이 있으시다면, 댓글이나 이메일로 남겨주시면 감사하겠습니다.
공감하며 읽었습니다. 좋은 글 감사드립니다.