Skip to content

Conversation

@kez-lab
Copy link
Member

@kez-lab kez-lab commented Jul 24, 2025

[Feat/remove_server_point]: 포인트 관련 서버로직 삭제 및 아키텍처 개선

🎯 개요

포인트 시스템을 완전히 제거하고, Clean Architecture 패턴을 도입하여 코드베이스를 단순화하고 유지보수성을 향상시키는 대규모 리팩토링 작업입니다.

✨ 주요 변경사항

🗑️ 제거된 기능

  • 포인트 시스템 완전 제거
    • PointService, PointModule 등 포인트 관련 네트워크 모듈 삭제
    • 포인트 획득/사용 관련 API 모델 제거 (EarnPointRequest, UsePointResponse 등)
    • data/point 모듈 전체 삭제

🏗️ 아키텍처 개선

  • Clean Architecture 패턴 도입
    • UseCase 레이어 추가 (AuthUseCase, AddUsageGoalsUseCase 등)
    • Domain 레이어와 Data 레이어 명확한 분리
    • Repository 패턴 적용

🔐 인증 시스템 개선

  • 로컬 데이터베이스 기반 사용자 정보 저장
    • UserAuth 엔티티 추가 (사용자 인증 정보)
    • UserProfile 엔티티 추가 (사용자 프로필 정보)
    • 해당 DAO 클래스들 구현

🛠️ 기술적 개선사항

  • 데이터베이스 마이그레이션
    • Room Database 스키마 업데이트
    • 새로운 테이블 추가를 위한 마이그레이션 로직 구현
  • 의존성 정리
    • 불필요한 네트워크 모듈 제거
    • DataStore 설정 개선 (DefaultUserPreference로 리네이밍)

📊 변경 통계

  • 46개 파일 변경
  • 포인트 관련 모듈 완전 제거
  • 10개 이상의 새로운 UseCase 클래스 추가
  • 데이터베이스 엔티티 2개 신규 추가

🔍 영향 범위

  • 포인트 기능을 사용하던 모든 화면에서 관련 로직 제거
  • 사용자 인증 플로우 개선
  • 앱 전반적인 아키텍처 구조 변경

✅ 테스트 필요사항

  • 사용자 인증 플로우 정상 동작 확인
  • 데이터베이스 마이그레이션 테스트
  • 포인트 관련 UI 요소 완전 제거 확인
  • 앱 전체 기능 회귀 테스트

🚀 배포 후 확인사항

  • 기존 사용자의 데이터 마이그레이션 정상 처리 확인
  • 새로운 인증 시스템 안정성 모니터링
  • 앱 성능 개선 여부 확인 (포인트 로직 제거로 인한)

@kez-lab kez-lab self-assigned this Jul 24, 2025
@kez-lab kez-lab requested a review from a team as a code owner July 24, 2025 15:08
@kez-lab kez-lab added 🐱의진 의진이 작업 ✂️delete 불필요한 코드 삭제 labels Jul 24, 2025
@kez-lab kez-lab changed the base branch from develop to feat/remove_server_login July 24, 2025 15:09
@kez-lab kez-lab closed this Jul 24, 2025
@kez-lab kez-lab reopened this Jul 24, 2025
@Team-HMH Team-HMH deleted a comment from coderabbitai bot Jul 24, 2025
@kez-lab kez-lab closed this Jul 24, 2025
@kez-lab kez-lab reopened this Jul 24, 2025
@Team-HMH Team-HMH deleted a comment from coderabbitai bot Jul 25, 2025
@Team-HMH Team-HMH deleted a comment from coderabbitai bot Jul 25, 2025
@kez-lab
Copy link
Member Author

kez-lab commented Jul 25, 2025

@coderabbitai 리뷰해줘

@coderabbitai
Copy link

coderabbitai bot commented Jul 25, 2025

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

@kez-lab 네, PR을 리뷰해드리겠습니다. 먼저 변경사항을 확인해보겠습니다.


🏁 Script executed:

#!/bin/bash
# Get information about the current branch and recent commits
git log --oneline -10

# Get the list of changed files in this PR
git diff --name-only HEAD~1 HEAD

# Get a summary of the changes
git diff --stat HEAD~1 HEAD

Length of output: 438


🏁 Script executed:

#!/bin/bash
# Check git status and branch information
git status
echo "=== Branch info ==="
git branch -a
echo "=== All commits ==="
git log --oneline --all
echo "=== Current working directory ==="
pwd
echo "=== List all files ==="
find . -type f -name "*.kt" -o -name "*.java" -o -name "*.xml" -o -name "*.gradle" | head -20

Length of output: 1633


🏁 Script executed:

#!/bin/bash
# Compare current branch with develop to see the changes
echo "=== Comparing coderabbit_331 with develop ==="
git diff develop..coderabbit_331 --name-only

echo "=== Detailed diff between branches ==="
git diff develop..coderabbit_331 --stat

echo "=== Let's look at some key files ==="
echo "--- HMHApplication.kt ---"
cat ./app/src/main/java/com/hmh/hamyeonham/HMHApplication.kt

echo "--- StartActivity.kt ---"
cat ./app/src/main/java/com/hmh/hamyeonham/StartActivity.kt

Length of output: 15888


🏁 Script executed:

#!/bin/bash
# Let's examine some key database and authentication files
echo "=== Database Entity: UserAuth.kt ==="
cat ./core/database/src/main/java/com/hmh/hamyeonham/core/database/entity/UserAuth.kt

echo "=== Database Entity: UserProfile.kt ==="
cat ./core/database/src/main/java/com/hmh/hamyeonham/core/database/entity/UserProfile.kt

echo "=== Kakao Auth Implementation ==="
cat ./data/login/src/main/java/com/hmh/hamyeonham/login/datasource/kakao/KakaoSocialAuthDataStoreImpl.kt | head -50

echo "=== Login ViewModel changes ==="
cat ./feature/login/src/main/java/com/hmh/hamyeonham/feature/login/LoginViewModel.kt | head -50

Length of output: 4731


🏁 Script executed:

#!/bin/bash
# Let's check the AuthUseCase and complete Kakao implementation
echo "=== AuthUseCase ==="
cat ./domain/login/src/main/java/com/hmh/hamyeonham/login/usecase/AuthUseCase.kt

echo "=== Complete Kakao Auth Implementation (rest of the file) ==="
cat ./data/login/src/main/java/com/hmh/hamyeonham/login/datasource/kakao/KakaoSocialAuthDataStoreImpl.kt | tail -60

echo "=== Database Module to check migration ==="
cat ./core/database/src/main/java/com/hmh/hamyeonham/core/database/di/DatabaseModule.kt

Length of output: 5170


@kez-lab 코드 리뷰 완료했습니다! 이번 PR은 상당히 큰 규모의 리팩토링이네요. 전체적으로 좋은 방향의 변경사항들이지만, 몇 가지 개선점들을 발견했습니다.

🎯 주요 변경사항 분석

긍정적인 변경사항:

  • ✅ Point 기능 제거로 코드베이스 단순화 (92개 파일, -1440줄)
  • ✅ Clean Architecture 패턴 적용 (UseCase, Repository 패턴)
  • ✅ 적절한 상태 관리 (StateFlow, SharedFlow 사용)
  • ✅ 코루틴 기반 비동기 처리

⚠️ 주요 개선 필요사항

1. 데이터베이스 설계 이슈

// UserAuth.kt - 싱글톤 패턴의 문제점
@Entity(tableName = "user_auth")
data class UserAuth(
    @PrimaryKey
    val id: Int = 1, // ⚠️ 항상 같은 ID 사용은 위험할 수 있음
    val userId: Long = -1, // ⚠️ -1 기본값이 적절한지 검토 필요
    // ...
)

권장사항:

  • userId를 Primary Key로 사용하거나, 별도의 unique constraint 추가 검토
  • 기본값 -1 대신 nullable 타입 고려

2. 예외 처리 개선 필요

// KakaoSocialAuthDataStoreImpl.kt
override suspend fun login(): UserInfo? {
    return try {
        // ... 로그인 로직
        fetchUserInfo()
    } catch (e: Exception) {
        null // ⚠️ 모든 예외를 null로 처리하면 디버깅이 어려움
    }
}

권장사항:

override suspend fun login(): Result<UserInfo> {
    return try {
        val userInfo = fetchUserInfo()
        Result.success(userInfo)
    } catch (e: KakaoSdkError) {
        // 카카오 특정 에러 처리
        Result.failure(e)
    } catch (e: Exception) {
        // 일반 예외 처리 
        Result.failure(e)
    }
}

3. 코루틴 사용 개선

// 현재 구현
private suspend fun loginWithKakaoTalk(): Unit = suspendCancellableCoroutine { continuation ->
    // ... 
    AuthApiClient.instance.issueAccessToken(code!!, codeVerifier) { _, tokenError ->
        continuation.resume(Unit) // ⚠️ 에러 상태를 무시함
    }
}

권장사항:

private suspend fun loginWithKakaoTalk(): Result<Unit> = suspendCancellableCoroutine { continuation ->
    // ...
    AuthApiClient.instance.issueAccessToken(code!!, codeVerifier) { token, tokenError ->
        if (tokenError != null) {
            continuation.resume(Result.failure(tokenError))
        } else {
            continuation.resume(Result.success(Unit))
        }
    }
}

4. 데이터 검증 추가

// UserInfo 생성 시 검증 로직 추가 권장
val userInfo = UserInfo(
    id = user.id ?: throw IllegalStateException("User ID cannot be null"),
    profile = UserInfo.Profile(
        userId = user.id ?: throw IllegalStateException("User ID cannot be null"),
        // ...
    )
)

🔍 코드 품질 체크사항

✅ 잘 구현된 부분

  • Clean Architecture 레이어 분리
  • Dependency Injection (Hilt) 적절한 사용
  • Flow 기반 반응형 프로그래밍
  • Room Database 마이그레이션 처리

