Conversation
- UUID 세션 토큰 → JWT(HS256, 24시간 만료)로 교체 - 인증 코드 만료 5분 → 3분으로 변경 - GlobalExceptionHandler 예외 로깅 추가 (500은 ERROR, 400/429는 DEBUG) - 로컬 요청/응답 로깅 필터 추가 (RequestLoggingFilter) - Jackson Kotlin 모듈 명시 등록 및 javaParameters 활성화로 역직렬화 문제 해결 - GmailSenderAdapter from 주소 누락 수정
- OncePerRequestFilter 기반 JWT 인증 필터 추가 - flow 파라미터(SUBSCRIBE/SETTINGS)로 회원 존재 여부 분기 처리 - 이메일 발송 실패 시 저장된 코드 롤백하도록 순서 변경 - MemberCheckAdapter를 app 모듈에 배치해 auth→member 의존 제거
- Member, SubscriptionPreference 도메인/JPA 엔티티 분리 및 도메인 검증 로직 추가 - 인증 코드 검증 시 SUBSCRIBE 플로우면 회원+기본 구독 설정 자동 생성 - 구독 설정 조회/수정, 구독 해지(= 회원 탈퇴) 및 가입자 수 조회 API 구현 - 포트/UseCase 파일 단일 클래스로 분리 - Spring Boot 4 JPA 설정(@AutoConfigurationPackage) - 응답에서 success 필드 제거
- event 모듈 추가: MarathonEvent 도메인, JPA 엔티티, QueryDSL 기반 활성 대회 조회 - 알림 스케줄러 추가: 매시간 구독자 조건 매칭 후 HTML 이메일 발송 (200ms 스로틀링) - 구독 성공 시 웰컴 메일 발송: WelcomeMailPort 정의 및 WelcomeMailAdapter 구현 - MemberPort에 findAll() 추가, @EnableScheduling 활성화 - app 모듈에 event 의존성, spring-boot-starter-mail, querydsl-jpa:7.0 추가
- Member, SubscriptionPreference, MarathonEvent 도메인 단위 테스트 - AuthCodeService, VerifyAuthCodeService, SubscriptionService MockK 단위 테스트 - NotificationScheduler 단위 테스트 - Testcontainers PostgreSQL 기반 QueryDSL 통합 테스트
- SubscriptionPreference 수신 시간 08:00/12:00/18:00 도메인 검증 추가 - 스케줄러 cron을 매시간 → 08:00, 12:00, 18:00 고정으로 변경 - GmailSenderAdapter, NotificationMailAdapter, WelcomeMailAdapter를 단일 MailAdapter로 통합 - 발신자 표시명 spring.mail.from-name 프로퍼티로 외부화
- JwtTokenAdapter를 auth → app 모듈로 이동, jjwt 의존성도 app으로 이동 - JwtAuthenticationFilter, RequestLoggingFilter를 config/ → filter/ 패키지로 이동
- TokenPort.generateToken에 role 파라미터 추가, extractRole 신규 구현 - 인증 코드 검증 시 회원 role 조회 후 JWT claim에 포함 - JwtAuthenticationFilter에서 /api/v1/admin/** 경로 ADMIN role 미보유 시 403 반환
- admin 모듈 추가 및 테스트 메일 발송 API (POST /api/v1/admin/mails/test-send) 구현 - NotificationMailPort를 app → event 모듈로 이동 (순환 의존 해소) - app/notification/ → app/scheduler/ 패키지 이름 변경
- 전체 테스트 파일에 given/when/then 구분 주석 추가 - 예외 검증 테스트는 when & then으로 통합 표기 - 미사용 import 및 패키지 이동으로 끊긴 import 수정 - 테스트 메서드명을 영어 snake_case + @DisplayName 한국어 조합으로 변경
- MemberRole enum 값 USER를 MEMBER로 변경 - 관련 도메인, 어댑터, 서비스, 테스트 전체 반영
- app/config 서브모듈 추가 (비밀값 분리, backend-config 프라이빗 레포) - Dockerfile 추가 (eclipse-temurin:21-jre, -Xmx400m) - docker-compose.prod.yml 앱 서비스 추가 (포트, 환경변수, depends_on) - infra/sql/schema.sql DDL 스크립트 추가
- OPEN+UPCOMING 이벤트 포함, 메일 1통당 최대 10개 제한 - OPEN은 신청 마감일 오름차순, UPCOMING은 신청 시작일 오름차순 정렬 - from-email 프로퍼티 분리 (SMTP username ≠ 발신 주소)
- application-test.yml gitignore에서 제외 후 커밋 (더미값만 포함) - bootRun 워킹 디렉터리 명시 (app/config 서브모듈 인식용)
- develop 푸시 시 CI, main 푸시 시 CI+CD 자동 실행 - ghcr.io Docker 이미지 빌드/푸시 - EC2 임시 IP 허용 후 배포, 완료 후 IP 제거 - Actions 해시 고정으로 supply chain 공격 방어
- findActiveByRegions 참조를 findOpenByRegions으로 일괄 변경 - OPEN 이벤트 정렬 기준을 regEndDate 오름차순으로 테스트 수정 - OPEN → UPCOMING 순 정렬 검증 테스트 추가
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
배포 테스트