Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Kim-Jong-Gyu/Codeterian-Back-end

 
 

Repository files navigation

🥕 CodeTerian

분류 내용
주제 대규모 트래픽 처리 기반 티켓 예매 서비스
팀원 구성 👑 김종규 이유빈 백지연
개발 기간 2024.09.24 ~ 2024.10.25
API 명세서 🔗 API 명세서
테이블 명세서 🔗 테이블 명세서

🎫 프로젝트 소개

대규모 트래픽을 안정적으로 처리하며, 사용자에게 정확하고 신뢰성 있는 티켓 예매 경험을 제공하는 MSA기반의 티켓 예매 서비스 입니다.

🥅 프로젝트 목표

  • MSA 구조를 통해 대용량 트래픽을 안정적으로 처리
  • Elasticsearch를 활용한 빠른 검색 기능을 제공
  • 대기열 구현을 통해 사용자 요청을 효과적으로 관리하여 시스템 과부화를 방지하고, 예매 과정의 응답성을 향상

🚧 인프라 설계도

인프라

📝 ERD

스크린샷 2024-10-23 오후 12 15 36

🔧 주요 기능

1. Elasticsearch를 통한 공연 검색

  • 키워드 검색 :
    • 사용자는 검색창에 원하는 키워드를 입력하여 공연을 검색할 수 있습니다.
  • 검색 결과 :
    • 검색 결과는 공연 제목, 공연 설명, 공연 위치에서 유사한 키워드를 기반으로 반환됩니다.
    • 제목 필드가 가장 높은 가중치를 부여받아, 제목과의 일치 여부가 검색 결과에 큰 영향을 미칩니다.
  • 페이징 처리 :
    • 기본 페이지 사이즌 10으로 설정되어 있어, 한 페이지에 최대 10개의 검색 결과만 표시됩니다.
    • 사용자는 페이지를 전환하여 추가적인 검색 결과를 쉽게 탐색할 수 있습니다.

2. 주문 -> 결제 시스템

  • Kafka를 활용해 비동기 주문 시스템
  • 외부 결제 API를 활용하여, 결제 테스트

3.대기열 시스템

  1. 대기 큐와 실행 큐를 구분하여 관리
  • 실행 큐에 인원 제한을 둔다.
  • 서버 부하를 줄이기 위해 제한된 수의 사용자만이 실제 예매 작업을 실행할 수 있도록 한다.
  1. 새로고침을 할 경우 대기열에서 삭제되고 가장 후순위로 재배치
  • 사용자들이 대기열에서 불리한 상황을 방지하기 위해 무분별한 새로고침을 제한하고, 공정한 대기 시스템을 유지하도록 한다.
  1. 대기열에 등록된 시간을 score로
  • 동일한 시간에 접속한 사용자들이 있을 때 순서 문제를 해결하기 위해 대기 순서를 등록된 시간으로 관리한다.
  1. WebSocket을 통해 실시간으로 대기 순서 정보 제공
  • 대기 중인 사용자가 자신의 순서를 실시간으로 확인하여 대기 시간을 예측할 수 있게 함으로써 사용자 만족도를 높임.

💻 적용 기술

□ Kafka

대용량의 실시간 데이터 스트리밍과 분산 메시지 처리를 안정적이고 확장 가능하게 관리하며, 시스템 간의 비동기 통신과 이벤트 중심 아키텍처를 구현하기 위해 도입했습니다.

□ Redis

인메모리 데이터베이스로 높은 성능을 보장하고, 다양한 자료구조와 라이브러리 등을 통해 캐싱, 분산 락 같이 다양한 분야에서 활용이 가능합니다.

□ Elasticsearch

대용량 데이터를 실시간으로 빠르게 검색하고, 로그 분석 및 검색 쿼리에 최적화된 검색 엔진으로, 공연 검색을 하는데 있어 효율적인 데이터 인덱싱과 고성능 검색을 지원합니다.

□ WebSocket

HTTP 통신에서 발생하는 지속적인 요청/응답 비용을 줄이고, 사용자에게 실시간으로 대기열 순서 정보를 효율적으로 제공하기 위해 도입했습니다. 서버와 클라이언트 간의 지속적인 양방향 통신을 가능하게 하여, 대기열 상태 변화나 알림을 지연 없이 전달할 수 있습니다.

🛠️ 개발 환경

  • Backend Java Spring Boot Spring Security Spring JPA JWT Gradle Elasticsearch Kafka

  • DB postgresql redis

  • Architecture Microservices Architecture API Gateway Docker

  • Tools Github intellij IDE Postman Notion

  • Monitoring grafana prometheus

  • Test apachejmeter

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 98.6%
  • Other 1.4%