Skip to content

Conversation

wjdrjs00
Copy link
Member

@wjdrjs00 wjdrjs00 commented Aug 6, 2025

[ PR Content ]

로그인 관련 이슈에 대한 문제를 해결했습니다.

Related issue

Screenshot 📸

  • N/A

Work Description

  • 카카오 로그인 취소 시 발생하던 무한 반복 문제 해결
  • 홈화면에서 로그인 화면으로 넘어가는 문제 해결

To Reviewers 📢

  • 인트로, 로그인 화면 컴포넌트간 잘못된 간격 비율이 반영되어있어 피그마와 차이 발생하는 문제를 발견해서 같이 수정을 진행했습니다.

Summary by CodeRabbit

  • Refactor

    • 홈 화면으로 이동 시 내비게이션 동작이 일관되게 개선되었습니다.
    • 로그인 화면, 온보딩, 스플래시 화면에서 중복된 내비게이션 코드가 통합되었습니다.
  • Bug Fixes

    • 로그인 시 카카오 계정 로그인 관련 오류 처리 및 사이드 이펙트가 정리되었습니다.
  • Style

    • 인트로 및 로그인 화면의 레이아웃이 화면 크기에 맞게 더 유동적으로 조정되었습니다.
  • Chores

    • 내부 역할 매핑 함수명이 명확하게 변경되었습니다.

- navigateToHomeAndClearStack 메소드를 사용하도록 수정
- 이동 시 모든 백스택을 제거하도록 설정
- 로그인 취소 시 의도적인 취소라 판단하여 취소 분기 제거
- 카카오 계정 로그인 sideEffect 제거
@wjdrjs00 wjdrjs00 requested a review from l5x5l August 6, 2025 17:52
@wjdrjs00 wjdrjs00 self-assigned this Aug 6, 2025
@wjdrjs00 wjdrjs00 added 🐞 Fix 버그 수정 🧤 대현 labels Aug 6, 2025
Copy link

coderabbitai bot commented Aug 6, 2025

Walkthrough

로그인, 온보딩, 스플래시 화면에서 홈으로 이동하는 네비게이션 콜백이 중복된 람다에서 navigateToHomeAndClearStack 메서드 참조로 통합되었습니다. 카카오 계정 로그인 취소 시 무한 반복 방지를 위해 관련 사이드 이펙트와 분기, 에러 처리 코드가 제거되고, 네비게이션 스택 관리가 일원화되었습니다. 일부 UI 레이아웃이 반응형으로 개선되었습니다.

Changes

Cohort / File(s) Change Summary
네비게이션 콜백 리팩토링
app/src/main/java/com/threegap/bitnagil/MainNavHost.kt, app/src/main/java/com/threegap/bitnagil/MainNavigator.kt
홈 이동 및 스택 클리어 로직을 중복 람다에서 MainNavigator.navigateToHomeAndClearStack 메서드로 통합.
UserRole 매핑 및 메서드명 변경
data/src/main/java/com/threegap/bitnagil/data/auth/mapper/AuthMapper.kt, domain/src/main/java/com/threegap/bitnagil/domain/auth/model/UserRole.kt
UserRole 매핑 함수명을 from에서 fromString으로 변경, 매퍼에서 해당 메서드 사용.
로그인 사이드 이펙트/에러 처리 및 UI 개선
presentation/src/main/java/com/threegap/bitnagil/presentation/login/LoginScreen.kt, presentation/src/main/java/com/threegap/bitnagil/presentation/login/LoginViewModel.kt, presentation/src/main/java/com/threegap/bitnagil/presentation/login/model/LoginSideEffect.kt
카카오 계정 로그인 취소 무한 반복 방지를 위해 관련 사이드 이펙트 및 분기, 에러 처리 코드 제거. UI 레이아웃 반응형 개선.
인트로 화면 UI 개선
presentation/src/main/java/com/threegap/bitnagil/presentation/intro/IntroScreen.kt
인트로 화면의 레이아웃 및 이미지 크기, 스페이싱을 반응형으로 조정.

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant Splash/Login/OnBoardingScreen
    participant MainNavigator
    participant NavController

    User->>Splash/Login/OnBoardingScreen: 화면 진입/로그인 성공
    Splash/Login/OnBoardingScreen->>MainNavigator: navigateToHomeAndClearStack()
    MainNavigator->>NavController: navigate(Route.Home, popUpTo root, inclusive)
    NavController-->>MainNavigator: 스택 클리어 후 Home 이동
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~15–20 minutes

Assessment against linked issues

