Skip to content

♻️ refactor: Auth 도메인 디테일/일관성 보완 (#142)#143

Merged
komascode merged 1 commit into
developfrom
Refactor/#142
Jul 12, 2026
Merged

♻️ refactor: Auth 도메인 디테일/일관성 보완 (#142)#143
komascode merged 1 commit into
developfrom
Refactor/#142

Conversation

@komascode

@komascode komascode commented Jul 11, 2026

Copy link
Copy Markdown
Collaborator

📍 PR 타입 (하나 이상 선택)

  • 기능 추가
  • 버그 수정
  • 의존성, 환경 변수, 빌드 관련 코드 업데이트
  • 기타 사소한 수정

❗️ 관련 이슈 링크

Closed #142

📌 개요

  • Auth 도메인 코드 검토 중 발견된 버그가 아닌 정합성/일관성/데드코드 4건을 정리했습니다.
  • 보안 설계 변경(기기 바인딩)은 프론트 협의가 필요한 큰 작업이라 별도 ✨ [Feat] 이슈로 분리했습니다.

🔁 변경 사항

  • 주석 정정: SmsSendResponse.expiredAt 주석 발송 시간 + 3분+ 5분 (실제 값 SMS_EXPIRATION_MINUTES = 5와 불일치 정정)
  • 데드코드 제거: generateSmsToken 메서드 삭제 (전 코드베이스 호출처 0건, SMS 인증 없이 verificationToken을 발급해 노출 시 인증 우회 소지)
  • 트랜잭션 애노테이션 통일: resetPassword@jakarta.transaction.Transactional → 스프링 @Transactional (나머지 메서드와 일관성, 동작 변화 없음)
  • 잠금 플래그 정리: resetPassword에서 실패 카운트 초기화와 함께 sms_required:{phone} Redis 플래그도 삭제 → SMS 인증을 이미 통과했으므로 RT 만료 잠금까지 일관되게 해제

📸 스크린샷

  • 해당 없음 (백엔드 내부 로직/주석 정리)

👀 기타 더 이야기해볼 점

  • 보류: "정상 로그인에 stale verificationToken이 섞이면 튕기는 엣지 케이스" → 프론트 토큰 재사용 흐름 확인 후 결정
  • 별도 이슈: 기기 바인딩(신뢰 기기, 새 기기 로그인 시 SMS 강제)
  • 잠금 플래그 정리(4번째 항목)는 Redis·SMS 통합 환경에서 수동 검증 필요: RT 만료 플래그 생성 → 비번 재설정 → 이후 SMS 없이 로그인 성공 확인

✅ 체크 리스트

  • PR 템플릿에 맞추어 작성했어요.
  • 변경 내용에 대한 테스트를 진행했어요.
  • 프로그램이 정상적으로 동작해요.
  • PR에 적절한 라벨을 선택했어요.
  • 불필요한 코드는 삭제했어요.

Summary by CodeRabbit

  • 버그 수정

    • 비밀번호 재설정이 완료되면 불필요한 SMS 재인증 요구 상태가 자동으로 해제됩니다.
    • 비밀번호 재설정 처리의 안정성이 개선되었습니다.
  • 문서

    • SMS 인증번호 만료 시간이 발송 후 5분으로 안내되도록 기준을 수정했습니다.

- SmsSendResponse.expiredAt 주석 오류 정정 (3분 -> 5분)
- 데드코드 generateSmsToken 제거 (호출처 없음, 인증 우회 소지)
- resetPassword 트랜잭션 애노테이션 스프링으로 통일
- resetPassword에서 sms_required 플래그 삭제로 잠금 해제 일관성 확보

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@komascode komascode self-assigned this Jul 11, 2026
@coderabbitai

coderabbitai Bot commented Jul 11, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

SMS 만료 시간 주석을 실제 5분 기준으로 수정하고, 비밀번호 재설정 성공 시 SMS 재인증 플래그를 삭제하도록 변경했습니다. 트랜잭션 애노테이션을 통일했으며 미사용 SMS 토큰 발급 메서드를 제거했습니다.

Changes

인증 도메인 정합성 정리

Layer / File(s) Summary
SMS 만료 시간 설명 정정
src/main/java/com/example/scoi/domain/auth/dto/AuthResDTO.java
SmsSendResponse.expiredAt 주석의 만료 기준을 발송 후 3분에서 5분으로 수정했습니다.
비밀번호 재설정 및 토큰 발급 정리
src/main/java/com/example/scoi/domain/auth/service/AuthService.java
resetPassword의 트랜잭션 애노테이션을 통일하고, 성공 시 sms_required:{phone} Redis 플래그를 삭제하도록 추가했으며, 미사용 generateSmsToken 메서드를 제거했습니다.

Estimated code review effort: 2 (Simple) | ~10 minutes

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed 제목이 Auth 도메인 정리와 리팩터링이라는 핵심 변경을 간결하게 요약합니다.
Description check ✅ Passed 템플릿의 주요 섹션과 이슈 링크, 개요, 변경 사항, 체크리스트가 대부분 채워져 있습니다.
Linked Issues check ✅ Passed 주석 수정, generateSmsToken 삭제, 트랜잭션 통일, Redis 잠금 플래그 삭제가 이슈 #142 요구와 일치합니다.
Out of Scope Changes check ✅ Passed 제공된 목표 외의 별도 기능 추가나 무관한 변경은 보이지 않습니다.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch Refactor/#142

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

@komascode komascode added the ♻️ refactor 리팩토링! label Jul 11, 2026
@komascode

Copy link
Copy Markdown
Collaborator Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jul 11, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
src/main/java/com/example/scoi/domain/auth/service/AuthService.java (1)

233-238: 🗄️ Data Integrity & Integration | 🔵 Trivial | ⚖️ Poor tradeoff

Redis 플래그 삭제는 DB 커밋과 원자적이지 않음

member.resetLoginFailCount()는 더티체킹으로 트랜잭션 커밋 시점에 flush되지만, redisUtil.delete(...)는 즉시 실행됩니다. 커밋이 실패해도 이미 삭제된 Redis 플래그는 롤백되지 않아, 비밀번호가 실제로는 변경되지 않았는데 SMS 재인증 잠금이 해제된 상태로 남을 수 있습니다. 다만 login()(L330-341), reissue()(L433-434, L445-446)에도 동일한 패턴이 이미 존재하므로 이번 PR에서 새로 생긴 문제는 아니며, 기능적으로는 PR 목표에 부합합니다.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/main/java/com/example/scoi/domain/auth/service/AuthService.java` around
lines 233 - 238, AuthService의 RT 만료 SMS 재인증 처리에서 Redis 플래그 삭제가 DB 커밋 전에 실행되지 않도록
조정하세요. member.resetLoginFailCount() 변경이 트랜잭션으로 성공적으로 커밋된 이후에 SMS_REQUIRED_PREFIX
+ phoneNumber 삭제가 수행되도록 기존 트랜잭션 동기화 또는 커밋 후 콜백 방식을 활용하고, login() 및 reissue()의 기존
패턴은 이번 변경 범위에 포함하지 마세요.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@src/main/java/com/example/scoi/domain/auth/service/AuthService.java`:
- Around line 233-238: AuthService의 RT 만료 SMS 재인증 처리에서 Redis 플래그 삭제가 DB 커밋 전에
실행되지 않도록 조정하세요. member.resetLoginFailCount() 변경이 트랜잭션으로 성공적으로 커밋된 이후에
SMS_REQUIRED_PREFIX + phoneNumber 삭제가 수행되도록 기존 트랜잭션 동기화 또는 커밋 후 콜백 방식을 활용하고,
login() 및 reissue()의 기존 패턴은 이번 변경 범위에 포함하지 마세요.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 50f7ebb5-d02e-47c4-aead-43db00e3fef6

📥 Commits

Reviewing files that changed from the base of the PR and between edfc10e and 670853a.

📒 Files selected for processing (2)
  • src/main/java/com/example/scoi/domain/auth/dto/AuthResDTO.java
  • src/main/java/com/example/scoi/domain/auth/service/AuthService.java

@komascode komascode merged commit 52c7ed2 into develop Jul 12, 2026
2 checks passed
@komascode komascode deleted the Refactor/#142 branch July 12, 2026 02:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

♻️ refactor 리팩토링!

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant