Skip to content

the-sleepless-coder/tickget-project

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1,008 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

프로젝트 개요

대용량 트래픽을 발생시켜 실제와 유사한 환경에서 티켓팅을 연습할 수 있는 사이트

어플리케이션 주요 기능

· 봇을 추가해 (최대 1만개) 최대한 실제와 유사한 환경에서 티켓팅 연습
· 전체 인원에서 나의 등수 및 각 구간별 시간 확인 가능
  1. 정해진 티켓팅 이벤트가 시작될 때까지 대기한다.
image
  1. 입장한 순서대로 대기열에 진입한다.
image
  1. 보안문자를 입력한다.
image
  1. 좌석을 선택한다.
image
  1. 전체 사용자 및 봇 포함 사용자 중에서 내가 몇등한지 확인한다. 각 구간별 기록도 함께 확인한다.
image

6.마이페이지에서 나의 기록을 확인할 수 있다. 한편 매주 업데이트 되는 랭킹을 실시간으로 조회 가능하다. image

image

🔧 주요 기술 스택 및 역할

image

1) Backend

  1. Spring Boot (Java)

서비스의 핵심 비즈니스 로직을 담당하는 백엔드 프레임워크

사용자, 티켓팅, 룸, 검색, 통계 등 기능별로 마이크로서비스 구조로 분리하여 구현

REST API 기반으로 프론트엔드 및 타 서비스와 통신

서비스 단위로 독립적인 배포 및 스케일링이 가능하도록 설계

  1. Flask (Python)

경량 Python 웹 프레임워크를 이용한 보안문자 서버 기능 구현

  1. Redis

인메모리 데이터 저장소: 캐싱, 세션 관리, 실시간 데이터 처리에 활용

대기열 구현 시, 각 사용자(봇 포함)의 대기열 진입 시점과 시간이 지남에 따라 대기열 내 등수를 Key값으로 저장.

  1. Kafka

이벤트 기반 비동기 메시징 시스템을 이용해, 대기열을 빠져나갔다는 이벤트를 발행

한편 티켓팅이 진행될 때 각 단계에서 넘어갈 시, 사용자의 기록을 MongoDB에 저장하기 위한 데이터를 저장하는 비동기적 처리 구현

  1. MySQL

게임방, 경기 데이터, 각 사용자별 통계 데이터 등 관계형 데이터를 저장하기 사용

  1. MongoDB

각 단계별 사용자의 기록 데이터를 저장하기 위한 비정형 데이터베이스 사용

로그, 분석 결과 등 유연한 스키마가 필요한 데이터 처리

  1. ElasticSearch

대용량 데이터 검색 및 분석 엔진

검색 서버에서 사용되어 티켓팅 좌석 배치도를 선택할 때 빠른 검색 가능

2)Frontend

  1. React

SPA(Single Page Application) 기반 사용자 인터페이스 구현

컴포넌트 단위 설계를 통해 UI 재사용성과 유지보수성 향상

3)Infrastructure / DevOps

  1. Kubernetes (K3s) 전체 시스템을 컨테이너 기반으로 운영하는 오케스트레이션 플랫폼으로, 경량 Kubernetes 배포판인 K3s를 사용하여 리소스 효율적인 클러스터를 구성.

11개의 마이크로서비스를 독립적인 Pod 단위로 배포하며, ARM64 아키텍처에 최적화된 이미지를 사용.

  1. Traefik (Ingress Controller) 외부 트래픽을 클러스터 내부 서비스로 라우팅하는 Ingress Controller 사용

IngressRoute와 StripPrefix 미들웨어를 활용하여 도메인 기반 라우팅(tickget.kr) 및 서비스별 경로 분산(/api/v1/{env}/{service})을 처리

  1. Auth Server Google OAuth2 기반 사용자 인증 및 JWT 토큰 발급을 담당

Access Token(7일) 및 Refresh Token(30일) 관리를 통해 인증 로직을 중앙 집중화하여 보안성과 확장성을 확보

  1. Prometheus & Grafana Spring Boot Actuator를 통해 시스템 및 애플리케이션 메트릭을 수집하고(/actuator/metrics, /actuator/health), Grafana 대시보드에서 서비스 상태 및 리소스 사용량을 실시간으로 모니터링

Loki를 활용한 로그 수집 및 쿼리도 지원.

  1. MinIO S3 호환 오브젝트 스토리지로 사용자 프로필 이미지, 공연장 썸네일, AI 분석 결과물 등을 저장.

Java(MinioClient) 및 Python(minio) 클라이언트를 통해 각 마이크로서비스와 통합.

  1. Nginx Frontend 컨테이너 내에서 SPA 라우팅을 처리하며, Gzip 압축 및 정적 파일 캐싱(1년)을 통해 성능을 최적화.

모든 클라이언트 라우트를 index.html로 리다이렉트하여 React/Vue SPA를 지원.

본인 구현 사항

· Redis / Kafka기반, 대기열 내 등수 업데이트 / 빠져나감 기능 구현 (100%)

· MongoDB기반, 각 단계별 소요 시간 로그 기록 (33%)

· Redis 기반, 최종적인 사용자의 등수 집계 기능 구현 (40%)

· 경기 메타 데이터/랭킹 집계 통계서버 구축 (100%)

· Captcha 서버를 통한 보안문자 생성 기능 구현. (100%)

· Grafana, Loki 등 모니터링 툴을 통한 문제 상황 진단 및 디버깅

기술적 세부 사항

[BackEnd]

1)Ticketing Server

· Redis / Kafka 기반, 대기열 기능 / 분산 처리 환경에서 이벤트 기반 처리 구현

· 멀티 스레드 처리 기반 방별 등수 처리 로직 구현 - 대용량 트래픽 처리 속도 향상

· 비동기 멀티 스레드 처리 - 경기 시작 시 설정 관련 API 요청, 저장 관련 데이터에 대한 응답 속도 향상

· Redis 기반 경기 경기 종료 후 사용자 등수 집계 시, 데이터 업데이트 유실 문제 해결

· 등수 업데이트 스케줄러를 위한 전용 스레드 풀 생성 – 효율적인 스레드 관리 구현

  1. Stats Server

· Ranking 알고리즘 구현

->등수 점수 기반, 총 인원수, 난이도, 구간별 기록 등 반영해 랭킹 점수에 반영

· 매치 메타 데이터 및 랭킹 집계 경기가 끝날 때마다, 경기에 대한 메타 데이터 및 랭킹 집계

· 일정 시간에 배치 단위로 DB에 삽입해서, 영속적인 데이터로 적재

3)Explain/Analyze 이용 쿼리 실행계획/실행문 분석한 인덱스 설계 및 쿼리 구조 개선

· 미집계된 match stats 정보 조회 시, user stats, match stats에서 필요한 colum에 인덱스를 부여

ERD

자율프로젝트_ERD

About

[Backend]실제와 유사한 환경에서 티켓팅을 연습할 수 있는 사이트

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors