
Team
🗃️ Github
GitHub - SportsEcho/EchoProject-BE: 스프링 부트 백엔드 최종 프로젝트
GitHub - SportsEcho/EchoProject-FE: 스프링 부트 백엔드 최종 프로젝트 (프론트)
📽️ 시연 영상
SportsEcho 최종발표 영상
🗒️ 발표 자료
_SportsEcho (1).pptx
1. 프로젝트
- 프로젝트 명: Echo
- 소개
- 프로젝트 주제: 스포츠 종목의 경기 일정 및 경기 결과 데이터를 제공하고 상품 판매, 핫딜 기능을 제공하는 웹서비스입니다.
- 프로젝트 개요:
- 경기 일정 및 결과, 댓글 도메인에 대용량 데이터를 추가하여 데이터 최적화와 전 후 nGrinder 이용해 성능 테스트를 진행합니다.
- 핫딜 기능에 Redis, JPA를 이용해 대용량 트래픽에 대한 정합성, 동시성 처리가 가능한 웹서비스를 만들고자합니다.
- 프로젝트 백엔드 아키텍처
- 개발 과정에서 사용할 기술
-
스포츠 경기 일정 및 결과 서비스
- 사용자는 축구(EPL), 농구(NBL), 야구(MLB) 종목의 최신 경기 일정 및 결과(Rapid API를 사용)를 확인할 수 있습니다.
- Rapid API의 호출을 이용해서 축구, 농구, 야구 분야에서 경기 일정 및 결과 데이터를 가져와 DB에 저장합니다.
- 경기 결과 데이터는 Scheduler를 이용해 15분에 한 번씩 업데이트를 진행합니다.
- Timezone 최소 단위와 RepidAPI 호출 가능 토큰 갯수를 고려해 15분으로 결정했습니다.
- scale-out 가능한 서버를 구성할 경우 외부로 Scheduler를 분리해 이벤트를 발생시킬 예정입니다.
- RapidAPI 응답 json 데이터 예제 이미지
- 각 스포츠 경기의 상세 정보에는 팀 구성, 경기 시간 및 장소가 포함됩니다.
- 각 스포츠 경기 일정의 경우 사용자들이 댓글을 달 수 있습니다.
-
핫딜 및 상품 구매 서비스
- 스포츠 유니폼, 사인볼, 기념품 등 다양한 상품을 핫딜 형태로 제공합니다.
- 사용자는 상품 검색, 리뷰 확인, 장바구니 기능 등을 이용하여 쉽게 구매할 수 있습니다.
- 특별 행사 및 할인 정보도 제공하여 사용자가 최상의 거래를 할 수 있도록 합니다.
- Redis Sorted Set을 활용하여 사용자들의 요청을 시간 순서대로 정렬하여 순차적으로 처리함으로써 DB에 가해지는 부하를 효과적으로 분산 시킬 수 있습니다.(예정)
- 데이터 무결성의 보장이 중요하다고 생각되어 비관적 락을 채택하여 동시성 문제를 해결하였습니다.(예정)
-
WebSocket기반 STOMP를 이용한 응원 댓글 작성 서비스
- 사용자들은 각 경기별로 응원 채팅 기능을 이용할 수 있습니다.
- Sub/Pub 구조의 STOMP를 이용하며 사용자들은 게임 채팅방 입장시 게임 id에 맞는 topic을 구독(Sub)하게 됩니다.
- 특정 사용자가 게임 채팅방에 메세지를 전송(Pub)하면 게임 채팅방을 구독하고있는 모든 사용자들에게 이벤트가 발생되고 메세지를 출력하는 형식으로 동작합니다.
-
대용량 데이터 처리
- 경기 일정, 결과, 사용자 댓글 등 대용량의 데이터 처리를 위해 효율적인 데이터베이스 설계를 채택합니다.
- 데이터베이스 쿼리 최적화, 캐싱 전략, 데이터 파티셔닝 등을 통해 빠른 데이터 처리 속도를 보장합니다.
-
대용량 트래픽 대응
- 스포츠 이벤트 동안 발생하는 급격한 트래픽 증가에 대비하여 확장 가능한 서버 구조를 설계합니다.
- 재고가 n개인 핫딜 상품이 출시되었을때, 유저 n*100명이 동시에 서비스에 접근해 트래픽이 발생하는 경우
- 로드 밸런싱, 오토 스케일링, CDN 사용 등을 통해 사용자 경험을 최적화합니다.
-
대용량 데이터 처리 및 트래픽 대응의 경우 대용량 데이터 처리는 예를 들어, 100~300만건의 댓글 데이터를 가지고 nGrinder를 이용한 부하테스트 및 최적화. 디비 인덱싱 등.. 을 한다
2. 기획 관련 메모
UseCase
3. WBS & Tasks
- 진유록
- 정지성
- 문정현
- 김지현
- 애덤스미스 보이지 않는 손
🌠오늘의 질문 (팀장 마음대로 내는 문제) TIL에 작성해주시고 링크를 밑에 적어주시면 팀장이 답변도 보러가요~!
- 1월 4일 트랜잭션은 무엇인가요? 트랜잭션의 격리 레벨은 아시나요?
- 1월 5일 객체지향 프로그램은 무엇인가요???그 중에서도 오버로딩과 오버라이딩의 차이에 대해 설명해 주세요!!!!!!!!
- 1월 8일 RDBMS, NoSQL에서의 클러스터링/레플리케이션 방식이 뭔가요???
- 1월 9일 AOP는 무엇인가요?? 설명해주세요~
- 1월 10일 Redis란 무엇인가요???자세히 알려주세요
- 1월 11일 AOP는 무엇인가요???
- 1월 12일 JPA와 같은 ORM을 왜 사용하죠?
- 1월 15일 프로그램이 컴파일되어 실행되는 과정을 알려주세요
아무도 답을 안달아서 속상한 팀장은 그만두기로 했다고 한다….
→ 진짜 너무하시다…. 팀장님 마상
🌠튜터님의 질문
-
- 경기결과가 실시간으로 업데이트 되는 기능이 명시 되어있는데, 기술적으로 어떻게 구현을 할지 구체적으로 설명해주세요! (다이어그램 플로우도 같이 첨부되면 더 좋습니다.)
4. 와이어프레임
5. API 명세서 (구현 기능 안에 상세 설명 추가)
Member
Game
Comment
Product
HotDeal
MemberProduct
Purchase
6. ERD DIAGRAM
- Entity Relationship Diagram V0.1 (2024-01-04)
- Entity Relationship Diagram V0.2 (2024-01-05)
- Entity Relationship Diagram V0.3 (2024-01-10)
7. Backend Architecture