[사이드프로젝트] 1. 오늘의 크보(Today's KBO) - 프로젝트 구상도
본문 바로가기
Project

[사이드프로젝트] 1. 오늘의 크보(Today's KBO) - 프로젝트 구상도

by 코딩하는 핑가 2025. 6. 6.
반응형

⚠️ 이 프로젝트는 KBO 공식 API가 아닌 스포키 웹사이트의 공개 화면 요청화면을 분석해 데이터를 수집하였으며, 비상업적 목적의 학습용/포트폴리오 용도로만 사용됩니다.
데이터의 소유권은 KBO 및 스포츠투아이㈜, 스포키에 있으며, 해당 정보는 상업적으로 사용되지 않습니다.


1️⃣ 서비스 개요

항목 설명
서비스명 오늘의 크보 (Today’s KBO)
기간 2025년 06월 ~ 2025년 8월
인원 총 2명 (  프론트앤드 개발자 1명, 백앤드 개발자 1명 )
주요기능 KBO 경기 정보 요약, 팀/선수 정보, 실시간 순위, 커뮤니티
 

2️⃣ 핵심 기술 스택

계층 주요 기술
Frontend React Native (Expo), Axios, i18n
Backend Spring Boot, JPA, MySQL, JWT, Swagger
크롤링/배치 Python (BeautifulSoup/Selenium), Spring Scheduler / Batch
데이터 처리 Kafka
CI/CD & 배포 Cloudtype, GitHub Actions, (후에 EC2 + Nginx + Docker)
Storage Cloudinary (하이라이트)
문서화 Swagger + Notion

3️⃣ 주요 목표

1. DB 스키마 직접 설계 및 ERD 작성
2. 실시간 외부 데이터 크롤링 후 스케줄링 저장
3. API 명세 -> Swagger 자동화
4. JWT 기반 인증 구현
5. 프론트/백앤드 협업을 위한 Git Flow 체계 적용
6. WebSocket 또는 Kafka로 실시간 경기 상황 중계 및 반영
7. 클라우드 배포 자동화 구성

4️⃣ 백엔드 구성 흐름

[사용자 앱 (React Native)]
          │
          ▼ REST API 요청 (GET/POST)
     [Spring Boot 서버 (Cloudtype 배포)]
     ├────────────┬─────────────────────────────┬────────────────────┐
     │            │                             │                    │
     ▼            ▼                             ▼                    ▼
[MySQL]     [크롤링 모듈]                  [Kafka Producer]     [Kafka Consumer]
(영속 저장)   (Selenium/BS4)                   (Spring or Python)    (Spring)

사용자/경기/    └─ Spring Batch               ┌───────────────┐    ┌─────────────┐
커뮤니티 등          (매일 00:00)              ▼               ▼    ▼             ▼
정보 저장           경기정보 크롤링     → Kafka Topic: games → Game 저장     알림/썸네일 생성
                                         (도커 컨테이너)         Highlight 저장 등

 5️⃣ 시스템 구성도

사용자 앱 (React Native)

  1. 사용자는 모바일 앱을 통해 REST API로 서버에 요청을 보냄
  • 예: /api/v1/games/today 요청

Spring Boot 서버

  1. 클라우드 플랫폼인 Cloudtype에 배포되어 있는 Spring Boot 앱이 API 요청을 처리함
  • 주요 기능:
    • REST API 제공
    • 정기 크롤링을 위한 스케줄링 (Spring Batch)
    • Kafka 메시지 프로듀서 & 컨슈머 역할 수행

크롤링 모듈 (내부 포함)

  1. Selenium, BeautifulSoup 등을 활용해 경기 정보를 크롤링
  2. 매일 00:00에 Spring Batch가 실행되어 최신 경기 데이터를 수집

Kafka Producer

  1. 크롤링된 경기 정보를 Kafka Topic에 메시지로 전송

Kafka

  1. 도커 컨테이너로 실행

Kafka Consumer (Spring Boot 내부)

  1. Spring Boot에 내장된 Kafka Consumer가 메시지를 받아 처리함
  2. 메시지를 받아서 다음 작업을 수행함:
    • Game/Highlight 정보 MySQL에 저장
      • 기존: JpaRepository 사용하여 동기 처리
      • 변경: LinkedBlockingQueue로 바꿔서 비동기 DB 처리 해보기
      • 알림 전송 준비 (썸네일 이미지 처리 포함 가능)

DB (MySQL)

  1. 사용자, 경기 정보, 커뮤니티 게시물 등의 모든 데이터가 저장됨
  2. /api/v1/games/today 같은 API에서 필요한 데이터를 조회함

배포 플랫폼: Cloudtype

  1. 초기에는 Cloudtype을 사용해 Spring Boot 서버와 MySQL 컨테이너를 함께 구성 가능
  2. Kafka는 별도 도커 컨테이너로 로컬 또는 클라우드에서 동작

역할 요약

구성 요소 설명
React Native 앱 사용자 인터페이스, REST API로 백엔드 통신
Spring Boot 메인 서버: API 처리, Kafka 통신, 배치 실행 등
MySQL 사용자, 경기 기록, 게시글 등 영속 데이터 저장
크롤링 모듈 Selenium/BeautifulSoup 기반 경기 정보 수집
Spring Batch 매일 정해진 시간에 크롤링 자동 실행
Kafka Producer 크롤링된 경기 데이터를 Kafka 메시지로 전송
Kafka (Docker) 메시지 중계자 역할, 도커 컨테이너로 구동
Kafka Consumer Spring Boot에서 메시지 수신 후 DB 저장 또는 추가 처리
Cloudtype Spring Boot 앱을 배포하는 플랫폼 (MySQL 컨테이너 포함 가능)

구성 아키텍처

[크롤러 (Python + Selenium, 스케줄링)]
        │
        ▼ Kafka Producer
        │
        ▼
[Kafka Topic: games]   ← 도커 컨테이너로 실행 중
        │
        ▼ Kafka Consumer (@KafkaListener)
[Spring Boot 서비스 계층]
        │
        ▼ JPA
[MySQL 저장소]
        │
        ▼
[API 컨트롤러: /api/v1/games/today]

6️⃣ 도메인 구성 요약

도메인 설명
User 로그인, 마이팀, 커뮤니티 활동자
Team KBO 구단 정보
Game 경기 결과
GameSchedule 경기 일정
Player 선수 기본 정보
PlayerStat 개인 기록
TeamStat 팀 순위
Post / Comment / Like 커뮤니티 게시글/댓글/좋아요
Highlight 하이라이트 영상
 

7️⃣ 개발 일정 및 흐름 

주차 작업 내용
1주차 ERD 설계, 프로젝트 세팅, Git 브랜치 전략 수립
2~3주차 로그인, 팀/선수 정보 API, React Native 연동
4~5주차 경기 일정/결과 크롤링 및 API 구현
6주차 커뮤니티 기능, 하이라이트 영상 연동
7주차 통합 테스트, 예외처리, Swagger 문서 정리
8주차 배포 → 발표용 준비 & 회고 작성

 

반응형

댓글