[Fix] 요일 없는 주간 복습 알림 검증을 앱 버전으로 가른다 - #321
Merged
Merged
Conversation
- #302 로 들어간 검증이 스토어에 나가 있는 구버전 앱 사용자를 막았다. 구버전 앱에는 요일을 고르라는 클라이언트 검증이 없어서 "매주" 만 고른 저장이 그대로 올라오고, 예전 서버는 그 요청을 매일 크론으로 받아 줬다. 그래서 요일이 빈 주간 알림 행을 가진 복습 세트는 제목만 바꿔도 계속 400 이 나 수정할 방법이 없었다 - PracticeNotificationWeekDayPolicy 를 새로 두고 X-App-Version 이 기준 버전(ono.practice-note.week-days-required-version, 기본 4.0.0) 이상인 요청만 400/6003 으로 막는다. 헤더가 없거나 읽을 수 없는 값이면 구버전으로 본다 - 미션의 LegacyAccrualPolicy 는 읽기만 하고 그대로 쓰지 않았다. 거기 붙은 비상 스위치(ono.mission.legacy-accrual.enabled)를 내리면 복습 알림 검증까지 같이 움직이기 때문이다. 공용으로 뺀 것은 AppVersionResolver.isAtLeast 의 버전 비교까지다 - PracticeNotificationScheduler.convertDtoToCron 의 매일 폴백을 되살렸다. 구버전 요청은 예전 서버와 같게 매일로 저장된다. 스케줄러에 있던 검증은 뺐다. 진입부인 PracticeNoteService 에서 이미 걸러지고, 거기서 막아야 Quartz 잡 삭제가 일어나지 않는다 - POST(registerPractice)와 PATCH(updatePracticeInfo) 두 경로 모두에 적용했다 Closes #317
8 tasks
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.
✔️ 연관 이슈
📝 작업 내용
PracticeNotificationWeekDayPolicy한 곳에 뒀습니다.X-App-Version이 기준 버전 이상이면 막고, 헤더가 없거나 읽을 수 없는 값이면 구버전으로 봅니다. 기존 버전 판정과 같은 기준입니다.PracticeNotificationScheduler.convertDtoToCron의 매일 폴백을 되살렸습니다. 구버전 요청은 예전 서버와 같게 매일 크론으로 저장됩니다.registerPractice)와 PATCH(updatePracticeInfo) 두 경로 모두에 적용했습니다.🤔 주요 고민 및 해결 과정
1. 미션의
LegacyAccrualPolicy를 그대로 쓰지 않았습니다LegacyAccrualPolicy에는 자동 적립을 통째로 끄는ono.mission.legacy-accrual.enabled가 붙어 있어서, XP 사고를 막으려고 그 설정을 내린 순간 복습 알림 저장 동작까지 같이 바뀝니다.AppVersionResolver.isAtLeast(String)를 새로 두고 "모르면 구버전" 규칙을 여기에 한 번만 적어 뒀습니다. 기준 버전과 그래서 무엇이 달라지는가는 각 도메인이 들고 있습니다.LegacyAccrualPolicy는 읽기만 했습니다. [Fix] 신버전이 남긴 mission_log 가 구버전 기기의 적립을 막는다 - 두 기기를 쓰면 XP 가 어느 쪽으로도 안 들어간다 #318 이 같은 시간에 미션 도메인을 고치고 있어서 손대지 않았습니다. 지금은 같은 비교를 각자 들고 있는데, [Fix] 신버전이 남긴 mission_log 가 구버전 기기의 적립을 막는다 - 두 기기를 쓰면 XP 가 어느 쪽으로도 안 들어간다 #318 이 머지된 뒤에 미션 쪽을isAtLeast로 옮기면 한 곳이 됩니다.2. 기준 버전 기본값을 4.0.0 으로 뒀습니다
pubspec.yaml이4.0.0+70이고, 이 빌드는 이 조합을 만들 수 없습니다.ono.practice-note.week-days-required-version으로 옮길 수 있습니다. 요일 강제가 빠진 빌드가 뒤늦게 드러나면 배포 없이 기준을 올릴 수 있습니다.3. 스케줄러에 있던 검증은 뺐습니다
PracticeNoteService에서 이미 걸러지고, 거기서 막아야 복습노트 저장과 Quartz 잡 삭제가 아예 일어나지 않습니다. Quartz 삭제는 서비스 트랜잭션과 함께 롤백되지 않습니다.👤 사용자 영향
🔌 API 호환성
🗄️ DB migration
🔐 인증/권한
✅ 검증 결과
test --tests "com.aisip.OnO.backend.practicenote.*" --tests "com.aisip.OnO.backend.common.web.*"132개 통과test3487개 통과, 실패 03.6.0+67, 신버전4.0.0+70) × POST/PATCH 를PracticeNoteIntegrationTest에 고정했습니다. 신버전은 400/6003 이고 아무것도 저장되지 않으며, 구버전과 헤더 없음은 저장에 성공하고 스케줄러까지 그 설정 그대로 닿습니다.0 0 7 ? * *)이 되는지는PracticeNotificationSchedulerTest에서 실제 구현으로 확인했습니다.🚀 배포 리스크
log.info로 남습니다. 이 분기를 언제 걷어낼지는 그 로그가 얼마나 줄어드는지로 판단할 수 있습니다.↩️ 롤백/대응 방법
ono.practice-note.week-days-required-version을 올리면 됩니다. 값을 아주 높게 두면 사실상 아무도 막지 않습니다.