docs(plan): 라이브 이미지 관련 작업 계획 문서를 추가한다
This commit is contained in:
21
docs/20260317_라이브수정배경이미지크롭추가.md
Normal file
21
docs/20260317_라이브수정배경이미지크롭추가.md
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
# 20260317 라이브 수정 배경 이미지 크롭 추가
|
||||||
|
|
||||||
|
## 구현 체크리스트
|
||||||
|
- [x] 라이브 생성 화면의 이미지 선택/크롭 플로우 분석
|
||||||
|
- QA: `LiveRoomCreateView`의 `selectedPickedImage -> normalizedForCrop -> ImageCropEditorView(aspectPolicy: .free)` 흐름과 동일 여부 확인
|
||||||
|
- [x] 라이브 수정 화면(`LiveRoomViewV2`)에 크롭 상태값 및 전환 로직 추가
|
||||||
|
- QA: 배경 이미지 선택 직후 크롭 화면이 표시되고, 적용 시 `viewModel.coverImage`에 크롭 결과 반영
|
||||||
|
- [x] 라이브 수정 다이얼로그와 기존 저장 로직(`editLiveRoomInfo`) 호환 유지
|
||||||
|
- QA: 크롭 완료 이미지가 다이얼로그 썸네일에 노출되고 수정하기 동작 시 기존 multipart 업로드 흐름 유지
|
||||||
|
- [x] 정적 진단 및 빌드 검증
|
||||||
|
- QA: 수정 파일 `lsp_diagnostics` 오류 0건, `xcodebuild ... build` 성공
|
||||||
|
|
||||||
|
## 검증 기록
|
||||||
|
- 2026-03-17
|
||||||
|
- 무엇/왜/어떻게: 라이브 수정 다이얼로그에서 사진 선택 시 바로 `viewModel.coverImage`로 반영되던 흐름을 생성 화면과 동일하게 `선택 -> 이미지 정규화(normalizedForCrop) -> ImageCropEditorView(.free) -> 적용` 순서로 변경했다. 크롭 처리 중에는 반투명 오버레이와 `ProgressView`를 노출해 사용자 대기 상태를 명확히 했다.
|
||||||
|
- 실행 명령: `lsp_diagnostics` (`SodaLive/Sources/Live/Room/V2/LiveRoomViewV2.swift`)
|
||||||
|
- 결과: 오류 0건
|
||||||
|
- 실행 명령: `xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive" -configuration Debug build`
|
||||||
|
- 결과: `** BUILD SUCCEEDED **`
|
||||||
|
- 실행 명령: `xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive" test`
|
||||||
|
- 결과: `Scheme SodaLive is not currently configured for the test action.`
|
||||||
37
docs/20260317_이미지선택크롭지연및미적용수정.md
Normal file
37
docs/20260317_이미지선택크롭지연및미적용수정.md
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
# 20260317 이미지 선택 크롭 지연 및 미적용 수정
|
||||||
|
|
||||||
|
## 구현 체크리스트
|
||||||
|
- [x] 공통 이미지 선택/크롭 경로 전수 분석으로 재현 원인 특정
|
||||||
|
- QA: 크롭 사용 화면과 공통 컴포넌트에서 지연/미로딩 가능 지점을 코드 근거로 식별
|
||||||
|
- [x] 공통 원인 기반으로 크롭 로직 수정
|
||||||
|
- QA: 라이브 수정 포함 모든 크롭 사용 화면이 수정된 공통 로직을 통해 이미지 로딩/적용 가능
|
||||||
|
- [x] 라이브 수정 로딩 UI를 `ProgressView`에서 `LoadingDialog`로 전환
|
||||||
|
- QA: 이미지 준비 중 라이브 수정 화면 상단에 `LoadingDialog` 노출
|
||||||
|
- [x] 정적 진단/빌드/테스트 검증
|
||||||
|
- QA: 수정 파일 `lsp_diagnostics` 0건, `xcodebuild ... build` 성공, 테스트 명령 결과 기록
|
||||||
|
|
||||||
|
## 검증 기록
|
||||||
|
- 2026-03-17
|
||||||
|
- 무엇/왜/어떻게:
|
||||||
|
- 원인 분석
|
||||||
|
- 공통 크롭 사용 화면 5곳(`LiveRoomCreateView`, `LiveRoomViewV2`, `ContentCreateView`, `ProfileUpdateView`, `CreatorCommunityWriteView`)이 모두 `selectedPickedImage -> normalizedForCrop() -> ImageCropEditorView` 경로를 공유했다.
|
||||||
|
- 호출부에서 `normalizedForCrop()`를 1회 수행한 뒤, `ImageCropEditorView` 초기화에서 다시 `image.normalizedForCrop()`를 수행해 대용량 이미지에서 렌더링 비용이 중복되었다.
|
||||||
|
- 기존 `normalizedForCrop()`는 `imageOrientation == .up`이면 원본을 그대로 반환해 대용량 원본이 그대로 크롭 뷰에 들어가면서 표시 지연/미로딩(실사용 시점 디코드 지연, `cgImage` 사용 실패 가능성) 위험을 남겼다.
|
||||||
|
- 크롭 저장 시 오른쪽 흰 선 포함 이슈는 크롭/리사이즈 좌표가 소수점/`integral` 확장에 의해 경계 픽셀을 포함할 수 있는 계산 방식에서 발생 가능하다고 판단했다.
|
||||||
|
- 수정 방식
|
||||||
|
- `ImagePicker.swift`
|
||||||
|
- `ImageCropEditorView` 내부 2차 정규화를 제거(`self.normalizedImage = image`)하고, 표시 이미지도 동일 `normalizedImage`를 사용하도록 통일.
|
||||||
|
- `UIImage.normalizedForCrop(maxDimension: 2048)`를 항상 렌더링+다운스케일하도록 변경해 대용량 원본을 편집 전 단계에서 정규화/경량화.
|
||||||
|
- `cropImage()`의 `cropRect`를 `floor` 기반 픽셀 정렬로 보정하고, `normalizedForCrop`/`resizedToMaxDimension`의 타깃 크기도 정수 픽셀(`floor`)로 맞춰 오른쪽 크롭 선(흰색 라인) 저장 가능성을 제거.
|
||||||
|
- `LiveRoomViewV2.swift`
|
||||||
|
- `isImageLoading` 시 노출 UI를 `ProgressView` 오버레이에서 `LoadingView`로 교체해 라이브 수정 화면 위 로딩 다이얼로그 형태로 표시.
|
||||||
|
- 실행 명령: `grep "ImageCropEditorView\(|normalizedForCrop\(|selectedPickedImage" SodaLive/Sources -R`
|
||||||
|
- 결과: 공통 크롭 호출 경로 5개 화면 + 공통 컴포넌트 1개(`ImagePicker.swift`) 확인
|
||||||
|
- 실행 명령: `grep "self\.normalizedImage\s*=\s*image\.normalizedForCrop\(" SodaLive/Sources -R`
|
||||||
|
- 결과: 0건(크롭 에디터 내부 중복 정규화 제거 확인)
|
||||||
|
- 실행 명령: `xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive" -configuration Debug build`
|
||||||
|
- 결과: `** BUILD SUCCEEDED **`
|
||||||
|
- 실행 명령: `xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive" test`
|
||||||
|
- 결과: `Scheme SodaLive is not currently configured for the test action.`
|
||||||
|
- 실행 명령: `lsp_diagnostics` (`ImagePicker.swift`, `LiveRoomViewV2.swift`)
|
||||||
|
- 결과: SourceKit 환경에서 모듈 해석 이슈(`No such module`)가 재현되어 정적 진단은 빌드 성공 결과로 대체 확인
|
||||||
Reference in New Issue
Block a user