Objective Addressed Explanation
로그인 분기처리 로직 수정 (#77)
네비게이션 스택 관리 (#77)
카카오 계정 로그인 취소 시 무한 반복 없이 종료 (#77)
뒤로가기 시 로그인 화면 접근 불가 (#77)

Assessment against linked issues: Out-of-scope changes

(해당 변경사항 중 요구사항과 무관한 기능적 코드 변경은 발견되지 않았습니다.)

Suggested labels

세환

Suggested reviewers

  • l5x5l

Poem

🐇
네비게이션 스택을 한 번에 싹!
로그인 무한 반복, 이제는 안녕~
분기와 에러도 깔끔하게 정리
화면 레이아웃도 쏙쏙 반응형
토끼는 오늘도 코드에 박수 짝짝!
🥕✨

Note

⚡️ Unit Test Generation is now available in beta!

Learn more here, or try it out under "Finishing Touches" below.

✨ Finishing Touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch fix/#77-login-logic

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
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai generate unit tests to generate unit tests for this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

🧹 Nitpick comments (1)
app/src/main/java/com/threegap/bitnagil/MainNavHost.kt (1)

159-165: 네비게이션 로직 일관성을 위한 추가 리팩터링 제안

Setting 화면의 navigateToIntro 콜백에서 여전히 인라인으로 popUpTo(0) { inclusive = true } 로직을 사용하고 있습니다. 일관성을 위해 이 부분도 중앙화된 메서드를 사용하거나, 별도의 navigateToIntroAndClearStack 메서드를 만드는 것을 고려해보세요.

다음과 같이 수정할 수 있습니다:

                navigateToIntro = {
-                    navigator.navController.navigate(Route.Intro) {
-                        popUpTo(0) {
-                            inclusive = true
-                        }
-                    }
+                    navigator.navigateToIntroAndClearStack()
                },

MainNavigator에 해당 메서드를 추가:

internal fun navigateToIntroAndClearStack() =
    navController.navigate(Route.Intro) {
        popUpTo(0) {
            inclusive = true
        }
    }
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between af43a04 and ce0eb17.

📒 Files selected for processing (8)
  • app/src/main/java/com/threegap/bitnagil/MainNavHost.kt (3 hunks)
  • app/src/main/java/com/threegap/bitnagil/MainNavigator.kt (1 hunks)
  • data/src/main/java/com/threegap/bitnagil/data/auth/mapper/AuthMapper.kt (1 hunks)
  • domain/src/main/java/com/threegap/bitnagil/domain/auth/model/UserRole.kt (1 hunks)
  • presentation/src/main/java/com/threegap/bitnagil/presentation/intro/IntroScreen.kt (3 hunks)
  • presentation/src/main/java/com/threegap/bitnagil/presentation/login/LoginScreen.kt (3 hunks)
  • presentation/src/main/java/com/threegap/bitnagil/presentation/login/LoginViewModel.kt (1 hunks)
  • presentation/src/main/java/com/threegap/bitnagil/presentation/login/model/LoginSideEffect.kt (0 hunks)
💤 Files with no reviewable changes (1)
  • presentation/src/main/java/com/threegap/bitnagil/presentation/login/model/LoginSideEffect.kt
👮 Files not reviewed due to content moderation or server errors (2)
  • app/src/main/java/com/threegap/bitnagil/MainNavigator.kt
  • app/src/main/java/com/threegap/bitnagil/MainNavHost.kt
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: in the bitnagil android project's mvi architecture, intent classes like `loadmypagesuccess` are name...
Learnt from: l5x5l
PR: YAPP-Github/Bitnagil-Android#41
File: presentation/src/main/java/com/threegap/bitnagil/presentation/mypage/model/MyPageIntent.kt:6-6
Timestamp: 2025-07-23T13:32:26.263Z
Learning: In the Bitnagil Android project's MVI architecture, Intent classes like `LoadMyPageSuccess` are named to represent successful API response results that carry loaded data, not just user actions. This naming convention is used for future API integration where the intent will be triggered when my page data loading succeeds from the server.

Applied to files:

  • presentation/src/main/java/com/threegap/bitnagil/presentation/login/LoginViewModel.kt
🔇 Additional comments (29)
domain/src/main/java/com/threegap/bitnagil/domain/auth/model/UserRole.kt (1)

11-11: 메서드 이름 개선이 적절합니다.

from에서 fromString으로 메서드 이름을 변경한 것은 메서드의 기능을 더 명확하게 표현하며, 코드 가독성을 향상시킵니다.

data/src/main/java/com/threegap/bitnagil/data/auth/mapper/AuthMapper.kt (2)

14-14: 도메인 모델 변경사항과 일관성 있게 업데이트되었습니다.

UserRole.fromString 메서드 호출로 정확히 업데이트되어 도메인 레이어의 메서드 이름 변경과 일치합니다.


10-15: PR 목표와 제공된 변경사항 간의 불일치가 있습니다.

PR 설명에서는 카카오 로그인 취소 시 무한 루프 문제와 네비게이션 스택 관리 문제를 해결한다고 명시되어 있으나, 제공된 파일들은 단순한 메서드 이름 변경만 포함하고 있습니다. 실제 로그인 관련 버그 수정 코드가 다른 파일에 있는지 확인이 필요합니다.

#!/bin/bash
# 설명: 로그인 관련 변경사항과 네비게이션 스택 관리 코드 검색
# 예상 결과: 카카오 로그인 취소 처리 및 네비게이션 스택 관리 관련 코드 발견

echo "=== 카카오 로그인 관련 코드 검색 ==="
rg -i "kakao|login" --type kotlin -A 3 -B 3

echo -e "\n=== 네비게이션 스택 관리 관련 코드 검색 ==="
rg -i "navigateToHomeAndClearStack|clearStack|popBackStack" --type kotlin -A 3 -B 3

echo -e "\n=== 무한 루프 방지 관련 코드 검색 ==="
rg -i "infinite|loop|cancel" --type kotlin -A 3 -B 3

Likely an incorrect or invalid review comment.

app/src/main/java/com/threegap/bitnagil/MainNavigator.kt (3)

13-18: 네비게이션 스택 정리 로직이 잘 구현되었습니다.

popUpTo(0) { inclusive = true }를 사용하여 전체 백스택을 정리하는 로직이 올바르게 구현되어 있습니다. 이는 카카오 로그인 취소 시 무한 루프 문제와 의도하지 않은 네비게이션 흐름을 해결하는 데 도움이 될 것입니다. 메서드를 internal로 선언한 것도 적절한 가시성 제어입니다.


13-18: 로그인 관련 네비게이션 문제 해결을 위한 중앙화된 네비게이션 메서드 추가

새로운 navigateToHomeAndClearStack 메서드가 홈 화면으로의 이동과 전체 네비게이션 스택 정리를 중앙화했습니다. popUpTo(0) { inclusive = true }를 사용하여 모든 이전 화면을 스택에서 제거함으로써 카카오 로그인 취소 시 무한 루프 문제와 홈에서 로그인 화면으로의 의도치 않은 뒤로 가기 문제를 해결합니다.


13-18: 네비게이션 스택 관리 로직이 올바르게 구현되었습니다.

새로 추가된 navigateToHomeAndClearStack 함수는 홈으로 이동하면서 전체 백스택을 정리하는 로직을 중앙화했습니다. popUpTo(0) { inclusive = true }를 사용해 루트까지 포함하여 모든 이전 목적지를 제거하므로, 로그인 화면으로의 의도하지 않은 백 네비게이션을 효과적으로 방지할 수 있습니다.

app/src/main/java/com/threegap/bitnagil/MainNavHost.kt (7)

41-41: 코드 중복 제거가 잘 이루어졌습니다.

인라인 람다를 메서드 참조로 변경하여 네비게이션 로직이 중앙화되었습니다. 이는 코드 중복을 제거하고 일관된 네비게이션 동작을 보장합니다.


53-53: 로그인 플로우 개선이 효과적입니다.

로그인 화면에서 홈으로 이동하는 네비게이션 로직을 중앙화된 메서드로 변경한 것이 PR 목표에 부합합니다. 이는 카카오 로그인 취소 시 발생하는 무한 루프 문제 해결에 직접적으로 기여할 것입니다.


183-183: 온보딩 화면 네비게이션 통합이 완료되었습니다.

온보딩 화면에서도 동일한 메서드 참조를 사용하여 네비게이션 로직 통합이 완료되었습니다. 이로써 모든 주요 화면에서 일관된 스택 관리가 이루어집니다.


41-41: 스플래시에서 홈으로의 네비게이션 로직 개선

인라인 람다에서 중앙화된 메서드 참조로 변경하여 네비게이션 스택 관리를 일원화했습니다. 이는 코드 중복을 제거하고 일관된 네비게이션 동작을 보장합니다.


53-53: 로그인에서 홈으로의 네비게이션 로직 개선

중앙화된 navigateToHomeAndClearStack 메서드 사용으로 카카오 로그인 취소 시 발생하던 무한 루프 문제와 네비게이션 스택 관리 문제를 해결했습니다. 이제 로그인 완료 후 홈 화면에서 뒤로 가기로 로그인 화면에 접근할 수 없습니다.


183-183: 온보딩에서 홈으로의 네비게이션 로직 개선

온보딩 완료 후 홈 화면으로 이동할 때도 동일한 중앙화된 네비게이션 로직을 사용하여 일관성을 유지하고 의도치 않은 뒤로 가기 네비게이션을 방지합니다.


41-41: 중앙화된 네비게이션 로직으로 일관성이 개선되었습니다.

스플래시, 로그인, 온보딩 화면에서 홈으로 이동하는 네비게이션 콜백이 navigator::navigateToHomeAndClearStack 메서드 참조로 통일되어 코드 중복이 제거되고 일관된 네비게이션 동작을 보장합니다. 이는 PR 목표인 로그인 관련 네비게이션 문제 해결에 기여할 것입니다.

Also applies to: 53-53, 183-183

presentation/src/main/java/com/threegap/bitnagil/presentation/intro/IntroScreen.kt (6)

13-13: 적절한 임포트 추가

width 모디파이어를 사용하기 위한 임포트가 적절히 추가되었습니다.


60-63: 반응형 UI를 위한 적절한 상수 정의

화면 너비 계산과 너비 비율 상수 정의가 적절합니다. Figma 디자인 대응을 위한 반응형 레이아웃 개선으로 보입니다.


72-72: 수직 간격 조정 확인됨

상단 스페이서 높이를 7.48%에서 10.5%로 증가시켜 디자인 명세에 맞춰 조정한 것으로 보입니다.


79-81: 텍스트 레이아웃 개선

텍스트에 명시적인 높이(60.dp)를 설정하면서 전체 너비를 유지하도록 수정되었습니다. 일관된 레이아웃을 위한 좋은 변경입니다.


84-84: 간격 비율 조정 확인

텍스트 아래 스페이서를 15.1%에서 13.6%로 줄여 전체적인 간격 균형을 맞춘 것으로 보입니다.


91-91: 반응형 이미지 크기 적용

고정된 50.dp 패딩에서 화면 너비 기반의 동적 너비로 변경하여 다양한 화면 크기에 대응할 수 있게 개선되었습니다.

presentation/src/main/java/com/threegap/bitnagil/presentation/login/LoginScreen.kt (6)

15-15: 적절한 임포트 추가

width 모디파이어 사용을 위한 임포트가 추가되었습니다.


76-79: 일관된 반응형 UI 구현

IntroScreen과 동일한 방식으로 화면 너비 계산 및 너비 비율 상수를 정의하여 일관성 있는 반응형 UI를 구현했습니다.


88-88: 디자인 명세 반영된 간격 조정

상단 스페이서 높이를 IntroScreen과 동일하게 10.5%로 조정하여 화면 간 일관성을 유지했습니다.


95-97: 텍스트 레이아웃 일관성 개선

환영 텍스트에 60.dp 고정 높이를 설정하여 IntroScreen과 일관된 레이아웃을 적용했습니다.


100-100: 간격 비율 통일

텍스트 하단 스페이서를 IntroScreen과 동일한 13.6%로 설정하여 화면 간 일관성을 확보했습니다.


107-107: 반응형 이미지 크기 일관성 적용

IntroScreen과 동일한 방식으로 화면 너비 기반 동적 크기 조정을 적용하여 일관된 반응형 디자인을 구현했습니다.

presentation/src/main/java/com/threegap/bitnagil/presentation/login/LoginViewModel.kt (4)

48-50: 카카오 로그인 무한 루프 문제 해결

KakaoTalkLoginCancel 처리에서 RequestKakaoAccountLogin 사이드 이펙트 발송을 제거하여 PR 목표에서 언급된 무한 루프 문제를 해결했습니다. 이제 사용자가 카카오 로그인을 취소하면 단순히 로딩 상태만 false로 변경됩니다.


57-71: 카카오 로그인 에러 처리 단순화

특정 ClientError 처리와 관련 로깅을 제거하여 에러 처리 로직을 단순화했습니다. 이는 카카오 로그인 취소 시 발생하던 복잡한 분기 처리를 제거하여 더 안정적인 흐름을 만듭니다.


83-85: 일반화된 에러 처리로 개선

BitnagilError 특정 처리를 제거하고 일반적인 에러 로깅으로 단순화했습니다. 이는 에러 처리를 더 일관성 있게 만들어 유지보수성을 향상시킵니다.


19-19: savedStateHandle 프로퍼티 제거는 의도된 변경이며 문제 없습니다
다른 ViewModel들과 동일하게, LoginViewModel에서는 savedStateHandle를 클래스 내부에서 직접 참조하지 않으므로 private val 프로퍼티 선언을 제거하고 생성자 파라미터로만 전달한 것은 적절합니다. 외부에서 이 프로퍼티에 접근하는 코드도 존재하지 않으므로 아키텍처상 영향도 없습니다.

Copy link
Contributor

@l5x5l l5x5l left a comment

Choose a reason for hiding this comment

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

고생하셨습니다! 머지 진행하시죠!

@wjdrjs00 wjdrjs00 merged commit 7656c49 into develop Aug 7, 2025
2 checks passed
@wjdrjs00 wjdrjs00 deleted the fix/#77-login-logic branch August 7, 2025 10:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[FIX] 로그인 관련 문제사항 수정
2 participants