Skip to content

Conversation

@DongChyeon
Copy link
Member

@DongChyeon DongChyeon commented Nov 8, 2025

Related issue 🛠

closed #266

어떤 변경사항이 있었나요?

  • 🐞 BugFix Something isn't working
  • 🎨 Design Markup & styling
  • 📃 Docs Documentation writing and editing (README.md, etc.)
  • ✨ Feature Feature
  • 🔨 Refactor Code refactoring
  • ⚙️ Setting Development environment setup
  • ✅ Test Test related (Junit, etc.)

CheckPoint ✅

PR이 다음 요구 사항을 충족하는지 확인하세요.

  • PR 컨벤션에 맞게 작성했습니다. (필수)
  • merge할 브랜치의 위치를 확인해 주세요(main❌/develop⭕) (필수)
  • Approve된 PR은 assigner가 머지하고, 수정 요청이 온 경우 수정 후 다시 push를 합니다. (필수)
  • BugFix의 경우, 버그의 원인을 파악하였습니다. (선택)

Work Description ✏️

Uncompleted Tasks 😅

  • N/A

To Reviewers 📢

Summary by CodeRabbit

릴리스 노트

  • 새로운 기능

    • 바텀 시트에 suspend 기반 show() / hide() 제어 메서드가 추가되어 사용이 더 쉬워졌습니다.
  • 개선 사항

    • 여러 UI 구성 요소와 상태에 안정성 표시(@stable)가 추가되어 Compose 재구성 예측이 개선됩니다.
    • 안정성 분석 도구가 빌드에 통합되어 렌더링 안정성 점검이 강화됩니다.
    • SDK 및 주요 라이브러리 버전이 상향 조정되었습니다.
  • 업무 처리

    • 불필요한 종속성이 제거되고 빌드 설정이 버전 카탈로그 기반으로 정비되었습니다.

@coderabbitai
Copy link

coderabbitai bot commented Nov 8, 2025

Walkthrough

Compose 안정성 분석기 플러그인과 버전 카탈로그 항목을 추가했고, 여러 Compose 공개 타입들에 @Stable을 적용했습니다. timepicker 렌더링 로직을 derivedState 기반에서 graphicsLayer 내부 계산으로 옮기고, 바텀시트 상태에 show()/hide() suspend API와 setContent 의존을 추가했습니다. 또한 일부 빌드 스크립트에서 버전 카탈로그 접근 방식 변경으로 지역 libs 바인딩이 제거되었습니다.

Changes

코호트 / 파일(들) 변경 요약
안정성 분석기 통합
\build.gradle.kts`, `gradle/libs.versions.toml`, `build-logic/src/main/java/com/yapp/convention/ComposeAndroid.kt``
버전 카탈로그에 stability-analyzer(v0.5.0) 추가, 루트 build.gradle.ktsalias(libs.plugins.stability.analyzer) apply false 선언 추가, Compose 설정에 com.github.skydoves.compose.stability.analyzer 플러그인 적용 추가
@stable 주석 적용
\core/common/src/main/java/com/yapp/common/navigation/OrbitNavigator.kt`, `core/designsystem/src/main/java/com/yapp/designsystem/theme/OrbitColors.kt`, `core/ui/src/main/java/com/yapp/ui/component/timepicker/PickerState.kt`, `core/ui/src/main/java/com/yapp/ui/component/timepicker/OrbitPickerItem.kt`, `core/ui/src/main/java/com/yapp/ui/component/bottomsheet/OrbitBottomSheetState.kt``
여러 공개 클래스/컴포저블에 import androidx.compose.runtime.Stable 추가 및 @Stable 애노테이션 적용 (API 시그니처 변경 없음, 메타데이터만)
바텀시트 상태 API 변경
\core/ui/src/main/java/com/yapp/ui/component/bottomsheet/OrbitBottomSheetState.kt``
클래스 생성자에 private val setContent: (BottomSheetContent?) -> Unit 파라미터 추가, suspend fun show(sheetContent: BottomSheetContent)suspend fun hide() 공개 메서드 추가 (생성자 시그니처 및 공개 메서드 변경)
Picker 항목 렌더링 리팩토링
\core/ui/src/main/java/com/yapp/ui/component/timepicker/OrbitPickerItem.kt``
derivedStateOf 기반 사전 계산 제거 → graphicsLayer 내부에서 거리 기반 alpha/scaleY 연산을 직접 계산하도록 변경; 색상 알파 처리 일부 간소화 (렌더링 로직 이동)
버전/라이브러리 업데이트 및 제거
\gradle/libs.versions.toml`, `core/network/build.gradle.kts`, `app/build.gradle.kts``
compileSdk/targetSdk/버전코드/버전명 등 카탈로그 값 업데이트, Kotlin/KSP/Hilt 등 버전 상향, process-phoenix 항목 제거, 앱/모듈에서 하드코드 SDK·버전 설정을 버전 카탈로그 조회로 변경
빌드-로직: VersionCatalog 접근 변경 / 지역 libs 제거로 영향
\build-logic/src/main/java/.../Extension.kt`, `build-logic/src/main/java/.../CoroutineAndroid.kt`, `build-logic/src/main/java/.../HiltAndroid.kt`, `build-logic/src/main/java/.../HiltKotlin.kt`, `build-logic/src/main/java/.../KotlinAndroid.kt`, `build-logic/src/main/java/.../TestAndroid.kt`, `build-logic/src/main/java/.../TestCoverage.kt`, `build-logic/src/main/java/.../TestKotlin.kt`, `orbit.android.feature.gradle.kts``
Extension.kt에서 ExtensionContainer.libsProject.libs 접근자로 변경. 다수 파일에서 val libs = extensions.libs 로컬 바인딩 제거했으며, 남아있는 libs.findLibrary/... 호출들이 로컬 바인딩 없이 남아 있음(잠재적 컴파일 이슈).

Sequence Diagram(s)

sequenceDiagram
  autonumber
  participant Caller as 호출자 (View / ViewModel)
  participant BottomSheetState as OrbitBottomSheetState
  participant UIHost as BottomSheet 호스트

  Note over Caller,BottomSheetState: show(sheetContent) 흐름 (suspend)
  Caller->>BottomSheetState: show(sheetContent)
  BottomSheetState->>UIHost: setContent(sheetContent)
  UIHost-->>BottomSheetState: 렌더링/확인

  Note over Caller,BottomSheetState: hide() 흐름 (suspend)
  Caller->>BottomSheetState: hide()
  BottomSheetState->>UIHost: setContent(null)
  UIHost-->>Caller: 완료
Loading

(간단한 성공 흐름만 표시 — 색상 강조 미사용)

예상 코드 리뷰 노력

🎯 3 (Moderate) | ⏱️ ~20-30분

  • 주의 필요 영역:
    • core/ui/.../OrbitPickerItem.kt — derivedState 제거에 따른 렌더링 동작 및 성능(리컴포지션) 검증
    • core/ui/.../bottomsheet/OrbitBottomSheetState.kt — 생성자 변경과 새 suspend API의 호출지 영향 확인
    • build-logic/* 및 orbit.android.feature.gradle.kts — libs 로컬 바인딩 제거로 남은 libs.findLibrary 호출들이 해결되는지(컴파일 오류 여부) 확인
    • gradle/libs.versions.toml 및 루트 빌드스크립트 — stability-analyzer 플러그인 및 버전 상향에 따른 빌드 호환성 검증

Pre-merge checks and finishing touches

❌ Failed checks (2 warnings)
Check name Status Explanation Resolution
Out of Scope Changes check ⚠️ Warning PR에는 scope를 벗어난 변경 사항이 포함되어 있습니다. version catalog 업데이트, Kotlin/KSP 버전 업데이트, Hilt 의존성 업데이트 등이 Composable Stability 개선과 직접적인 관련이 없습니다. Composable Stability 개선과 직접적인 관련이 없는 버전 업데이트와 의존성 변경을 별도의 PR로 분리하거나 명확한 설명을 추가하세요.
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed PR 제목은 변경 사항의 핵심을 명확하게 전달합니다. Composable Stability 개선은 주요 변경 사항을 잘 요약하고 있습니다.
Linked Issues check ✅ Passed PR은 @stable 애노테이션을 여러 클래스에 적용하고 OrbitPickerItem에서 불필요한 리컴포지션을 방지하는 변경을 포함하여 이슈 #266의 목표를 충족합니다.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch refactor/#266-composable-stability

📜 Recent review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between bc8dcea and 1577cf0.

📒 Files selected for processing (12)
  • app/build.gradle.kts (1 hunks)
  • build-logic/src/main/java/com/yapp/convention/ComposeAndroid.kt (1 hunks)
  • build-logic/src/main/java/com/yapp/convention/CoroutineAndroid.kt (0 hunks)
  • build-logic/src/main/java/com/yapp/convention/Extension.kt (1 hunks)
  • build-logic/src/main/java/com/yapp/convention/HiltAndroid.kt (0 hunks)
  • build-logic/src/main/java/com/yapp/convention/HiltKotlin.kt (0 hunks)
  • build-logic/src/main/java/com/yapp/convention/KotlinAndroid.kt (1 hunks)
  • build-logic/src/main/java/com/yapp/convention/TestAndroid.kt (0 hunks)
  • build-logic/src/main/java/com/yapp/convention/TestCoverage.kt (0 hunks)
  • build-logic/src/main/java/com/yapp/convention/TestKotlin.kt (0 hunks)
  • build-logic/src/main/java/orbit.android.feature.gradle.kts (0 hunks)
  • gradle/libs.versions.toml (4 hunks)
💤 Files with no reviewable changes (7)
  • build-logic/src/main/java/orbit.android.feature.gradle.kts
  • build-logic/src/main/java/com/yapp/convention/HiltAndroid.kt
  • build-logic/src/main/java/com/yapp/convention/CoroutineAndroid.kt
  • build-logic/src/main/java/com/yapp/convention/TestAndroid.kt
  • build-logic/src/main/java/com/yapp/convention/HiltKotlin.kt
  • build-logic/src/main/java/com/yapp/convention/TestKotlin.kt
  • build-logic/src/main/java/com/yapp/convention/TestCoverage.kt
🚧 Files skipped from review as they are similar to previous changes (1)
  • build-logic/src/main/java/com/yapp/convention/ComposeAndroid.kt
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: build
🔇 Additional comments (5)
build-logic/src/main/java/com/yapp/convention/KotlinAndroid.kt (1)

18-21: 버전 카탈로그 통합이 적절합니다.

하드코딩된 SDK 값을 버전 카탈로그에서 동적으로 가져오도록 변경한 것은 좋은 리팩토링입니다. 버전 관리가 중앙화되어 유지보수성이 향상되었습니다.

build-logic/src/main/java/com/yapp/convention/Extension.kt (1)

24-25: 버전 카탈로그 접근 방식 변경이 적절합니다.

ExtensionContainer.libs에서 Project.libs로 리시버 타입을 변경한 것은 일관된 접근 패턴을 제공하는 좋은 리팩토링입니다. 다른 파일들에서 로컬 libs 바인딩을 제거하고 직접 접근하도록 변경된 것과 일치합니다.

gradle/libs.versions.toml (2)

3-9: SDK 및 앱 버전 업데이트가 적절합니다.

compileSdk와 targetSdk를 35로 업데이트한 것은 최신 Android API 레벨을 반영합니다. versionName과 versionCode 업데이트도 릴리스 관리에 적합합니다.


15-21: ---

Kotlin 2.2.21 업그레이드 — 호환성 확인 체크리스트를 따르세요.

Kotlin 2.2.21로의 업그레이드는 지원되며 안전합니다. 다만 다음 항목을 확인하세요:

• Compose Compiler Gradle 플러그인(id org.jetbrains.kotlin.plugin.compose)을 사용하고 버전을 2.2.21로 설정하세요
• Android Gradle Plugin과 Compose 라이브러리 버전이 Kotlin 2.2.21과 호환하는지 확인하세요
• K2 컴파일러를 사용하는 경우 KSP 플러그인을 K2 호환 버전으로 업데이트하세요
• 모든 Compose 컴파일러 버전이 일치하는지 확인하세요

KSP 버전 "2.2.21-2.0.4"는 올바르게 설정되었습니다.

app/build.gradle.kts (1)

11-18: 버전 카탈로그 통합이 일관되게 적용되었습니다.

앱 모듈의 SDK 및 버전 정보를 하드코딩된 값에서 버전 카탈로그로 변경한 것은 다른 빌드 설정 파일들과 일관되며, 중앙화된 버전 관리를 실현합니다. 구현이 정확합니다.


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 and usage tips.

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: 2

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between b4e7807 and 8a2346c.

📒 Files selected for processing (9)
  • build-logic/src/main/java/com/yapp/convention/ComposeAndroid.kt (1 hunks)
  • build.gradle.kts (1 hunks)
  • core/common/src/main/java/com/yapp/common/navigation/OrbitNavigator.kt (2 hunks)
  • core/designsystem/src/main/java/com/yapp/designsystem/theme/OrbitColors.kt (1 hunks)
  • core/network/build.gradle.kts (0 hunks)
  • core/ui/src/main/java/com/yapp/ui/component/bottomsheet/OrbitBottomSheetState.kt (2 hunks)
  • core/ui/src/main/java/com/yapp/ui/component/timepicker/OrbitPickerItem.kt (3 hunks)
  • core/ui/src/main/java/com/yapp/ui/component/timepicker/PickerState.kt (1 hunks)
  • gradle/libs.versions.toml (4 hunks)
💤 Files with no reviewable changes (1)
  • core/network/build.gradle.kts
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: build
🔇 Additional comments (4)
build-logic/src/main/java/com/yapp/convention/ComposeAndroid.kt (1)

11-11: stability-analyzer 플러그인이 올바르게 적용되었습니다.

Compose 설정 함수 내에서 플러그인을 적용하는 것이 적절하며, 이를 통해 Compose를 사용하는 모든 모듈에서 stability 분석이 자동으로 활성화됩니다. 플러그인 ID도 version catalog의 선언과 정확히 일치합니다.

build.gradle.kts (1)

16-16: 플러그인 선언이 올바르게 추가되었습니다.

루트 build.gradle.kts에서 apply false를 사용한 것은 멀티모듈 프로젝트에서 올바른 패턴입니다. 이를 통해 하위 모듈들이 필요에 따라 플러그인을 선택적으로 적용할 수 있습니다. ComposeAndroid.kt에서 실제로 플러그인을 적용하는 것과 잘 연계됩니다.

gradle/libs.versions.toml (2)

1-198: process-phoenix 제거는 안전하게 수행되었습니다.

검증 결과:

  • 코드베이스 전체에서 "phoenix" 검색: 0개 결과 (gradle 설정 포함)
  • Kotlin 파일의 import/사용처: 없음
  • 빌드 설정에서의 참조: 없음

제공된 코드 스니펫에서 process-phoenix 버전 항목과 라이브러리 선언이 적절히 제거되었으며, 코드베이스의 어느 곳에서도 이 라이브러리를 사용하지 않습니다. 이 변경으로 인한 빌드 오류는 발생하지 않을 것입니다.


16-16: 최신 버전 확인 완료 - 호환성 문제 주의 필요

KSP는 2.2.21-2.0.4 버전이 이전의 2.2.20-2.0.4 버전보다 최신이며, Hilt 2.57.2는 최신 버전입니다. 이 버전은 Gradle 9.0.0 문제를 수정하고 Kotlin stdlib 종속성 선언 오류를 수정했습니다.

그러나 주의할 점은 Hilt 2.57과 Kotlin 2.2.0 이상 사이에 알려진 호환성 문제(이슈 #4848)가 있었으며, 모듈이 호환되지 않는 Kotlin 버전으로 컴파일되었다는 오류가 발생했다는 것입니다. Hilt 2.57.2는 이를 해결했지만, 빌드 시 다음을 확인하기 바랍니다:

  • 빌드가 Kotlin 메타데이터 호환성 오류 없이 성공하는지 확인
  • KSP를 통한 Hilt 주석 처리가 제대로 작동하는지 테스트
  • 특히 androidx.hilt 확장(1.3.0)도 함께 사용하는 경우 모든 컴파일러가 호환되는지 검증

@YAPP-Github YAPP-Github deleted a comment from coderabbitai bot Nov 8, 2025
@YAPP-Github YAPP-Github deleted a comment from coderabbitai bot Nov 8, 2025
@codecov
Copy link

codecov bot commented Nov 8, 2025

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 6.22%. Comparing base (3a7106b) to head (1577cf0).
⚠️ Report is 11 commits behind head on develop.

❌ Your project status has failed because the head coverage (6.22%) is below the target coverage (60.00%). You can increase the head coverage or adjust the target coverage.

Additional details and impacted files

Impacted file tree graph

@@             Coverage Diff              @@
##             develop    #267      +/-   ##
============================================
- Coverage       6.54%   6.22%   -0.32%     
  Complexity        67      67              
============================================
  Files             53      53              
  Lines           4387    4434      +47     
  Branches         637     774     +137     
============================================
- Hits             287     276      -11     
- Misses          4072    4124      +52     
- Partials          28      34       +6     

see 27 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@DongChyeon DongChyeon merged commit f693934 into develop Nov 8, 2025
3 of 4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[REFACTOR] Composable Stability 개선

2 participants