[CaloLink] - 작업 순서

sunghun kim·2025년 8월 12일

[캡디 - CaloLink]

목록 보기
6/9

Phase 0: 기반 뼈대 세우기

본격적인 코딩 전 프로젝트의 규칙과 약속을 정합니다.

  • [Domain] EntityRepositoryProtocol 정의

    • 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 등을 생성하고 관리할 의존성 주입 컨테이너의 기본 구조를 설정합니다.

Phase 1: 핵심 기능 구현

가장 복잡하고 중요한 "검색 → 목록 → 상세" 흐름을 한 번에 뚫어서 아키텍처가 제대로 작동하는지 검증합니다.

  • [Domain] UseCase 구현

    • SearchProductsUseCase를 구현합니다. (내부에서는 RepositoryProtocol을 호출)
    • GetProductDetailUseCase를 구현합니다.
  • [Data] Mock Repository 구현 및 연결

    • ProductRepositoryProtocol을 따르는 MockProductRepository를 만듭니다.
    • 이 클래스는 실제 통신 없이 미리 만들어둔 가짜 Product, ProductDetail 데이터를 반환합니다.
    • DIContainer가 UseCase에 이 MockProductRepository를 주입하도록 설정합니다.
  • [Presentation] 상세 화면 UI 개발

    • DetailViewControllerDetailViewModel을 만듭니다.
    • ViewModelGetProductDetailUseCase를 통해 가짜 상세 데이터를 받아오고,
    • View는 이 데이터를 바탕으로 UI를 완벽하게 그립니다.
  • [Presentation] 검색 결과 화면 UI 개발

    • ListViewControllerListViewModel을 만듭니다.
    • ViewModelSearchProductsUseCase를 통해 가짜 목록 데이터를 받아오고,
    • View는 이 데이터를 UITableView에 표시합니다.
    • 목록의 아이템을 탭 하면 위에서 만든 DetailViewController로 이동하는 로직을 추가합니다.
  • [Data] 실제 Repository로 교체

    • NetworkService를 완성하고 이를 사용하여 실제 API 통신을 하는 DefaultProductRepository를 구현합니다.
    • DIContainer에서 MockProductRepositoryDefaultProductRepository로 교체합니다. (한 줄만 수정!)
    • 이제 앱을 실행하면 실제 서버 데이터가 화면에 나타나는 것을 확인합니다.

Phase 2: 나머지 화면 조립

핵심 기능이 완성되면 이제 나머지 화면들을 만들고 전체적인 흐름을 연결합니다.

  • [Presentation] 검색 화면 개발

    • SearchViewControllerSearchViewModel을 만듭니다.
    • 사용자가 검색어를 입력하고 키보드의 검색 버튼을 누르면 위에서 만든 ListViewController로 검색어를 전달하며 이동하는 로직을 구현합니다.
  • [Presentation] 홈 화면 개발

    • MainViewControllerMainViewModel을 만듭니다.
  • [Presentation] 정렬 및 필터 화면 개발

    • ListViewController에 정렬/필터 버튼을 추가합니다.
    • 이 버튼을 누르면 SortViewController, FilterViewController가 나타나도록 합니다.
    • 사용자가 옵션을 선택하고 "적용" 버튼을 누르면, ListViewModelSearchProductsUseCase를 새로운 조건으로 다시 호출하여 목록을 갱신하도록 합니다.

Phase 3: 기능 고도화

핵심 기능 외에 사용자 경험을 향상시키는 부가 기능들을 추가합니다.

  • [Domain, Data, Presentation] 최근 검색어 기능 추가
    • GetRecentKeywordsUseCase, SaveRecentKeywordUseCase 등을 정의합니다.
    • UserDefaults를 사용하는 로컬 Repository를 구현합니다.
    • SearchViewController에 최근 검색어 목록을 보여주고 탭 하면 바로 검색되도록 UI를 구현합니다.
profile
기죽지않기

0개의 댓글