배경
TodayView는 전체 미완료 Todo를 조회한 뒤 요약 카드와 focused, overdue, dueSoon, later, unscheduled 섹션으로 분류해 표시함.
가로 summary와 여러 세로 Todo section을 하나의 collection에서 구성하고, filter·고정·완료 변경에 따른 section/item 이동을 #814의 공용 CollectionUI로 반영한 뒤 List 대비 성능을 측정할 필요가 있음.
선행 이슈
작업 범위
TodayTab target에 Libraries/CollectionUI 직접 의존성 추가
TodayView의 root List를 CollectionUI 기반 collection으로 전환
UICollectionViewDiffableDataSource 사용
UICollectionViewCompositionalLayout 사용
- section identifier를 summary와 각
SectionCategory로 구분
- item identifier를 summary scope와
todo.id가 충돌하지 않는 feature 전용 값으로 구성
- summary는
orthogonalScrollingBehavior를 사용하는 가로 section으로 구성
- Todo는 section header를 가진 세로 list section으로 구성
- feature가 소유하는 순수 UIKit summary cell, Today Todo cell, supplementary header registration 구현
store.sections, summaryCounts, selectedSectionScope, displayOptions를 rendering 입력으로 사용
- 고정 변경에 따른 section 이동은 snapshot move/insert/delete와 필요한
reconfigureItems(_:)로 반영
- 완료 처리는 snapshot에서 해당 Todo ID 제거로 반영
- filter와 scope 변경은 기존 Store 계산 결과로 새 snapshot을 생성해 반영
- cell은 화면 표현에 필요한 값과 callback만 수신하고 Store·Coordinator를 보관하지 않도록 구성
- #812의 렌더링 입력 축소 원칙 준수
기존 동작 보존
- summary 카드 수치, 선택 표시와 scope 전환
- due date·focused filter
focused, overdue, dueSoon, later, unscheduled 분류와 순서
- compact의 navigation과 non-compact의 router 이동
todoDetailPreview 기반 길게 누르기 미리보기
- 좌측 swipe의 고정 전환
- 우측 swipe의 완료 처리
- pull-to-refresh, loading overlay, 빈 상태, alert
TodayFeature의 조회·분류·수정 계약
성능 측정
#814의 공통 절차에 따라 기존 List와 적용 후 collection을 비교함.
- 데이터 건수: 20, 100, 500, 1,000
- 모든 Todo가 한 section에 몰린 경우와 다섯 section에 분산된 경우를 각각 측정
- 시나리오
- 최초 표시
- 60초 연속 scroll
- summary scope 전환
- due date·focused filter 변경
- 고정 변경에 따른 section 이동
- 완료에 따른 item 제거
- 기록
- CPU
- 최대·안정 상태 memory
- hitch 수와 누적 시간
- scope/filter 변경부터 snapshot 반영까지의 시간
- section 이동과 item 제거 반영 시간
- 기기, OS, build configuration, 반복 횟수
- 각 시나리오 5회 반복 후 중앙값과 최대값을 이슈 댓글 또는 PR 본문에 표로 기록
- 개선·동일·악화 판정과 UIKit 구현 유지 여부 기록
완료 조건
제외 범위
- Today Todo 조회 query와
fetchAllPages 계약 변경
- Todo 분류·summary 계산 규칙 변경
- Todo 생성·수정·상세 흐름 변경
- 다른 화면의
List 전환
배경
TodayView는 전체 미완료 Todo를 조회한 뒤 요약 카드와focused,overdue,dueSoon,later,unscheduled섹션으로 분류해 표시함.가로 summary와 여러 세로 Todo section을 하나의 collection에서 구성하고, filter·고정·완료 변경에 따른 section/item 이동을 #814의 공용
CollectionUI로 반영한 뒤List대비 성능을 측정할 필요가 있음.선행 이슈
작업 범위
TodayTabtarget에Libraries/CollectionUI직접 의존성 추가TodayView의 rootList를CollectionUI기반 collection으로 전환UICollectionViewDiffableDataSource사용UICollectionViewCompositionalLayout사용SectionCategory로 구분todo.id가 충돌하지 않는 feature 전용 값으로 구성orthogonalScrollingBehavior를 사용하는 가로 section으로 구성store.sections,summaryCounts,selectedSectionScope,displayOptions를 rendering 입력으로 사용reconfigureItems(_:)로 반영기존 동작 보존
focused,overdue,dueSoon,later,unscheduled분류와 순서todoDetailPreview기반 길게 누르기 미리보기TodayFeature의 조회·분류·수정 계약성능 측정
#814의 공통 절차에 따라 기존
List와 적용 후 collection을 비교함.완료 조건
TodayView에서 SwiftUIList가 제거됨UICollectionViewDiffableDataSource와UICollectionViewCompositionalLayout이 모두 적용됨TodayFeature의 조회·분류 계약 변경 없이 Presentation rendering만 전환됨제외 범위
fetchAllPages계약 변경List전환