Skip to content

Conversation

@unifolio0
Copy link
Contributor

@unifolio0 unifolio0 commented Oct 4, 2025

🚩 Jira Ticket

SCRUM-117

🗣️ 리뷰 요구사항 (선택)

Summary by CodeRabbit

  • 신기능
    • Kafka 기반 알림 수신과 웹 푸시 알림 발송 기능을 추가했습니다.
    • 알림 환경설정 및 알림 이력 저장이 가능해졌습니다.
    • 개발/로컬/테스트 환경용 메일·Kafka 설정을 추가했습니다.
  • 개선/버그 수정
    • 웹 푸시 구독 시 기존 구독이 있으면 키(p256dh, auth)를 갱신하도록 동작을 개선했습니다.
  • 리팩터
    • 웹 푸시 관련 패키지를 notification.* 네임스페이스로 통일했습니다.
  • 작업
    • develop 브랜치용 CI/CD 워크플로(dev-ci, dev-cd)를 추가했습니다.
    • .gitignore에 .serena/ 디렉터리를 추가했습니다.

@unifolio0 unifolio0 self-assigned this Oct 4, 2025
@coderabbitai
Copy link

coderabbitai bot commented Oct 4, 2025

Caution

Review failed

The pull request is closed.

Walkthrough

develop 브랜치용 CI/CD 워크플로우를 추가하고, 배포 스크립트를 도입했습니다. 알림 시스템을 도입하여 Kafka 소비자, 전송 추상화(Sendder), WebPush 구현, JPA 엔티티/리포지토리, 스키마 및 환경설정을 추가했습니다. WebPush 패키지를 notification 네임스페이스로 이동/정비하고 테스트를 경로 변경에 맞게 수정했습니다.

Changes

Cohort / File(s) Summary
CI/CD 워크플로우
.github/workflows/Dev_CD.yml, .github/workflows/Dev_CI.yml
develop 푸시/PR 트리거 워크플로우 추가. 재사용 CI 호출, JDK 21 설정, Gradle 빌드/테스트, 아티팩트 업로드/다운로드, 스크립트 배포 실행 포함.
배포 스크립트
scripts/dev/replace-new-version.sh
8080 포트 프로세스 종료, 최신 JAR 선택, 로그 파일 구성, 프로필/타임존 옵션으로 백그라운드 실행.
빌드/의존성
build.gradle
spring-boot-starter-mail, spring-kafka 의존성 추가.
애플리케이션 설정
src/main/resources/application-*.yml, src/main/resources/local-secret.yml
dev/local/test 프로파일에 메일, Kafka, 데이터소스, VAPID, CORS 등 설정 추가. 로컬 시크릿 예시 파일 추가.
DB 스키마
src/main/resources/schema.sql
push_subscription 컬럼 길이 확장/인덱스 추가. notification_enabled, notification_history 테이블 신설 및 인덱스 추가.
Kafka 설정/소비자
src/main/java/com/wellmeet/config/KafkaConfig.java, .../notification/consumer/*
Kafka 설정 빈 추가. NotificationConsumer/NotificationSender 구현 및 DTO(NotificationMessage, NotificationInfo, MessageHeader, NotificationType) 추가.
알림 도메인/리포지토리
.../notification/domain/*, .../notification/repository/*
NotificationChannel enum, NotificationEnabled, NotificationHistory 엔티티와 해당 JPA 리포지토리 추가.
전송 추상화 및 WebPush 구현
.../notification/Sender.java, .../notification/webpush/...
전송 인터페이스 Sender 도입. WebPush 컴포넌트 패키지 이동 및 WebPushSenderSender 구현, 구독 리포지토리 주입/브로드캐스트 로직 추가. 컨트롤러/서비스 및 DTO 경로 정리.
테스트 경로 정리/행동 반영
src/test/java/com/wellmeet/...
패키지 경로 변경에 따른 import 수정. 구독 업데이트 동작에 맞춘 검증 수정.
기타
.gitignore
.serena/ 디렉터리 무시 규칙 추가.

Sequence Diagram(s)

sequenceDiagram
  autonumber
  actor Dev as Developer
  participant GH as GitHub Actions
  participant CI as dev-ci
  participant CD as dev-cd
  participant S as Deploy Script

  Dev->>GH: push to develop / PR to develop
  GH->>CI: Run dev-ci (build & test)
  CI-->>GH: Test results
  GH->>CD: Run dev-cd on push to develop
  CD->>CD: Build bootJar, upload artifacts
  CD->>S: Download artifacts & execute replace-new-version.sh
  S->>S: Kill :8080, start app.jar (nohup) with profiles
  S-->>CD: Deployment logs path
Loading
sequenceDiagram
  autonumber
  participant K as Kafka (topic: notification)
  participant C as NotificationConsumer
  participant ER as NotificationEnabledRepository
  participant NS as NotificationSender
  participant HR as NotificationHistoryRepository
  participant WS as WebPushSender (Sender)

  K-->>C: NotificationMessage
  C->>ER: findByUserIdAndType(userId, type)
  ER-->>C: List<NotificationEnabled>
  C->>NS: send(message, enables)

  loop for each enabled channel
    NS->>HR: save(new NotificationHistory(userId))
    NS->>WS: send(message) [if WS.isEnabled(channel)]
    WS->>WS: Build payload
    WS->>Repo: find subscriptions by user
    alt subscriptions found
      WS-->>WS: Send to each subscription
    else no subscription
      WS-->>WS: Throw / handle absence
    end
  end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

Suggested reviewers

  • ezcolin2

Poem

새싹 브랜치에 톡톡, 토끼 발자국
카프카 바람 타고 알림이 둥실 둥실
웹푸시 꽁지로 딩동! 메일은 살짝-
스키마도 반짝, 파이프라인은 착착
app.jar 뛰어라—딸깍! 배포 완료 🐇✨

✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

📜 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 2cd6970 and a3f42c1.

📒 Files selected for processing (36)
  • .github/workflows/Dev_CD.yml (1 hunks)
  • .github/workflows/Dev_CI.yml (1 hunks)
  • .gitignore (1 hunks)
  • build.gradle (1 hunks)
  • scripts/dev/replace-new-version.sh (1 hunks)
  • src/main/java/com/wellmeet/config/KafkaConfig.java (1 hunks)
  • src/main/java/com/wellmeet/notification/Sender.java (1 hunks)
  • src/main/java/com/wellmeet/notification/consumer/NotificationConsumer.java (1 hunks)
  • src/main/java/com/wellmeet/notification/consumer/NotificationSender.java (1 hunks)
  • src/main/java/com/wellmeet/notification/consumer/dto/MessageHeader.java (1 hunks)
  • src/main/java/com/wellmeet/notification/consumer/dto/NotificationInfo.java (1 hunks)
  • src/main/java/com/wellmeet/notification/consumer/dto/NotificationMessage.java (1 hunks)
  • src/main/java/com/wellmeet/notification/consumer/dto/NotificationType.java (1 hunks)
  • src/main/java/com/wellmeet/notification/domain/NotificationChannel.java (1 hunks)
  • src/main/java/com/wellmeet/notification/domain/NotificationEnabled.java (1 hunks)
  • src/main/java/com/wellmeet/notification/domain/NotificationHistory.java (1 hunks)
  • src/main/java/com/wellmeet/notification/repository/NotificationEnabledRepository.java (1 hunks)
  • src/main/java/com/wellmeet/notification/repository/NotificationHistoryRepository.java (1 hunks)
  • src/main/java/com/wellmeet/notification/webpush/WebPushController.java (1 hunks)
  • src/main/java/com/wellmeet/notification/webpush/WebPushService.java (3 hunks)
  • src/main/java/com/wellmeet/notification/webpush/domain/PushSubscription.java (1 hunks)
  • src/main/java/com/wellmeet/notification/webpush/dto/SubscribeRequest.java (1 hunks)
  • src/main/java/com/wellmeet/notification/webpush/dto/SubscribeResponse.java (1 hunks)
  • src/main/java/com/wellmeet/notification/webpush/dto/TestPushRequest.java (1 hunks)
  • src/main/java/com/wellmeet/notification/webpush/dto/UnsubscribeRequest.java (1 hunks)
  • src/main/java/com/wellmeet/notification/webpush/infrastructure/WebPushSender.java (3 hunks)
  • src/main/java/com/wellmeet/notification/webpush/repository/PushSubscriptionRepository.java (1 hunks)
  • src/main/resources/application-dev.yml (1 hunks)
  • src/main/resources/application-local.yml (2 hunks)
  • src/main/resources/application-test.yml (1 hunks)
  • src/main/resources/local-secret.yml (1 hunks)
  • src/main/resources/schema.sql (1 hunks)
  • src/test/java/com/wellmeet/BaseControllerTest.java (1 hunks)
  • src/test/java/com/wellmeet/BaseServiceTest.java (1 hunks)
  • src/test/java/com/wellmeet/webpush/WebPushControllerTest.java (1 hunks)
  • src/test/java/com/wellmeet/webpush/WebPushServiceTest.java (3 hunks)

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

Comment @coderabbitai help to get the list of available commands and usage tips.

@unifolio0 unifolio0 closed this Oct 4, 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.

1 participant