이 문서는 AI 어시스턴트(Claude Code 등)가 Catchy iOS 애플리케이션의 코드베이스를 이해하고 분석하는 것을 돕기 위해 작성되었습니다. 프로젝트의 아키텍처, 폴더 구조, 핵심 기술 스택 및 주요 비즈니스 로직을 설명합니다.
- 프로젝트명: Catchy (캐치)
- 플랫폼: iOS
- 언어: Swift
- UI 프레임워크: SwiftUI
- 아키텍처: MVVM + Clean Architecture (Presentation, Domain, Data Layer 분리) + Coordinator/Router Pattern
- 네트워크 라이브러리: Moya (Combine 기반 추정)
프로젝트는 기능과 역할에 따라 모듈화되어 있습니다.
앱의 진입점 및 라이프사이클을 관리합니다.
CatchyApp.swift: SwiftUI App entry point.AppDelegate.swift: 서드파티 라이브러리 초기화 및 시스템 이벤트 처리.AppFlow.swift: 앱의 전체적인 흐름 제어 (로그인 분기 등).
앱 전반에서 사용되는 공통 모듈 및 의존성 주입을 담당합니다.
- DIContainer:
DIContainer.swift,UseCaseProvider.swift를 통해 의존성 주입 및 UseCase 관리. - Navigation:
NavigationRouter,NavigationDestination을 사용한 라우팅 처리. - Util: 설정(
Config), 비밀 키 관리(Secret.xcconfig) 등.
UI 컴포넌트, Extension, Enum 등 재사용 가능한 코드가 포함됩니다.
- Enum: 앱 전반의 상태, 에러(
APIError), 상수 관리. - Protocol: UI 및 도메인 로직의 추상화 인터페이스.
- UIComponents: 커스텀 Alert(
CourePollAlert,VisitAlert등), 버튼, 로딩 뷰 등 SwiftUI 컴포넌트.
Data Transfer Object(DTO)와 Domain Entity가 분리되어 있습니다.
- DTO: 서버 응답 모델 (
...DTO.swift).Encodable/Decodable을 준수합니다.Course,Group,Member,Place,Review,Vote등의 도메인별로 분류됨.
- Domain: 앱 비즈니스 로직에서 사용하는 모델 (
UserInfo,UserLocation등).
기능 단위로 화면과 뷰모델이 묶여 있습니다.
- AppFlow:
Login: 로그인 화면 및 소셜 로그인 로직.SignUp: 회원가입 프로세스.Preference: 사용자 취향 분석 설문 (Category, Companion, Date selection 등).Onboarding: 초기 진입 화면.
- Tab: 메인 탭 화면 구성.
API 통신을 담당하며 Moya 프레임워크 구조를 따릅니다.
- Common:
BaseAPIService,APITargetType. - Manager:
AppleLoginManager,KakaoLoginManager,FCMTokenManager등 외부 서비스 연동. - Service: 실제 Moya Provider를 통해 API를 호출하는 구현체 (
CourseService,PlaceService등). - UseCase: ViewModel이 바라보는 비즈니스 로직 계층. Service를 호출하여 데이터를 가공합니다.
- Router: Moya의
TargetType정의 (API 엔드포인트 관리). - TokenRefresh: JWT 토큰 관리 및 갱신 로직 (
AccessTokenRefresher).
Assets.xcassets: 이미지, 아이콘, 색상 리소스.Info.plist: 앱 설정.Fonts: Pretendard 폰트 사용.Json:Sido.geojson(행정구역 데이터).
- View (Module): 사용자 인터랙션을 받고
ViewModel의 메서드를 호출합니다. - ViewModel (Module):
UseCase를 주입받아 비즈니스 로직을 요청합니다. - UseCase (Network/UseCase):
Service를 통해 데이터를 요청하거나 가공합니다. - Service (Network/Service):
Moya Provider를 사용하여Router에 정의된 API를 호출합니다. - Router (Network/Router): API Endpoint, Method, Task 등을 정의합니다.
- DTO (Model/DTO): JSON 응답을 디코딩하여
Domain모델로 변환해 상위 계층으로 전달합니다.
- 코스(Course): AI 기반 코스 생성(
CourseGenerateAIDTO), 추천, 즐겨찾기 기능. - 장소(Place): 장소 검색, 상세 정보, 리뷰, 방문 인증(
VisitCheck). - 그룹/투표(Group/Vote): 그룹 생성, 초대, 코스 결정을 위한 투표 시스템.
- 회원(Member): 소셜 로그인(Kakao/Apple), 프로필 관리, 취향 분석.
- 지도(Map/OSRM): 위치 기반 서비스, 경로 탐색(OSRM 활용), 행정구역 폴리곤 처리.
- SwiftUI: 뷰는 SwiftUI로 작성되었으며,
NavigationStack혹은 커스텀 라우터를 사용하는 것으로 보임. - DI:
DIContainer를 통해 싱글톤 혹은 의존성 그래프를 관리함. - Error Handling:
APIError등을 통해 네트워크 에러를 공통으로 처리. - Config: 민감한 정보(API Key 등)는
Secret.xcconfig로 관리되는 것으로 추정됨.
- 파일 탐색 시
Model/DTO와Model/Domain을 구분하여 데이터의 형태를 파악하세요. - 비즈니스 로직을 찾을 때는
ViewModel보다는Network/UseCase폴더를 먼저 확인하는 것이 정확합니다. - 화면 이동 로직은
Core/Navigation및 각 뷰의 버튼 액션을 확인하세요.