📋 추가 확인 필요사항

  1. 테스트 코드: 새로운 인증 로직에 대한 단위 테스트 추가 필요
  2. ProGuard 설정: Kakao SDK obfuscation 규칙 확인
  3. 권한 처리: 네트워크, 인터넷 권한 manifest 확인

💡 추천사항

  1. 로깅 개선: 인증 과정의 주요 단계별 로깅 추가
  2. 에러 메시지 다국화: 사용자 친화적인 에러 메시지 처리
  3. 토큰 갱신 로직: Access Token 자동 갱신 메커니즘 검토

전체적으로 코드 구조가 많이 개선되었고, Point 기능 제거로 복잡도가 줄어든 좋은 리팩토링입니다! 위의 개선사항들을 반영하면 더욱 견고한 코드가 될 것 같습니다. 🚀

@kez-lab
Copy link
Member Author

kez-lab commented Jul 25, 2025

@coderabbitai PR Description 요약해서 다시 구성해줘

@coderabbitai
Copy link

coderabbitai bot commented Jul 25, 2025

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

@kez-lab PR Description을 요약해서 재구성해드리겠습니다. 먼저 현재 PR의 상세 정보를 확인해보겠습니다.


🏁 Script executed:

#!/bin/bash
# Get the current PR information and description
echo "=== PR Title and Description ==="
gh pr view 331 --json title,body,commits,changedFiles --repo Team-HMH/HMH-Android

echo "=== Commit messages to understand the changes ==="
git log develop..HEAD --oneline --no-merges

echo "=== File changes summary ==="
git diff develop..HEAD --stat | head -20

echo "=== Key architectural changes ==="
echo "--- Check for new UseCase files ---"
find . -name "*UseCase*.kt" -type f | head -10

echo "--- Check for removed Point-related files ---"
git diff develop..HEAD --name-status | grep -i point | head -10

Length of output: 4284


@kez-lab 현재 PR 정보를 분석해서 포괄적인 PR Description을 재구성해드렸습니다:

📋 PR Description (재구성)

# [Feat/remove_server_point]: 포인트 관련 서버로직 삭제 및 아키텍처 개선

## 🎯 개요
포인트 시스템을 완전히 제거하고, Clean Architecture 패턴을 도입하여 코드베이스를 단순화하고 유지보수성을 향상시키는 대규모 리팩토링 작업입니다.

## ✨ 주요 변경사항

### 🗑️ 제거된 기능
- **포인트 시스템 완전 제거**
  - `PointService`, `PointModule` 등 포인트 관련 네트워크 모듈 삭제
  - 포인트 획득/사용 관련 API 모델 제거 (`EarnPointRequest`, `UsePointResponse` 등)
  - `data/point` 모듈 전체 삭제

### 🏗️ 아키텍처 개선
- **Clean Architecture 패턴 도입**
  - UseCase 레이어 추가 (`AuthUseCase`, `AddUsageGoalsUseCase` 등)
  - Domain 레이어와 Data 레이어 명확한 분리
  - Repository 패턴 적용

### 🔐 인증 시스템 개선
- **로컬 데이터베이스 기반 사용자 정보 저장**
  - `UserAuth` 엔티티 추가 (사용자 인증 정보)
  - `UserProfile` 엔티티 추가 (사용자 프로필 정보)
  - 해당 DAO 클래스들 구현

### 🛠️ 기술적 개선사항
- **데이터베이스 마이그레이션**
  - Room Database 스키마 업데이트
  - 새로운 테이블 추가를 위한 마이그레이션 로직 구현
- **의존성 정리**
  - 불필요한 네트워크 모듈 제거
  - DataStore 설정 개선 (`DefaultUserPreference`로 리네이밍)

## 📊 변경 통계
- **46개 파일 변경**
- **포인트 관련 모듈 완전 제거**
- **10개 이상의 새로운 UseCase 클래스 추가**
- **데이터베이스 엔티티 2개 신규 추가**

## 🔍 영향 범위
- 포인트 기능을 사용하던 모든 화면에서 관련 로직 제거
- 사용자 인증 플로우 개선
- 앱 전반적인 아키텍처 구조 변경

## ✅ 테스트 필요사항
- [ ] 사용자 인증 플로우 정상 동작 확인
- [ ] 데이터베이스 마이그레이션 테스트
- [ ] 포인트 관련 UI 요소 완전 제거 확인
- [ ] 앱 전체 기능 회귀 테스트

## 🚀 배포 후 확인사항
- 기존 사용자의 데이터 마이그레이션 정상 처리 확인
- 새로운 인증 시스템 안정성 모니터링
- 앱 성능 개선 여부 확인 (포인트 로직 제거로 인한)

이렇게 구성하면 어떠신가요? PR의 목적과 변경사항이 명확하게 드러나도록 체계적으로 정리했습니다. 필요하시면 특정 섹션을 더 자세히 설명하거나 수정해드릴 수 있습니다! 🎯

@kez-lab kez-lab closed this Jul 25, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

✂️delete 불필요한 코드 삭제 🐱의진 의진이 작업

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants