본격적인 코딩 전 프로젝트의 규칙과 약속을 정합니다.
[Domain] Entity 와 RepositoryProtocol 정의
Product Entity: 검색 결과 목록에 필요한 최소 정보(id, 이름, 이미지URL, 가격 등)를 담는 모델을 정의합니다.ProductDetail Entity: 상세 화면에 필요한 모든 정보(상세 영양성분, 쇼핑몰별 가격 리스트 등)를 담는 모델을 정의합니다.ProductRepositoryProtocol: fetchProducts(...)와 fetchProductDetail(...) 함수를 가진 프로토콜을 정의하여 데이터 계층과의 약속을 만듭니다.[Data] DTO 정의 및 NetworkService 기본 틀 작성
ProductDTO, ProductDetailDTO: 백엔드 API 명세서를 보고 서버가 내려주는 JSON과 1:1로 매핑되는 DTO(Data Transfer Object) 모델을 만듭니다.NetworkService 기본 틀: URLSession을 사용하여 GET 요청을 보내는 기본적인 네트워크 통신 클래스의 뼈대를 만듭니다.[Application] DIContainer 설정
ViewModel, UseCase, Repository 등을 생성하고 관리할 의존성 주입 컨테이너의 기본 구조를 설정합니다.가장 복잡하고 중요한 "검색 → 목록 → 상세" 흐름을 한 번에 뚫어서 아키텍처가 제대로 작동하는지 검증합니다.
[Domain] UseCase 구현
SearchProductsUseCase를 구현합니다. (내부에서는 RepositoryProtocol을 호출)GetProductDetailUseCase를 구현합니다.[Data] Mock Repository 구현 및 연결
ProductRepositoryProtocol을 따르는 MockProductRepository를 만듭니다.Product, ProductDetail 데이터를 반환합니다.DIContainer가 UseCase에 이 MockProductRepository를 주입하도록 설정합니다.[Presentation] 상세 화면 UI 개발
DetailViewController와 DetailViewModel을 만듭니다.ViewModel이 GetProductDetailUseCase를 통해 가짜 상세 데이터를 받아오고,View는 이 데이터를 바탕으로 UI를 완벽하게 그립니다.[Presentation] 검색 결과 화면 UI 개발
ListViewController와 ListViewModel을 만듭니다.ViewModel이 SearchProductsUseCase를 통해 가짜 목록 데이터를 받아오고,View는 이 데이터를 UITableView에 표시합니다.DetailViewController로 이동하는 로직을 추가합니다.[Data] 실제 Repository로 교체
NetworkService를 완성하고 이를 사용하여 실제 API 통신을 하는 DefaultProductRepository를 구현합니다.DIContainer에서 MockProductRepository를 DefaultProductRepository로 교체합니다. (한 줄만 수정!)핵심 기능이 완성되면 이제 나머지 화면들을 만들고 전체적인 흐름을 연결합니다.
[Presentation] 검색 화면 개발
SearchViewController와 SearchViewModel을 만듭니다.ListViewController로 검색어를 전달하며 이동하는 로직을 구현합니다.[Presentation] 홈 화면 개발
MainViewController와 MainViewModel을 만듭니다.[Presentation] 정렬 및 필터 화면 개발
ListViewController에 정렬/필터 버튼을 추가합니다.SortViewController, FilterViewController가 나타나도록 합니다.ListViewModel이 SearchProductsUseCase를 새로운 조건으로 다시 호출하여 목록을 갱신하도록 합니다.핵심 기능 외에 사용자 경험을 향상시키는 부가 기능들을 추가합니다.
GetRecentKeywordsUseCase, SaveRecentKeywordUseCase 등을 정의합니다.SearchViewController에 최근 검색어 목록을 보여주고 탭 하면 바로 검색되도록 UI를 구현합니다.