Skip to content

refactor(home): 홈 프리뷰 수정, 로고 교체 및 썸네일 디버깅 로그#113

Merged
1hyok merged 5 commits into
mainfrom
feat/auth-api
Feb 18, 2026
Merged

refactor(home): 홈 프리뷰 수정, 로고 교체 및 썸네일 디버깅 로그#113
1hyok merged 5 commits into
mainfrom
feat/auth-api

Conversation

@1hyok
Copy link
Copy Markdown
Collaborator

@1hyok 1hyok commented Feb 18, 2026

목적 / 배경

  • 홈 화면 Preview가 Hilt 미사용 환경에서 렌더되지 않는 문제 해결
  • 홈/기록 화면 TopBar 구조 개선 및 상단 로고 교체
  • 애프터노트 동영상 썸네일 로딩 실패 시 원인 파악을 위한 디버깅 로그 추가

변경 사항 요약

  • HomeScreen: ViewModel contract + Fake 적용으로 Preview 정상 렌더 (ProfileEditViewModelContract, MindRecordHomeContract)
  • MindRecordViewModel: MindRecordHomeContract 인터페이스 추가 및 getOrElse → getOrNull() 변경 (Sonar S1874)
  • Empty/Fake 뷰모델 빈 함수에 S1186 대응 주석 추가
  • 홈 상단 로고 리소스 교체 및 코드 정리
  • FuneralVideoUpload: 썸네일 로딩 라이프사이클/브랜치 로깅 보강

주요 수정 파일

  • feature/home/presentation/screen/HomeScreen.kt
  • feature/dailyrecord/presentation/viewmodel/MindRecordViewModel.kt
  • feature/afternote/presentation/component/edit/upload/FuneralVideoUpload.kt
  • 기타 홈/기록 TopBar, 리소스

테스트/검증

  • ./gradlew ktlintCheck, ./gradlew :app:compileDebugKotlin 통과
  • 홈 화면 Preview 빌드 및 표시 확인

Made with Cursor

- `FuneralVideoUpload` 컴포저블에 동영상 URL, 썸네일 URL, 동영상 존재 여부, 비트맵 상태 등의 변화를 추적하는 `LaunchedEffect` 로그를 추가하여 컴포넌트의 상태 변화를 명확히 파악할 수 있도록 했습니다.
- `SideEffect`를 사용하여 각 분기(원격 URL 썸네일, 로컬 비트맵 썸네일, 썸네일 없음)가 실행될 때마다 로그를 남겨, 어떤 조건으로 썸네일이 렌더링되는지 실시간으로 확인할 수 있게 했습니다.
- Coil 이미지 로딩 라이브러리의 `onLoading`, `onSuccess`, `onError` 콜백에 로그를 추가하여 원격 썸네일 이미지의 로딩 시작, 성공, 실패 과정을 추적할 수 있도록 개선했습니다.
- 썸네일 로딩 실패 시 표시되는 플레이스홀더 이미지를 기존 `ic_add_circle`에서 `img_placeholder_1`로 변경했습니다.
- `HomeScreen`과 `RecordMainScreen`의 `TopBar`를 `Column` 내부에서 `Scaffold`의 `topBar` 슬롯으로 이동시켜 레이아웃 구조를 개선했습니다.
- `HomeScreen`의 `@Preview`가 Hilt ViewModel에 의존하지 않도록 `ProfileViewModel`과 `MindRecordViewModel`의 Contract(인터페이스)를 정의하고, 프리뷰용 Fake ViewModel 구현체를 추가했습니다.
- 설정 아이콘 리소스를 `png` 형식에서 벡터 드로어블(`xml`)로 교체했습니다.
- `MindRecordViewModel`에서 날짜 파싱 실패 시 `getOrElse` 대신 `getOrNull`을 사용하도록 코드를 개선했습니다.
- 홈 화면의 상단 로고를 기존 `logo_blue` 이미지에서 새로운 벡터 드로어블인 `ic_home_topbar_logo`로 교체했습니다.
- 로고 교체에 따라 더 이상 사용되지 않는 `onProfileClick` 파라미터를 `HomeHeader` 컴포저블과 관련 호출부에서 제거했습니다.
- `HomeScreen`의 인사말 상단에 `24.dp` 높이의 `Spacer`를 추가하여 상단 여백을 조정했습니다.
- 가독성 향상을 위해 `FakeHomeEvent`와 `FakeMindRecordHomeViewModel` 내 메서드 사이에 공백 라인을 추가했습니다.
- `AuthInterceptor`에서 여러 API 요청이 동시에 401 오류를 반환했을 때, 토큰 재발급 API(`auth/reissue`)가 여러 번 호출되는 경쟁 상태(race condition) 문제를 해결했습니다.
- `synchronized` 블록과 double-check locking 패턴을 적용하여, 여러 스레드가 동시에 토큰 재발급을 시도하더라도 단 하나의 스레드만 실제 재발급을 실행하도록 보장합니다.
- 재발급이 진행되는 동안 대기하던 다른 스레드들은, 재발급이 완료된 후 새로 저장된 액세스 토큰을 사용하여 원래의 요청을 재시도합니다.
- 동기화를 위해 프로세스 전역에서 사용될 `refreshTokenLock` 객체를 `companion object` 내에 추가했습니다.
@1hyok 1hyok merged commit b707a0b into main Feb 18, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant