Skip to content

NR-152 datastore 사용시 runBlocking 사용하는 부분 수정#153

Merged
juhwankim-dev merged 1 commit into
developfrom
feature/NR-152
Jun 3, 2026
Merged

NR-152 datastore 사용시 runBlocking 사용하는 부분 수정#153
juhwankim-dev merged 1 commit into
developfrom
feature/NR-152

Conversation

@juhwankim-dev

Copy link
Copy Markdown
Member

이전 담당자가 datastore를 동기로 실행하기 위해 runBlocking을 사용한듯하다.
이 때문에 ANR이 발생하는 케이스가 생기고 있다.
runBlocking을 모두 제거하도록 한다.

왜?
이전 담당자가 datastore를 동기로 실행하기 위해 runBlocking을 사용한듯하다.
이 때문에 ANR이 발생하는 케이스가 생기고 있다.
runBlocking을 모두 제거하도록 한다.
@juhwankim-dev juhwankim-dev self-assigned this Jun 3, 2026
@github-actions

github-actions Bot commented Jun 3, 2026

Copy link
Copy Markdown

🤖 AI Code Review (Gemini)

안녕하세요! Pull Request에 대한 코드 리뷰를 시작하겠습니다. runBlocking 제거를 통해 ANR 발생 가능성을 줄이고 앱의 반응성을 개선하려는 목표는 매우 중요하며, 이번 변경사항은 이 목표에 잘 부합합니다.


🟢 전반적인 평가

이번 PR은 runBlocking을 제거하고 DataStore 관련 작업을 코루틴 기반의 suspend 함수로 전환하여, 앱의 성능과 반응성을 크게 향상시키는 긍정적인 변경입니다. Clean Architecture 원칙에 따라 suspend 키워드가 도메인 계층의 인터페이스까지 잘 전파되었고, Presentation 계층에서도 viewModelScope.launch를 사용하여 비동기 작업을 올바르게 처리했습니다.


📝 코드 리뷰 상세

File: data/src/main/java/com/nextroom/nextroom/data/datasource/SettingDataSource.kt

  • 변경 내용: runBlocking 제거 및 모든 관련 함수를 suspend 함수로 전환.
  • 피드백:
    • 🟢 긍정적: runBlocking이 모두 제거되었고, DataStore의 updateDatafirst() 호출이 suspend 함수 내에서 올바르게 처리되었습니다. 이는 ANR 방지에 직접적으로 기여하며, 코루틴 사용의 모범 사례입니다.
    • 🟢 긍정적: getLastLaunchDate(), getEmailSaveChecked(), getUserEmail(), getRecommendBackgroundCustomDialogHiddenUntil() 함수에서 반환 타입을 명시적으로 지정한 것도 가독성을 높이는 좋은 변화입니다.

File: data/src/main/java/com/nextroom/nextroom/data/repository/DataStoreRepositoryImpl.kt

  • 변경 내용: isFirstInitOfDay 속성을 suspend 함수로 변경하고, runBlocking 제거. SettingDataSourcesuspend 함수들을 올바르게 호출하도록 수정.
  • 피드백:
    • 🟢 긍정적: isFirstInitOfDaysuspend 함수로 변경하고, 내부에서 settingDataSourcesuspend 함수들을 호출하도록 수정한 것은 매우 올바른 접근입니다. 이로써 DataStore 작업이 완전히 비동기적으로 처리됩니다.
    • 🟢 긍정적: setRecommendBackgroundCustomDialogHiddengetRecommendBackgroundCustomDialogHiddenUntil, setNetworkDisconnectedCount 또한 suspend 함수로 전환되어 DataStore 접근이 일관되게 비동기 방식으로 이루어집니다.

File: domain/src/main/java/com/nextroom/nextroom/domain/repository/DataStoreRepository.kt

  • 변경 내용: DataStoreRepository 인터페이스의 관련 함수들을 suspend로 변경.
  • 피드백:
    • 🟢 긍정적: suspend 키워드가 도메인 계층의 인터페이스까지 잘 전파되었습니다. 이는 Clean Architecture에서 의존성 역전 원칙을 지키면서 비동기성을 올바르게 표현하는 방법입니다.

File: presentation/src/main/java/com/nextroom/nextroom/presentation/ui/theme_select/RecommendBackgroundCustomViewModel.kt

  • 변경 내용: onDismissClicked() 함수 내에서 dataStoreRepository.setRecommendBackgroundCustomDialogHidden 호출을 viewModelScope.launch로 감싸도록 수정.
  • 피드백:
    • 🟢 긍정적: suspend 함수를 ViewModel에서 호출할 때 viewModelScope.launch를 사용하여 백그라운드 코루틴으로 실행하는 것은 표준적인 접근 방식이며, UI 스레드를 블로킹하지 않습니다.

File: presentation/src/main/java/com/nextroom/nextroom/presentation/ui/theme_select/ThemeSelectViewModel.kt

  • 변경 내용: shouldHideRecommendBackgroundCustomDialogUntil() 함수를 suspend로 변경.
  • 피드백:
    • 🟢 긍정적: dataStoreRepository.getRecommendBackgroundCustomDialogHiddenUntil()suspend 함수가 되었으므로, 이를 호출하는 shouldHideRecommendBackgroundCustomDialogUntil() 또한 suspend로 변경하는 것은 필수적입니다.
    • 🟡 Warning (호출부 확인 필요): shouldHideRecommendBackgroundCustomDialogUntil() 함수가 suspend로 변경됨에 따라, 이 함수를 호출하는 모든 지점에서도 suspend 컨텍스트(예: 다른 suspend 함수 내부 또는 viewModelScope.launch { ... } 블록)에서 호출되어야 합니다. 현재 PR에는 호출부가 포함되어 있지 않으므로, 이 함수가 올바른 suspend 컨텍스트에서 호출되는지 한 번 더 확인해 주시기 바랍니다. 만약 init 블록이나 일반 함수에서 직접 호출되고 있다면, viewModelScope.launch 등으로 감싸는 추가적인 수정이 필요할 수 있습니다.

✨ 전반적인 개선사항

  • runBlocking 제거를 통해 ANR 발생 위험을 효과적으로 줄였습니다.
  • DataStore와 같은 비동기 데이터 소스를 코루틴과 suspend 함수를 사용하여 올바르게 통합했습니다.
  • Clean Architecture의 계층별 책임과 비동기 처리 방식이 잘 반영되었습니다.

🚀 결론

이번 Pull Request는 runBlocking 사용으로 인한 잠재적인 ANR 문제를 해결하고, 코루틴을 활용한 비동기 프로그래밍 모범 사례를 적용하여 코드 품질과 앱의 안정성을 크게 향상시켰습니다.

ThemeSelectViewModel.ktshouldHideRecommendBackgroundCustomDialogUntil() 함수 호출부만 추가적으로 확인해 주시면 좋을 것 같습니다. 그 외의 변경사항은 모두 훌륭합니다.

수고 많으셨습니다!


terminal-notifier -title "Claude Code" -message "코드 리뷰 완료" -sound default


This review was automatically generated using Gemini AI. Please use your judgment when addressing the feedback.

@juhwankim-dev

Copy link
Copy Markdown
Member Author

ai가 확인해달라고 한 부분은 확인완료. 문제없음.
머지합니다.

@juhwankim-dev juhwankim-dev merged commit 2cccfdf into develop Jun 3, 2026
1 check passed
@juhwankim-dev juhwankim-dev deleted the feature/NR-152 branch June 3, 2026 13:58
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.

1 participant