Skip to content

Fix/#472 3-2차 스프린트 1차 QA 반영#473

Merged
y-eonee merged 2 commits into
developfrom
feat/#472-qa
Jul 17, 2026
Merged

Fix/#472 3-2차 스프린트 1차 QA 반영#473
y-eonee merged 2 commits into
developfrom
feat/#472-qa

Conversation

@y-eonee

@y-eonee y-eonee commented Jul 12, 2026

Copy link
Copy Markdown
Member

🔗 연결된 이슈

📄 작업 내용

  • 디자인QA 1건을 반영했습니다.
  • 기획 QA에 있는 댓글이 보이지않음 -> 은 아이폰15 시뮬로 확인했는데 저한테 다시 재현이 안돼서 일단 보류했습니다 .. .
  • 로그인 중복 방지 작업을 추가적으로 진행했습니다.

💻 주요 코드 설명

로그인 중복 방지 개선

LoginvViewModel

  • isSocialLoginInProgress 변수를 통해 현재 진행중인 작업이 있는지 판단합니다.
  • defer를 이용해 태스크가 끝날 때 다시 false로 바꿔줍니다.
 private func socialLogin(platform: LoginPlatform) {
        guard !isSocialLoginInProgress else {
            ByeBooLogger.debug("이미 진행중인 요청 있음")
            return
        }
        isSocialLoginInProgress = true

        Task {
            defer { isSocialLoginInProgress = false }

            do {
                let _ = try await socialLoginUseCase.execute(platform: platform)
                socialLoginAuthSubject.send(.success(()))
                getIsRegistered()
                getUserID()
            } catch(let error as ByeBooError) {
                ByeBooLogger.error(error)
                socialLoginAuthSubject.send(.failure(error))
            }
        }
    }

Summary by CodeRabbit

  • 버그 수정
    • 소셜 로그인 버튼을 빠르게 연속으로 탭해도 로그인 요청이 중복 실행되지 않도록 개선했습니다.
    • 한쪽 소셜 로그인 진행 중 다른 로그인 버튼이 비활성화되도록 변경했습니다.
    • 로그인 버튼의 동시 터치 동작을 방지했습니다.
    • 퀘스트 좋아요 영역의 탭 인식이 더 안정적으로 동작하도록 개선했습니다.

@y-eonee y-eonee self-assigned this Jul 12, 2026
@y-eonee y-eonee linked an issue Jul 12, 2026 that may be closed by this pull request
1 task
@y-eonee y-eonee added 나연🐹 fix 버그나 오류 해결 labels Jul 12, 2026
@coderabbitai

coderabbitai Bot commented Jul 12, 2026

Copy link
Copy Markdown

Review Change Stack

Walkthrough

로그인 버튼의 동시 입력과 소셜 로그인 중복 실행을 제어하고, 퀘스트 좋아요 입력을 컨테이너 탭 제스처 방식으로 변경했습니다.

Changes

소셜 로그인 상호작용

Layer / File(s) Summary
로그인 요청 중복 실행 방지
ByeBoo-iOS/ByeBoo-iOS/Presentation/Feature/Login/View/LoginView.swift, ByeBoo-iOS/ByeBoo-iOS/Presentation/Feature/Login/ViewController/LoginViewController.swift, ByeBoo-iOS/ByeBoo-iOS/Presentation/Feature/Login/ViewModel/LoginViewModel.swift
두 로그인 버튼에 독점 터치를 적용하고, 소셜 로그인 진행 상태를 추적해 중복 요청을 차단하며 작업 완료 후 상태를 초기화합니다.

퀘스트 좋아요 제스처

Layer / File(s) Summary
좋아요 컨테이너 제스처 전환
ByeBoo-iOS/ByeBoo-iOS/Presentation/Feature/Quest/View/CommonQuest/Common/QuestContentView.swift
좋아요 버튼의 직접 터치 처리를 비활성화하고 컨테이너에 탭 제스처를 연결했습니다.

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

Possibly related PRs

Suggested labels: 승준🤠

Suggested reviewers: dev-domo, juri123123

Poem

당근을 문 토끼가 톡,
로그인 버튼은 하나씩 콕.
좋아요는 상자 위로 살짝,
중복 요청은 멈춰 깡총.
더 안전한 흐름, 당근 축하! 🐰

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 inconclusive)

Check name Status Explanation Resolution
Title check ❓ Inconclusive 제목은 QA 반영이라는 큰 방향은 맞지만, 실제 변경 내용이 매우 포괄적이라 핵심 변경을 충분히 드러내지 못합니다. 로그인 중복 방지와 UI 터치 동작 수정 등 주요 변경을 반영해 더 구체적으로 작성하세요.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ 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 feat/#472-qa

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.

@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.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
ByeBoo-iOS/ByeBoo-iOS/Presentation/Feature/Login/ViewController/LoginViewController.swift (1)

64-78: 🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win

로그인 실패 시 버튼 재활성화 필요
현재 재활성화는 bind()isRegisteredPublisher 처리에서만 일어나서, socialLoginAuthSubject.failure를 보낼 때는 두 버튼이 계속 비활성화된 채 남습니다. 실패 경로에서도 다시 true로 돌려주세요.

🤖 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
`@ByeBoo-iOS/ByeBoo-iOS/Presentation/Feature/Login/ViewController/LoginViewController.swift`
around lines 64 - 78, Re-enable both Kakao and Apple login buttons when the
social login flow emits a failure through socialLoginAuthSubject, not only in
the isRegisteredPublisher handling. Update the failure handling associated with
kakaoLoginButtonDidTap and appleLoginButtonDidTap while preserving the existing
button disabling behavior when login starts.
🧹 Nitpick comments (1)
ByeBoo-iOS/ByeBoo-iOS/Presentation/Feature/Login/ViewModel/LoginViewModel.swift (1)

64-72: 🩺 Stability & Availability | 🔵 Trivial | ⚡ Quick win

isSocialLoginInProgress 플래그의 스레드 안전성

LoginViewModelNSObject를 상속하며 actor 격리가 없습니다. action(_:)은 메인 스레드에서 호출되어 isSocialLoginInProgress = true를 설정하지만, Task 내부의 defer { isSocialLoginInProgress = false }는 백그라운드 스레드에서 실행될 수 있어 데이터 레이스가 발생할 수 있습니다.

실제 발생 확률은 낮지만(로그인 요청 중 버튼이 이미 VC에서 비활성화됨), 구조적으로 안전하게 만들려면 @MainActor 적용 또는 플래그 접근을 메인 스레드로 통제하는 것을 권장합니다.

♻️ 제안: defer를 메인 스레드에서 실행
         Task {
-            defer { isSocialLoginInProgress = false }
+            defer { DispatchQueue.main.async { self.isSocialLoginInProgress = false } }
             
             do {
🤖 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
`@ByeBoo-iOS/ByeBoo-iOS/Presentation/Feature/Login/ViewModel/LoginViewModel.swift`
around lines 64 - 72, Update the isSocialLoginInProgress access in
LoginViewModel so both the guard/set in action(_:) and the deferred reset inside
Task execute on the MainActor, preventing cross-thread access to the flag while
preserving the existing request lifecycle behavior.
🤖 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.

Outside diff comments:
In
`@ByeBoo-iOS/ByeBoo-iOS/Presentation/Feature/Login/ViewController/LoginViewController.swift`:
- Around line 64-78: Re-enable both Kakao and Apple login buttons when the
social login flow emits a failure through socialLoginAuthSubject, not only in
the isRegisteredPublisher handling. Update the failure handling associated with
kakaoLoginButtonDidTap and appleLoginButtonDidTap while preserving the existing
button disabling behavior when login starts.

---

Nitpick comments:
In
`@ByeBoo-iOS/ByeBoo-iOS/Presentation/Feature/Login/ViewModel/LoginViewModel.swift`:
- Around line 64-72: Update the isSocialLoginInProgress access in LoginViewModel
so both the guard/set in action(_:) and the deferred reset inside Task execute
on the MainActor, preventing cross-thread access to the flag while preserving
the existing request lifecycle behavior.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 346823ac-ba4b-42ef-8e6d-6845d15297eb

📥 Commits

Reviewing files that changed from the base of the PR and between 5109e98 and 8cfb72a.

📒 Files selected for processing (4)
  • ByeBoo-iOS/ByeBoo-iOS/Presentation/Feature/Login/View/LoginView.swift
  • ByeBoo-iOS/ByeBoo-iOS/Presentation/Feature/Login/ViewController/LoginViewController.swift
  • ByeBoo-iOS/ByeBoo-iOS/Presentation/Feature/Login/ViewModel/LoginViewModel.swift
  • ByeBoo-iOS/ByeBoo-iOS/Presentation/Feature/Quest/View/CommonQuest/Common/QuestContentView.swift

@juri123123 juri123123 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

빠른 작업 감사합니다 ~!

@dev-domo dev-domo left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

수고하셨슴다!

kakaoLoginButton.do {
$0.setImage(.kakaoLoginButton, for: .normal)
$0.alpha = 0
$0.isExclusiveTouch = true

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

중복 터치를 막아주는군요!

isSocialLoginInProgress = true

Task {
defer { isSocialLoginInProgress = false }

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Task 안에도 defer문 선언이 가능하군요! 배워갑니다

@y-eonee
y-eonee merged commit 09193cd into develop Jul 17, 2026
2 checks passed
@y-eonee
y-eonee deleted the feat/#472-qa branch July 17, 2026 12:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

fix 버그나 오류 해결 나연🐹

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feat] 3-2차 스프린트 1차 QA 반영

3 participants