기능 하나가 완성됐습니다. 이제 그 기능을 기존 포토북 제작 플로우와 연결해야 합니다.
화면을 추가하고, 흐름을 설계하고, 예상치 못한 아키텍처 충돌을 마주하는 과정입니다.
스토리 목록이 완성된 뒤, 다음 단계는 사진을 보여주는 상세 화면과 포토북 제작으로의 연결이었습니다.
스토리 목록에서 항목을 탭하면, 해당 스토리 안의 사진들을 그리드로 보여주는 상세 화면이 열립니다. Orbit MVI 패턴을 그대로 유지하며 신규 화면을 추가했습니다.
// SideEffect에 Detail 네비게이션 추가 sealed interface PhotoStorySideEffect { data class NavigateToDetail( val story: PhotoStory ) : PhotoStorySideEffect data class NavigateToBookMaking( val story: PhotoStory ) : PhotoStorySideEffect object RequestPermission : PhotoStorySideEffect } // ViewModel: 스토리 선택 시 selectedStory 저장 후 Detail로 이동 var selectedStory: PhotoStory? = null fun onClickStory(story: PhotoStory) = intent { selectedStory = story postSideEffect(NavigateToDetail(story)) } fun onClickMakeBook() = intent { selectedStory?.let { postSideEffect(NavigateToBookMaking(it)) } }
빌드는 성공했습니다. 화면도 열렸습니다. 사진도 보였습니다. 그런데 "포토북 만들기" FAB를 탭하면 아무 반응이 없었습니다. 코드에는 문제가 없는데 왜일까?
onClickMakeBook()이 호출되고, NavigateToBookMaking SideEffect가 발생하며, SnapsSelectProductJunctionFactory를 통해 포토북 편집 화면으로 이동하려 했지만 — 아무 일도 일어나지 않았습니다.
흐름 충돌을 해결하는 방법은 두 가지였습니다. Claude가 각 방식의 구현 방법과 트레이드오프를 분석했고, 최종 결정은 사람이 내렸습니다.
나의스토리에서 포토북 편집기까지 이어지는 최종 흐름입니다. 앱과 웹이 협력해 사용자에게 끊김 없는 경험을 제공합니다.