Skip to content

NR-157 Target sdk 버전을 36으로 변경 - #159

Merged
juhwankim-dev merged 6 commits into
developfrom
feature/NR-157
Aug 9, 2026
Merged

NR-157 Target sdk 버전을 36으로 변경#159
juhwankim-dev merged 6 commits into
developfrom
feature/NR-157

Conversation

@juhwankim-dev

Copy link
Copy Markdown
Member

구글 정책 변경으로 target sdk를 36으로 올리는 것이 필수가 되었음..

클로드의 도움을 받아 버전을 올렸습니다.

juhwankim-dev and others added 6 commits August 9, 2026 18:56
macOS가 생성하는 .DS_Store 파일이 저장소에 추적되고 있어 .gitignore에 추가하고
기존에 추적 중이던 파일을 인덱스에서 제거한다.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013Su5M3R7rG13NnEvyhJJc2
AGP 8.9 이상이 Gradle 8.11 이상을 요구하므로 wrapper를 먼저 업그레이드한다.
Gradle 9에서 제거되는 Project.buildDir 대신 layout.buildDirectory를 사용하도록 함께 정리한다.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013Su5M3R7rG13NnEvyhJJc2
Kotlin 2.0부터 Compose 컴파일러가 Kotlin Gradle 플러그인에 통합되므로
composeOptions 대신 compose-compiler 플러그인을 적용한다.
K2를 지원하지 않는 Hilt, Room, KSP도 함께 업그레이드하고,
K2 컴파일에 필요한 힙 메모리를 4GB로 상향한다.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013Su5M3R7rG13NnEvyhJJc2
AGP 8.9에서 내부 API인 gradleLocalProperties의 시그니처가 변경되어
java.util.Properties로 local.properties를 직접 읽도록 수정한다.
AGP 8.x에 맞춰 google-services, crashlytics, navigation 플러그인도 함께 업그레이드한다.
새 lint에서 error로 승격된 SnackbarLayout RestrictedApi 위반도 함께 수정한다.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013Su5M3R7rG13NnEvyhJJc2
edge-to-edge 환경에서는 adjustResize가 더 이상 윈도우 크기를 줄이지 않으므로
updateSystemPadding에서 ime 인셋을 직접 반영하도록 수정한다.
상태바 영역 확보 시 디스플레이 컷아웃도 함께 고려한다.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013Su5M3R7rG13NnEvyhJJc2
@juhwankim-dev juhwankim-dev self-assigned this Aug 9, 2026
@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown

🤖 AI Code Review (Gemini)

안녕하세요! NextRoom 프로젝트의 Target SDK 36 업그레이드 PR에 대한 코드 리뷰를 진행하겠습니다.

전반적으로 Target SDK 36으로의 업그레이드와 관련된 빌드 설정 및 핵심 UI 인셋 처리 로직이 잘 반영된 PR입니다. 특히 Fragment.ktupdateSystemPadding 확장 함수 수정은 최신 Android UI 가이드라인을 잘 따르고 있어 매우 긍정적입니다.

다만, Kotlin, Android Gradle Plugin, Hilt, Room 등 여러 주요 라이브러리의 버전이 크게 올라간 것에 비해 코드 변경 사항이 적어, 추가적인 호환성 문제나 리팩토링이 필요할 수 있다는 우려가 있습니다.


🟢 긍정적인 측면

  1. .gitignore.DS_Store 정리 (.gitignore, .DS_Store, app/.DS_Store, app/release/.DS_Store)
    • macOS 관련 불필요한 파일들을 제거하고 .gitignore에 추가하여 저장소 관리가 깔끔해졌습니다. 좋은 습관입니다.
  2. local.properties 읽기 방식 개선 (app/build.gradle.kts, data/build.gradle.kts)
    • gradleLocalProperties와 같은 내부 Gradle API 대신 java.util.Properties를 사용하여 local.properties를 읽도록 변경한 것은 더 견고하고 표준적인 접근 방식입니다.
  3. Target SDK 36 호환성 처리 (app/src/main/AndroidManifest.xml)
    • android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY 속성을 추가하여 targetSdk 36부터 sw600dp 이상 화면에서 방향/크기 조정 제한을 무시하는 동작을 일시적으로 옵트아웃한 것은 현재 앱이 세로 전용 UI임을 고려할 때 적절한 임시 조치입니다. 주석으로 targetSdk 37부터는 무시될 것이라고 명시한 점도 좋습니다.
  4. Gradle API 현대화 (build.gradle.kts)
    • rootProject.buildDir 대신 rootProject.layout.buildDirectory를 사용하여 빌드 디렉토리를 참조하도록 변경한 것은 최신 Gradle API 사용을 따르는 좋은 변경입니다.
  5. Gradle Daemon JVM 메모리 증설 (gradle.properties)
    • org.gradle.jvmargsXmx 값을 2048m에서 4096m으로 늘린 것은 Kotlin 2.0.x 및 KSP/KAPT 버전 업그레이드로 인한 빌드 시 메모리 부족 현상을 예방하는 데 도움이 될 것입니다.
  6. Compose Compiler 플러그인 통합 (gradle/libs.versions.toml, presentation/build.gradle.kts)
    • Kotlin 2.0.x 버전 업그레이드에 맞춰 compose.compiler 플러그인을 추가하고, composeOptions { kotlinCompilerExtensionVersion = "..." } 설정을 제거한 것은 올바른 변경입니다. Kotlin 2.0.x부터 Compose Compiler는 Kotlin 플러그인에 통합되어 별도로 버전을 명시할 필요가 없습니다.
  7. Snackbar RestrictedApi 사용 명시 (presentation/src/main/java/com/nextroom/nextroom/presentation/common/NRSnackbar.kt)
    • 커스텀 Snackbar 구현을 위해 Snackbar.SnackbarLayout에 접근하는 부분에 @SuppressLint("RestrictedApi")를 추가하고 주석으로 이유를 명시한 것은 의도를 명확히 하고 잠재적인 경고를 관리하는 좋은 방법입니다.
  8. 시스템 패딩 처리 로직 개선 (🔴 Critical, presentation/src/main/java/com/nextroom/nextroom/presentation/extension/Fragment.kt)
    • updateSystemPadding 확장 함수를 ime (키보드) 인셋을 포함하도록 개선한 것은 매우 중요하고 잘 구현된 변경입니다. targetSdk 30+ 및 edge-to-edge 환경에서 android:windowSoftInputMode="adjustResize"가 더 이상 윈도우 크기를 줄이지 않으므로, 키보드에 의해 UI가 가려지는 문제를 해결하기 위해 WindowInsets.Type.ime()를 직접 처리해야 합니다. displayCutout()statusBars()와 함께 고려한 점도 완벽합니다. 이 변경은 targetSdk 36 업그레이드의 핵심적인 UI 호환성 문제를 해결합니다.

🟡 경고 및 잠재적 문제

  1. 대규모 라이브러리 버전 업그레이드에 따른 추가 코드 변경 누락 가능성 (gradle/libs.versions.toml)
    • 문제: Kotlin (1.9.10 -> 2.0.21), Android Gradle Plugin (8.1.2 -> 8.9.3), Hilt (2.48 -> 2.52), Room (2.5.2 -> 2.6.1), Navigation (2.7.4 -> 2.8.5), Firebase 관련 라이브러리 등 여러 핵심 라이브러리의 버전이 크게 업그레이드되었습니다. 이러한 대규모 버전 변경은 종종 API 변경, Deprecation, 동작 방식의 변화 등을 수반하며, 단순히 빌드 파일만 수정하는 것을 넘어 코드 레벨에서의 추가적인 수정이 필요할 수 있습니다.
    • 예상되는 영향:
      • Kotlin 2.0.x: 언어 변경 사항, 컴파일러 동작 변화, 코루틴 관련 미묘한 변경 등이 있을 수 있습니다.
      • AGP 8.9.3: 빌드 시스템의 변화, 새로운 기능 또는 기존 기능의 Deprecation이 있을 수 있습니다.
      • Hilt/Room/Navigation: 각 라이브러리의 마이그레이션 가이드를 확인하여 필요한 코드 변경 사항이 없는지 검토해야 합니다. 예를 들어, Room은 2.6.0부터 KSP를 사용할 때 room.schemaLocation 설정이 필요할 수 있습니다.
    • 조치: 이 PR에는 빌드 파일 외에 NRSnackbar.ktFragment.kt의 사소한 변경만 포함되어 있습니다. 업그레이드된 라이브러리들의 공식 마이그레이션 가이드를 참조하여 프로젝트 전반에 걸쳐 추가적인 코드 변경이 필요한지 철저하게 검토하고 테스트해야 합니다. 특히 컴파일 오류가 없더라도 런타임 동작이 변경될 수 있으므로 주의가 필요합니다.

💡 개선 제안

  1. 버전 업그레이드 범위 명확화 및 단계적 접근 고려
    • 제안: targetSdk 업그레이드는 필수적이지만, Kotlin, AGP 등 주요 라이브러리의 대규모 버전 업그레이드는 별도의 PR로 분리하거나, 최소한 해당 변경 사항으로 인해 발생할 수 있는 잠재적 문제와 해결 방안을 PR 설명에 더 상세히 기술하는 것이 좋습니다. 한 번에 너무 많은 것을 변경하면 문제 발생 시 원인 파악이 어려울 수 있습니다.
    • 조치: 현재 PR이 이미 생성되었으므로, 위에 언급된 "경고" 사항에 대한 추가적인 검토 및 테스트 계획을 공유해 주시면 좋겠습니다.

결론

이 PR은 targetSdk를 36으로 올리기 위한 필수적인 빌드 설정 변경과 AndroidManifest.xml의 호환성 속성 추가, 그리고 최신 Android UI 가이드라인에 맞춰 WindowInsets를 처리하는 Fragment.kt의 개선 사항을 포함하고 있어 전반적으로 잘 준비된 PR입니다.

그러나 Kotlin 2.0.x, AGP 8.9.3 등 핵심 라이브러리의 대규모 버전 업그레이드가 포함되어 있으므로, 이로 인해 발생할 수 있는 추가적인 코드 변경 사항이나 런타임 호환성 문제를 철저히 검토하고 충분한 테스트를 거치는 것이 매우 중요합니다.

이 경고 사항에 대한 추가적인 검토 및 테스트가 완료되면 이 PR은 승인될 수 있을 것 같습니다.


terminal-notifier -title "Claude Code" -message "Target SDK 36 업그레이드 PR 코드 리뷰 완료" -sound default


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

@juhwankim-dev juhwankim-dev added 1.6.5 and removed 1.7.0 labels Aug 9, 2026
@juhwankim-dev
juhwankim-dev merged commit 82b8345 into develop Aug 9, 2026
1 check passed
@juhwankim-dev
juhwankim-dev deleted the feature/NR-157 branch August 9, 2026 14:52
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