Skip to content

배포를 위해 main을 업데이트합니다 - #62

Closed
roode1017 wants to merge 28 commits into
mainfrom
dev
Closed

배포를 위해 main을 업데이트합니다#62
roode1017 wants to merge 28 commits into
mainfrom
dev

Conversation

@roode1017

@roode1017 roode1017 commented Aug 14, 2025

Copy link
Copy Markdown
Contributor

git action 관련 추가
docker-compse 추가
http response를 위한 controller 추가 입니다

Summary by CodeRabbit

  • 신규 기능

    • 드래프트: 실시간 선수 선택 처리 및 참가자별 선택 조회 엔드포인트 추가
    • 매치: 웹소켓 인증(토큰) 적용, 1인 1세션 관리, 타임아웃 시 자동 매칭·드래프트 시작 알림
    • 플레이어: 캐시 적재/조회 API, ES 기반 검색 API 추가
    • 포지션(엘리먼트 타입) 전체 조회 API 추가
    • 시즌 최고 점수 조회 API 추가
    • 헬스 체크(/health) 추가
  • 변경

    • 드래프트 STOMP 엔드포인트 및 토픽 경로 정비
    • 드래프트 오픈/락 시간 앞당김
    • 보안 설정 완화(임시 공개 엔드포인트 확장)
  • 작업

    • GitHub Actions 배포 워크플로우 추가
    • 테스트 프로파일/DB 설정 개선

wjkim9 and others added 26 commits August 8, 2025 14:47
Elasticsearch 의존성 제거
시간이 지나면 자동으로 드래프트를 생성하고,
생성한 내용을 바탕으로 사용자들의 페이지를 이동 시킴
통합 후 수정 작업 진행중
드래프트 생성
참가자 배정
채팅방 생성
Feature/#43 선수 검색 기능 추가
배포를 위한 docker-compose 파일 추가 및 securityConfig 수정, deploy 파일 추가
@coderabbitai

coderabbitai Bot commented Aug 14, 2025

Copy link
Copy Markdown

Caution

Review failed

The pull request is closed.

Walkthrough

메인/테스트/인프라 전반에 걸친 대규모 변경. 배포 워크플로우 추가, Docker Compose(prod) 도입, 드래프트 실시간 처리 로직을 서비스/STOMP 중심으로 재구성, WebSocket JWT 인증 도입 및 매치 타임아웃/배정 기능 추가, 선수 캐시+Elasticsearch 검색 계층 추가, 시즌 누적 점수 집계 도입, 보안/Redis/Kafka 설정 조정, 헬스체크/테스트 환경 업데이트.

Changes

Cohort / File(s) Summary
CI/CD 배포
.github/workflows/deploy.yml
main 푸시 시 Gradle 빌드→EC2 전송→Docker Compose 배포 및 선택적 CloudFront 무효화 워크플로우 추가.
배포 아티팩트
docker-compose-prod.yml
API(2개), Redis(3개), Elasticsearch, Zookeeper, Kafka 스택 구성 및 헬스체크/네트워크 정의.
빌드/테스트 설정
backendProject/build.gradle, .../src/test/java/.../BackendProjectApplicationTests.java, .../src/test/resources/application-test.yml, .../src/main/resources/application-dev.example.properties
ES Java 클라이언트 주석 처리, H2 test 의존성 추가. 테스트 프로파일/프로퍼티 조정(H2 MySQL 모드, 스케줄링/ES 리포 비활성화 등). dev 예시 프로퍼티 내용 제거.
드래프트 리팩터링(서비스/DTO/권한)
.../domain/draft/controller/DraftController.java, .../domain/draft/service/DraftService.java, .../domain/draft/dto/DraftRequest.java, .../domain/draft/dto/DraftResponse.java, .../domain/draft/entity/Draft.java, .../domain/draft/entity/ParticipantPlayer.java, .../domain/draft/repository/ParticipantPlayerRepository.java, .../global/configuration/WebSocketDraftConfig.java, .../global/redis/RedisSubscriber.java, .../global/configuration/WebSocketConfig.java, .../domain/draft/handler/CustomHandshakeHandler.java(삭제), .../domain/draft/handler/StompPrincipal.java(삭제), .../resources/static/draft/websocket.html
컨트롤러 로직을 DraftService로 이관, 드래프트 선택/조회 API 추가, DTO 확장/신규, 엔터티/리포지토리 보강, STOMP 엔드포인트(/ws-draft) 신규 구성과 권한 검증, Redis 토픽 경로 변경(/topic/draft.*), 구 핸드셰이크/Principal 제거, 정적 페이지 STOMP 전환.
WebSocket 인증·매치 플로우
.../global/configuration/AuthHandshakeHandler.java, .../global/configuration/MatchWebSocketConfig.java, .../domain/match/handler/MatchHandler.java, .../domain/match/scheduler/MatchScheduler.java, .../domain/match/service/MatchTimeoutProcessor.java, .../domain/match/service/AssignmentService.java, .../domain/match/controller/AssignmentController.java, .../domain/match/repository/ParticipantRepository.java, .../domain/match/dto/AssignDto.java, .../domain/match/dto/DraftStartMessage.java, .../domain/match/entity/Participant.java, .../domain/match/service/DraftTimingService.java
JWT 기반 핸드셰이크 도입 및 허용 오리진 지정, 매치 핸들러 인증/세션 관리/상태 브로드캐스트/DRAFT_START 통지 추가, 5초 주기 스케줄러로 타임아웃 배정 트리거, 타임아웃 처리 시 드래프트/참가자 생성 및 배정 결과 반환, 배정 조회 API/서비스/리포 메서드 추가, Participant 필드명 조정, 드래프트 오픈/락 시간 변경.
플레이어 캐시/검색(ES)
.../domain/player/cache/controller/PlayerCacheController.java, .../domain/player/cache/service/PlayerCacheService.java, .../domain/player/cache/dto/PlayerDto.java, .../domain/player/elasticsearch/controller/PlayerEsController.java, .../domain/player/elasticsearch/service/PlayerEsService.java, .../domain/player/elasticsearch/repository/PlayerEsRepository.java, .../domain/player/elasticsearch/dto/PlayerEsDocument.java, .../domain/player/entity/Player.java, .../domain/player/service/ElementTypeService.java, .../domain/player/controller/ElementTypeController.java, .../domain/player/dto/ElementTypeDto.java, .../domain/player/entity/ElementType.java, .../global/configuration/RedisConfig.java
전체 선수 Redis 캐시 적재/조회와 ES 동기화 추가, 키워드/포지션 검색용 ES 문서/리포/서비스/컨트롤러 추가, Player/ElementType → DTO 변환기 추가, RedisTemplate 값 직렬화 JSON으로 변경.
시즌 누적 점수
.../domain/user/controller/SeasonUserScoreController.java, .../domain/user/dto/SeasonUserScoreDto.java, .../domain/user/entity/SeasonUserScore.java, .../domain/user/repository/SeasonUserScoreRepository.java, .../domain/user/service/SeasonUserScoreService.java, .../global/scheduler/service/RoundSettlementService.java
시즌 베스트 조회 API/서비스/DTO/리포 추가, 엔터티에 points 필드/빌더 도입 및 score 타입 변경, 라운드 정산 시 시즌 점수 증가/신규 생성 로직 통합.
보안/글로벌 설정
.../global/security/config/SecurityConfig.java, .../global/security/jwt/JwtTokenProvider.java, .../global/security/oauth/CustomUserDetailsService.java, .../global/configuration/KafkaConfig.java, .../global/configuration/FplWebClient.java, .../global/exception/BaseException.java, .../global/exception/ErrorCode.java, .../global/health/HealthController.java
광범위 permitAll 규칙 및 임시 드래프트 경로 허용, JWT에서 Authentication 생성 메서드 추가와 UserDetailsService 도입, Kafka 프로듀서 빈 주석 처리, FPL WebClient 경로/헤더 조정, 예외/에러코드 추가(DRAFT/ PARTICIPANT/ASSIGNMENT), /health 엔드포인트 추가.

Sequence Diagram(s)

sequenceDiagram
  participant Client
  participant STOMP as STOMP Broker
  participant DraftCtrl as DraftController
  participant DraftSvc as DraftService
  participant Redis as Redis Pub/Sub
  participant Sub as RedisSubscriber

  Client->>STOMP: SEND /app/draft/selectPlayer (DraftRequest)
  STOMP->>DraftCtrl: dispatch selectPlayer()
  DraftCtrl->>DraftSvc: selectPlayer(draftRequest, principal)
  DraftSvc->>Redis: publish room.{draftId} (JSON)
  Redis-->>Sub: message (DraftRequest)
  Sub->>STOMP: convertAndSend /topic/draft.{draftId}
  STOMP-->>Client: MESSAGE (DraftRequest payload)
Loading
sequenceDiagram
  participant Scheduler as MatchScheduler(5s)
  participant Timing as DraftTimingService
  participant Processor as MatchTimeoutProcessor
  participant Repo as JPA Repos
  participant WS as MatchHandler

  Scheduler->>Timing: getNextDraftWindowOrThrow()
  Scheduler->>Processor: processTimeoutAndInsert()
  Processor->>Repo: create Draft/Participants (real/dummy)
  Processor-->>Scheduler: Map<userId, AssignDto>
  loop for each user
    Scheduler->>WS: notifyDraftStart(userId, draftId, userNumber)
    WS-->>User: DRAFT_START message
  end
Loading
sequenceDiagram
  participant Browser
  participant WS as WebSocket Server
  participant Auth as AuthHandshakeHandler
  participant JWT as JwtTokenProvider
  participant Sec as SecurityContext

  Browser->>WS: Handshake /ws/match?token=Bearer xxx
  WS->>Auth: determineUser()
  Auth->>Sec: has Authentication?
  alt none
    Auth->>JWT: validate + getAuthentication(token)
    JWT-->>Auth: Authentication
  end
  Auth-->>WS: Principal or null
  WS-->>Browser: Accept or Reject
Loading

Estimated code review effort

🎯 5 (Critical) | ⏱️ ~90+ minutes

Possibly related PRs

Suggested labels

enhancement

Suggested reviewers

  • wjkim9
  • Kim-Jaehyun0328
  • jaehyeok-code

Poem

깡총깡총, 코드밭에 발자국 두 줄,
STOMP로 속삭여, 드래프트가 출발!
토큰은 깜빡, 핸드셰이크는 똑딱,
타임아웃 종 치면 팀들은 착착.
캐시엔 선수, ES엔 별빛 인덱스—
오늘도 릴리즈 당근 한 바구니! 🥕✨

Tip

🔌 Remote MCP (Model Context Protocol) integration is now available!

Pro plan users can now connect to remote MCP servers from the Integrations page. Connect with popular remote MCPs such as Notion and Linear to add more context to your reviews and chats.


📜 Recent review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 3a84605 and e8a0600.

📒 Files selected for processing (58)
  • .github/workflows/deploy.yml (1 hunks)
  • backendProject/build.gradle (2 hunks)
  • backendProject/src/main/java/likelion/mlb/backendProject/domain/draft/controller/DraftController.java (2 hunks)
  • backendProject/src/main/java/likelion/mlb/backendProject/domain/draft/dto/DraftRequest.java (1 hunks)
  • backendProject/src/main/java/likelion/mlb/backendProject/domain/draft/dto/DraftResponse.java (1 hunks)
  • backendProject/src/main/java/likelion/mlb/backendProject/domain/draft/entity/Draft.java (1 hunks)
  • backendProject/src/main/java/likelion/mlb/backendProject/domain/draft/entity/ParticipantPlayer.java (2 hunks)
  • backendProject/src/main/java/likelion/mlb/backendProject/domain/draft/handler/CustomHandshakeHandler.java (0 hunks)
  • backendProject/src/main/java/likelion/mlb/backendProject/domain/draft/handler/StompPrincipal.java (0 hunks)
  • backendProject/src/main/java/likelion/mlb/backendProject/domain/draft/repository/ParticipantPlayerRepository.java (1 hunks)
  • backendProject/src/main/java/likelion/mlb/backendProject/domain/draft/service/DraftService.java (1 hunks)
  • backendProject/src/main/java/likelion/mlb/backendProject/domain/match/controller/AssignmentController.java (1 hunks)
  • backendProject/src/main/java/likelion/mlb/backendProject/domain/match/dto/AssignDto.java (1 hunks)
  • backendProject/src/main/java/likelion/mlb/backendProject/domain/match/dto/DraftStartMessage.java (1 hunks)
  • backendProject/src/main/java/likelion/mlb/backendProject/domain/match/entity/Participant.java (1 hunks)
  • backendProject/src/main/java/likelion/mlb/backendProject/domain/match/handler/MatchHandler.java (2 hunks)
  • backendProject/src/main/java/likelion/mlb/backendProject/domain/match/repository/ParticipantRepository.java (1 hunks)
  • backendProject/src/main/java/likelion/mlb/backendProject/domain/match/scheduler/MatchScheduler.java (1 hunks)
  • backendProject/src/main/java/likelion/mlb/backendProject/domain/match/service/AssignmentService.java (1 hunks)
  • backendProject/src/main/java/likelion/mlb/backendProject/domain/match/service/DraftTimingService.java (1 hunks)
  • backendProject/src/main/java/likelion/mlb/backendProject/domain/match/service/MatchTimeoutProcessor.java (1 hunks)
  • backendProject/src/main/java/likelion/mlb/backendProject/domain/player/cache/controller/PlayerCacheController.java (1 hunks)
  • backendProject/src/main/java/likelion/mlb/backendProject/domain/player/cache/dto/PlayerDto.java (1 hunks)
  • backendProject/src/main/java/likelion/mlb/backendProject/domain/player/cache/service/PlayerCacheService.java (1 hunks)
  • backendProject/src/main/java/likelion/mlb/backendProject/domain/player/controller/ElementTypeController.java (1 hunks)
  • backendProject/src/main/java/likelion/mlb/backendProject/domain/player/dto/ElementTypeDto.java (1 hunks)
  • backendProject/src/main/java/likelion/mlb/backendProject/domain/player/elasticsearch/controller/PlayerEsController.java (1 hunks)
  • backendProject/src/main/java/likelion/mlb/backendProject/domain/player/elasticsearch/dto/PlayerEsDocument.java (1 hunks)
  • backendProject/src/main/java/likelion/mlb/backendProject/domain/player/elasticsearch/repository/PlayerEsRepository.java (1 hunks)
  • backendProject/src/main/java/likelion/mlb/backendProject/domain/player/elasticsearch/service/PlayerEsService.java (1 hunks)
  • backendProject/src/main/java/likelion/mlb/backendProject/domain/player/entity/ElementType.java (3 hunks)
  • backendProject/src/main/java/likelion/mlb/backendProject/domain/player/entity/Player.java (3 hunks)
  • backendProject/src/main/java/likelion/mlb/backendProject/domain/player/service/ElementTypeService.java (1 hunks)
  • backendProject/src/main/java/likelion/mlb/backendProject/domain/user/controller/SeasonUserScoreController.java (1 hunks)
  • backendProject/src/main/java/likelion/mlb/backendProject/domain/user/dto/SeasonUserScoreDto.java (1 hunks)
  • backendProject/src/main/java/likelion/mlb/backendProject/domain/user/entity/SeasonUserScore.java (1 hunks)
  • backendProject/src/main/java/likelion/mlb/backendProject/domain/user/repository/SeasonUserScoreRepository.java (1 hunks)
  • backendProject/src/main/java/likelion/mlb/backendProject/domain/user/service/SeasonUserScoreService.java (1 hunks)
  • backendProject/src/main/java/likelion/mlb/backendProject/global/configuration/AuthHandshakeHandler.java (1 hunks)
  • backendProject/src/main/java/likelion/mlb/backendProject/global/configuration/FplWebClient.java (2 hunks)
  • backendProject/src/main/java/likelion/mlb/backendProject/global/configuration/KafkaConfig.java (1 hunks)
  • backendProject/src/main/java/likelion/mlb/backendProject/global/configuration/MatchWebSocketConfig.java (2 hunks)
  • backendProject/src/main/java/likelion/mlb/backendProject/global/configuration/RedisConfig.java (2 hunks)
  • backendProject/src/main/java/likelion/mlb/backendProject/global/configuration/WebSocketConfig.java (0 hunks)
  • backendProject/src/main/java/likelion/mlb/backendProject/global/configuration/WebSocketDraftConfig.java (1 hunks)
  • backendProject/src/main/java/likelion/mlb/backendProject/global/exception/BaseException.java (1 hunks)
  • backendProject/src/main/java/likelion/mlb/backendProject/global/exception/ErrorCode.java (1 hunks)
  • backendProject/src/main/java/likelion/mlb/backendProject/global/health/HealthController.java (1 hunks)
  • backendProject/src/main/java/likelion/mlb/backendProject/global/redis/RedisSubscriber.java (1 hunks)
  • backendProject/src/main/java/likelion/mlb/backendProject/global/scheduler/service/RoundSettlementService.java (4 hunks)
  • backendProject/src/main/java/likelion/mlb/backendProject/global/security/config/SecurityConfig.java (1 hunks)
  • backendProject/src/main/java/likelion/mlb/backendProject/global/security/jwt/JwtTokenProvider.java (3 hunks)
  • backendProject/src/main/java/likelion/mlb/backendProject/global/security/oauth/CustomUserDetailsService.java (1 hunks)
  • backendProject/src/main/resources/application-dev.example.properties (0 hunks)
  • backendProject/src/main/resources/static/draft/websocket.html (4 hunks)
  • backendProject/src/test/java/likelion/mlb/backendProject/BackendProjectApplicationTests.java (1 hunks)
  • backendProject/src/test/resources/application-test.yml (1 hunks)
  • docker-compose-prod.yml (1 hunks)
✨ Finishing Touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch dev

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

CodeRabbit Commands (Invoked using PR/Issue comments)

Type @coderabbitai help to get the list of available commands.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Status, Documentation and Community

  • Visit our Status Page to check the current availability of CodeRabbit.
  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

hwichoi0317 and others added 2 commits August 14, 2025 14:10
Feature/#43 선수 포지션 리스트 가져오기 기능 개발 및 선수 검색 기능 수정
@roode1017 roode1017 closed this Aug 14, 2025
@roode1017 roode1017 reopened this Aug 14, 2025
@roode1017 roode1017 closed this Aug 14, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants