docs(community): 이미지 원본비율 요구를 기록한다
This commit is contained in:
78
docs/20260712_v2_크리에이터_커뮤니티_게시글_이미지_원본비율/plan-task.md
Normal file
78
docs/20260712_v2_크리에이터_커뮤니티_게시글_이미지_원본비율/plan-task.md
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
# v2 크리에이터 커뮤니티 게시글 이미지 원본비율 구현 계획/TASK
|
||||||
|
|
||||||
|
## Goal
|
||||||
|
크리에이터 게시물 상세, 메인 홈 추천 탭 인기 커뮤니티 게시물, 메인 홈 팔로잉 탭 최근 소식 커뮤니티 게시물, 크리에이터 채널 커뮤니티 리스트형 아이템의 이미지를 특정 최대 높이 제한 없이 원본 비율로 표시한다.
|
||||||
|
|
||||||
|
## References
|
||||||
|
- PRD: `docs/20260712_v2_크리에이터_커뮤니티_게시글_이미지_원본비율/prd.md`
|
||||||
|
- 상세 layout: `app/src/main/res/layout/activity_creator_channel_community_detail.xml`
|
||||||
|
- 홈 공통 layout: `app/src/main/res/layout/view_feed_community.xml`
|
||||||
|
- 홈 공통 view: `app/src/main/java/kr/co/vividnext/sodalive/v2/widget/feed/FeedCommunityView.kt`
|
||||||
|
- 상세 activity: `app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/community/detail/CreatorChannelCommunityDetailActivity.kt`
|
||||||
|
|
||||||
|
## Scenario Contract
|
||||||
|
|
||||||
|
### Scenario 1: 일반 이미지 원본 비율 표시
|
||||||
|
- Pass 조건: 컨테이너 폭 300px, 원본 1200x800 이미지는 높이 200px로 계산된다.
|
||||||
|
- Real surface: 홈/상세 커뮤니티 이미지 영역이 고정 `236dp`가 아니라 로드된 이미지 비율 기반 높이를 사용한다.
|
||||||
|
- Test: `FeedCommunityImageSizeTest#커뮤니티 이미지는 원본 비율로 높이를 계산한다`
|
||||||
|
|
||||||
|
### Scenario 2: 세로 이미지 최대 높이 미제한
|
||||||
|
- Pass 조건: 컨테이너 폭 300px, 원본 600x1800 이미지는 높이 900px로 계산된다.
|
||||||
|
- Real surface: 세로로 긴 커뮤니티 이미지도 특정 최대 높이로 자르지 않고 원본 비율대로 표시한다.
|
||||||
|
- Test: `FeedCommunityImageSizeTest#커뮤니티 이미지는 특정 최대 높이로 제한하지 않는다`
|
||||||
|
|
||||||
|
### Scenario 3: 인접 동작 회귀 방지
|
||||||
|
- Pass 조건: 이미지가 없는 커뮤니티 게시글은 이미지 컨테이너가 기존처럼 `GONE`이다.
|
||||||
|
- Real surface: 이미지 없는 홈/상세 게시글의 텍스트/반응 영역 표시가 유지된다.
|
||||||
|
- Test: `FeedViewTest#community recommendation image is hidden when image url is null`
|
||||||
|
|
||||||
|
### Scenario 4: 로드 전 높이와 둥근 모서리 유지
|
||||||
|
- Pass 조건: 이미지 URL이 있는 커뮤니티 게시글은 로드 성공 전 기본 높이를 유지하고, 로드 성공 후 원본 비율 높이를 적용한다.
|
||||||
|
- Real surface: 홈 추천 인기 커뮤니티 이미지가 사라지지 않고, 홈 팔로잉/상세/리스트 이미지 둥근 모서리가 유지된다.
|
||||||
|
- Test: `FeedViewTest#community image container keeps fallback height until original image ratio is applied`
|
||||||
|
|
||||||
|
## Tasks
|
||||||
|
|
||||||
|
- [x] **Task 1: RED 테스트 작성**
|
||||||
|
- 순수 높이 계산 테스트를 추가한다.
|
||||||
|
- 기존 `236dp` 고정 높이 테스트를 원본 비율 기반 런타임 높이 테스트로 변경한다.
|
||||||
|
- 검증: 구현 전 테스트가 실패한다.
|
||||||
|
|
||||||
|
- [x] **Task 2: 공통 사이징 helper 구현**
|
||||||
|
- `FeedCommunityImageSize.kt`에 특정 최대 높이 제한 없는 원본 비율 높이 계산 로직을 추가한다.
|
||||||
|
- 검증: helper 테스트가 통과한다.
|
||||||
|
|
||||||
|
- [x] **Task 3: 홈 공통 커뮤니티 카드 적용**
|
||||||
|
- `view_feed_community.xml`의 `236dp` 고정 높이와 `centerCrop`을 제거한다.
|
||||||
|
- `FeedCommunityView`에 로드된 이미지 크기를 적용하는 메서드를 추가한다.
|
||||||
|
- 홈 추천/팔로잉 어댑터의 이미지 로드 성공 시 원본 크기로 높이를 적용한다.
|
||||||
|
- 검증: `FeedViewTest`가 통과한다.
|
||||||
|
|
||||||
|
- [x] **Task 4: 상세 화면 적용**
|
||||||
|
- 상세 layout의 `236dp` 고정 높이와 `centerCrop`을 제거한다.
|
||||||
|
- Glide 로드 성공 시 원본 크기로 높이를 적용한다.
|
||||||
|
- 검증: 컴파일 통과.
|
||||||
|
|
||||||
|
- [x] **Task 5: 최종 검증과 문서 기록**
|
||||||
|
- 관련 단위 테스트, Kotlin 컴파일, ktlint/build를 실행한다.
|
||||||
|
- 가능한 경우 실제 표면을 실행 확인하고, 불가하면 환경 제약을 기록한다.
|
||||||
|
|
||||||
|
- [x] **Task 6: 후속 버그 수정 반영**
|
||||||
|
- 이미지 높이 특정 최대 제한을 제거한다.
|
||||||
|
- 홈 공통 커뮤니티 이미지 컨테이너의 기본 높이와 clipping 배경을 복구한다.
|
||||||
|
- 상세/리스트 이미지 컨테이너에 clipping 기반 둥근 모서리를 적용한다.
|
||||||
|
- 크리에이터 채널 커뮤니티 리스트형 아이템에 원본 비율 sizing을 적용한다.
|
||||||
|
- 검증: 관련 단위 테스트와 Gradle 검증 명령으로 확인한다.
|
||||||
|
|
||||||
|
## Verification Log
|
||||||
|
- 2026-07-12: 사용자 요청, 기존 코드 조사 결과, Plan Agent 결과를 기준으로 구현 계획/TASK를 작성했다. 구현 전 문서 작성 단계이므로 빌드/테스트는 아직 실행하지 않았다.
|
||||||
|
- 2026-07-12: RED 확인. `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.widget.feed.FeedCommunityImageSizeTest" --tests "kr.co.vividnext.sodalive.v2.widget.feed.FeedViewTest"` 실행 결과 신규 `calculateFeedCommunityImageHeight`, `applyCommunityImageSize` 미구현 컴파일 오류가 발생했다. 동일 실행에서 기존 `ChatMainFragmentLayoutTest.kt`의 `btn_chat_floating` 미해결 참조도 함께 노출됐다.
|
||||||
|
- 2026-07-12: 구현 후 `./gradlew --no-daemon :app:compileDebugKotlin` 실행 결과 BUILD SUCCESSFUL을 확인했다.
|
||||||
|
- 2026-07-12: 구현 후 `./gradlew --no-daemon :app:assembleDebug` 실행 결과 BUILD SUCCESSFUL을 확인했다.
|
||||||
|
- 2026-07-12: 구현 후 `./gradlew --no-daemon :app:ktlintCheck` 실행 결과 BUILD SUCCESSFUL을 확인했다. 기존 `.editorconfig disabled_rules` deprecation warning은 출력됐으나 lint 실패는 없었다.
|
||||||
|
- 2026-07-12: 대상 단위 테스트 재실행은 `app/src/test/java/kr/co/vividnext/sodalive/v2/main/chat/ChatMainFragmentLayoutTest.kt:54`, `:74`의 기존 `btn_chat_floating` 미해결 참조로 `compileDebugUnitTestKotlin` 단계에서 차단됐다. 신규 테스트 자체 실행 단계에는 도달하지 못했다.
|
||||||
|
- 2026-07-12: `adb devices` 실행 결과 연결된 기기/에뮬레이터가 없어 홈 추천/팔로잉/상세 화면 실기기 수동 확인은 수행하지 못했다.
|
||||||
|
- 2026-07-12: 후속 요청의 4개 버그 원인을 확인했다. 홈 추천 이미지는 `wrap_content` 컨테이너와 `match_parent` 이미지 조합으로 로드 전 높이가 0이 될 수 있었고, 둥근 모서리는 이미지가 아닌 컨테이너 clipping 책임이 불완전했으며, 크리에이터 채널 커뮤니티 리스트형 아이템은 별도 경로라 기존 `236dp`/`centerCrop` 정책이 남아 있었다.
|
||||||
|
- 2026-07-12: 후속 버그 수정 후 `./gradlew --no-daemon :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.widget.feed.FeedCommunityImageSizeTest" --tests "kr.co.vividnext.sodalive.v2.widget.feed.FeedViewTest" --tests "kr.co.vividnext.sodalive.v2.main.chat.ChatMainFragmentLayoutTest"` 실행 결과 BUILD SUCCESSFUL을 확인했다.
|
||||||
|
- 2026-07-12: 후속 버그 수정 후 `./gradlew --no-daemon :app:compileDebugKotlin`, `./gradlew --no-daemon :app:ktlintCheck`, `./gradlew --no-daemon :app:assembleDebug` 실행 결과 모두 BUILD SUCCESSFUL을 확인했다. ktlint 실행 중 기존 `.editorconfig disabled_rules` deprecation warning은 출력됐으나 실패는 없었다.
|
||||||
91
docs/20260712_v2_크리에이터_커뮤니티_게시글_이미지_원본비율/prd.md
Normal file
91
docs/20260712_v2_크리에이터_커뮤니티_게시글_이미지_원본비율/prd.md
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
# PRD: v2 크리에이터 커뮤니티 게시글 이미지 원본비율
|
||||||
|
|
||||||
|
## 1. Overview
|
||||||
|
v2 크리에이터 커뮤니티 게시글 이미지가 고정 높이로 잘리지 않고 원본 이미지 비율대로 표시되도록 조정한다.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. Problem
|
||||||
|
- 현재 크리에이터 커뮤니티 게시물 상세, 메인 홈 추천 탭 인기 커뮤니티 게시물, 메인 홈 팔로잉 탭 최근 소식 커뮤니티 게시물의 이미지는 `236dp` 고정 높이와 `centerCrop`으로 표시된다.
|
||||||
|
- 크리에이터 채널 커뮤니티 리스트형 아이템도 별도 레이아웃/어댑터를 사용해 동일한 고정 높이와 crop 정책이 남아 있다.
|
||||||
|
- 원본 이미지 비율과 다른 이미지가 잘려 보일 수 있다.
|
||||||
|
- 이전 최대 높이 제한 구현 후 일부 화면에서 이미지가 사라지거나 둥근 모서리가 사라지는 회귀가 발생했다.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. Goals
|
||||||
|
- 요청된 커뮤니티 게시글 이미지를 특정 최대 높이로 제한하지 않고 원본 이미지 비율대로 표시한다.
|
||||||
|
- 이미지 로드 전에는 기존 기본 높이를 임시로 유지해 이미지 영역이 사라지지 않도록 한다.
|
||||||
|
- 기존 유료 잠금 overlay, 오디오 재생 버튼, 댓글/좋아요 영역 동작은 유지한다.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. Non-Goals
|
||||||
|
- 레거시 커뮤니티 목록/상세 화면은 변경하지 않는다.
|
||||||
|
- API/DTO/model 필드는 변경하지 않는다.
|
||||||
|
- 이미지 업로드/크롭 정책은 변경하지 않는다.
|
||||||
|
- 별도 최소 높이, placeholder 비율 정책은 추가하지 않는다.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. Target Users
|
||||||
|
- 크리에이터 커뮤니티 게시글을 보는 사용자
|
||||||
|
- 메인 홈 추천/팔로잉 탭에서 커뮤니티 게시글을 탐색하는 사용자
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. User Stories
|
||||||
|
- 사용자는 커뮤니티 게시글 이미지를 원본 비율대로 확인하고 싶다.
|
||||||
|
- 사용자는 이미지 로드 전후에도 커뮤니티 이미지 영역과 둥근 모서리가 안정적으로 유지되기를 원한다.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. Core Features
|
||||||
|
|
||||||
|
### Feature A: 커뮤니티 이미지 원본비율 표시
|
||||||
|
|
||||||
|
#### Requirements
|
||||||
|
- 크리에이터 게시물 상세 이미지는 원본 이미지 비율로 표시한다.
|
||||||
|
- 메인 홈 추천 탭 인기 커뮤니티 게시물 이미지는 원본 이미지 비율로 표시한다.
|
||||||
|
- 메인 홈 팔로잉 탭 최근 소식 커뮤니티 게시물 이미지는 원본 이미지 비율로 표시한다.
|
||||||
|
- 크리에이터 채널 커뮤니티 리스트형 아이템 이미지는 원본 이미지 비율로 표시한다.
|
||||||
|
- 계산된 이미지 높이를 특정 최대 높이로 제한하지 않는다.
|
||||||
|
|
||||||
|
#### Edge Cases
|
||||||
|
- 원본 이미지 크기 정보가 없으면 기존 화면이 깨지지 않도록 높이를 강제로 계산하지 않는다.
|
||||||
|
- 유료 미구매 overlay는 계산된 이미지 영역 전체를 덮는다.
|
||||||
|
- 이미지가 없는 게시글은 기존처럼 이미지 영역을 숨긴다.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 8. UX / UI Expectations
|
||||||
|
- 이미지는 잘리지 않고 원본 비율 기준으로 표시된다.
|
||||||
|
- `236dp` 고정 높이로 인한 crop은 제거된다.
|
||||||
|
- 로드 성공 전 임시 기본 높이는 유지하되, 로드 성공 후 원본 비율 높이로 교체된다.
|
||||||
|
- 이미지 컨테이너의 둥근 모서리는 홈/상세/리스트 화면에서 유지된다.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 9. Technical Constraints
|
||||||
|
- 신규 코드는 `kr.co.vividnext.sodalive.v2` 하위에 둔다.
|
||||||
|
- 레거시 파일은 직접 수정하지 않는다.
|
||||||
|
- 홈 추천/팔로잉 커뮤니티 카드는 공통 `FeedCommunityView`와 `view_feed_community.xml` 변경으로 처리한다.
|
||||||
|
- 상세 화면은 `CreatorChannelCommunityDetailActivity`와 해당 layout에서 최소 변경한다.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 10. Metrics
|
||||||
|
- 순수 로직 테스트에서 특정 최대 높이 제한 없는 원본 비율 계산이 통과한다.
|
||||||
|
- 관련 Gradle 테스트/빌드가 통과한다.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 11. Open Questions
|
||||||
|
- 현재 추가 확인이 필요한 사항은 없다.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Verification Log
|
||||||
|
- 2026-07-12: 사용자 요청과 기존 조사 결과를 기준으로 PRD를 작성했다. 구현 전 문서 작성 단계이므로 빌드/테스트는 아직 실행하지 않았다.
|
||||||
|
- 2026-07-12: 구현 결과로 요청된 3개 위치의 커뮤니티 게시글 이미지 고정 `236dp`/`centerCrop` 표시를 제거하고, 이미지 로드 성공 시 원본 비율 기반 높이를 적용하되 기기 높이의 1/2로 제한하도록 반영했다. 이미지 URL이 없는 유료 잠금/paywall-only 영역은 원본 비율 계산 대상이 아니므로 기존 기본 높이를 유지한다.
|
||||||
|
- 2026-07-12: 후속 버그 수정 요청에 따라 특정 최대 높이 제한 요구사항을 제거하고, 이미지 로드 전 기본 높이 유지, 컨테이너 clipping 기반 둥근 모서리 유지, 크리에이터 채널 커뮤니티 리스트형 아이템 원본 비율 표시를 추가 범위로 반영했다.
|
||||||
Reference in New Issue
Block a user