Conversation
TTL 1시간은 이 서비스의 알림 성격에 비해 지나치게 길다. 대여 승인은 사용자가 지금 과방에 갈지 결정하는 정보고, 관리자 알림도 학생이 기다리는 상태에서 처리해야 하는 일이라 늦게 도착하면 의미가 없다. - 유효 시간을 1시간에서 10분으로 단축 - 도달할 수 없게 된 15분 백오프 제거 (30초 → 2분 → 5분, 최대 3회, 누적 7분 30초) - 다음 재시도 시각이 유효 시간을 넘기면 예약하지 않고 즉시 EXPIRED 처리 (기존에는 만료될 것이 뻔한 시도를 예약해 두고 폴러가 집어간 뒤에야 만료를 확인했다) Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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.
#️⃣연관된 이슈
🎯 해결하려는 문제가 무엇인가요?
#145 에서 넣은 푸시 아웃박스의 유효 시간(TTL)이 1시간으로 너무 깁니다.
이 서비스의 알림은 전부 실시간성이 중요합니다.
늦게 도착하는 푸시는 알림으로서 가치가 없을 뿐 아니라, 상황이 끝난 뒤에 울려서 오히려 혼란을 줍니다.
❓ 왜 해결해야 하나요?
TTL은 "이 푸시가 언제까지 보낼 가치가 있는가"를 정하는 값인데, 지금 값은 그 판단과 맞지 않습니다. 1시간을 그대로 두면 이미 쓸모없어진 알림을 계속 재시도하면서 대기열만 붙잡습니다.
인앱 알림(
Notification)은 그대로 저장돼 있으므로 푸시를 포기해도 정보가 사라지지 않습니다. 사용자는 앱을 열면 확인할 수 있습니다. TTL은 "지금 알림으로 끼어들 가치가 있는가"의 기준일 뿐입니다.⭐ 어떻게 해결했나요?
유효 시간 1시간 → 10분
백오프에서 도달 불가능해진 15분 간격 제거 —
30초 → 2분 → 5분최대 3회, 누적 7분 30초로 유효 시간 안에 들어옵니다. TTL이 10분이면 15분 간격은 예약 단계에서 항상 만료 처리되므로, 남겨두면 "최대 4회 재시도"로 읽히지만 실제로는 3회만 도는 상태가 됩니다.다음 재시도 시각이 유효 시간을 넘기면 예약하지 않고 즉시
EXPIRED처리기존에는 만료될 것이 뻔한 시도를 예약해 두고, 폴러가 집어간 뒤에야 만료를 확인했습니다.
🧩 이 PR의 한계 & 트레이드오프
⛓️ 기존 기능에 미치는 영향
TIME_TO_LIVE는 저장된 값이 아니라created_at과 비교하는 상수라, 배포 시점에 10분이 지난PENDING건은 폴러가 집어갈 때EXPIRED로 정리됩니다. 인앱 알림은 그대로 남습니다🔀 Edge Case & 실패 시나리오
EXPIRED로 포기 (ERROR 로그), 인앱 알림은 남음EXPIREDEXPIRED로 정리📋 검토한 대안과 선택 이유
rentAt) 기준으로 유효 시간 계산 — 승인 푸시의 실제 가치는 "대여 시각까지 남은 시간"에 달려 있어 가장 정확합니다. 다만 아웃박스가 대여 도메인을 알아야 해서, 고정 TTL로 충분하다고 판단했습니다💬 리뷰 포인트
[r]10분이 적절한지 봐주세요. 이 안에 30초·2분·5분 세 번의 재시도가 들어갑니다. 더 줄이면 재시도 횟수도 함께 줄여야 합니다[a]백오프 간격(30초/2분/5분)의 분포에 의견 있으시면 알려주세요🔍 검증
./gradlew test통과 — 아웃박스 상태 전이 단위 테스트 8건 (기존 6건에서 2건 추가)EXPIRED— "만료될 시도는 예약하지 않는다" 규칙의 경계입니다