Skip to content

Latest commit

 

History

History
97 lines (69 loc) · 3.68 KB

File metadata and controls

97 lines (69 loc) · 3.68 KB
기능 미리보기 기능 미리보기 기능 미리보기
메인 기록 피드

1) PinIt 소개

PinIt은 사진 + 캡션 + 장소를 하나의 기록으로 저장하고, 이를 지도에서 확인하는 iOS 앱입니다.

2) 기능 요구사항 (요약)

  • 이메일/비밀번호 기반 인증
  • 제목/사진/캡션/장소를 포함한 기록 추가
  • 지도에서 기록 확인
  • 기록 삭제
  • 캡션 수정(자동 저장)

3) 기술 스택 / 구조

아키텍처

Clean Architecture + MVVM. 계층 간 의존성은 Presentation → Domain ← Data 의 단방향을 유지합니다.

모듈 구성 (Tuist)

Projects/
├── App/          — 앱 진입점, DI 컨테이너(AppDIContainer), Flow 라우팅
├── Presentation/ — ViewController / ViewModel (UIKit + RxCocoa, Input/Output 패턴)
├── Domain/       — Entity, UseCase, Repository 인터페이스 (외부 의존 없는 순수 Swift)
├── Data/         — Repository 구현체 (Mock 인증, CoreLocation, MapKit, In-Memory Record 등)
└── Core/         — 공통 Extension, Base 클래스, 유틸리티

의존 방향

  • AppPresentation / Domain / Data / Core
  • PresentationDomain / Core
  • DataDomain
  • Domain은 어떤 외부 계층에도 의존하지 않음

주요 기술

분류 사용 기술
언어 / 플랫폼 Swift 5, iOS 17.0+
UI UIKit (코드 기반, Storyboard 미사용), AutoLayout
반응형 RxSwift / RxCocoa
프로젝트 관리 Tuist 4 (SPM 연동)
위치/지도 MapKit, CoreLocation
사진 PhotosUI, PHPickerViewController
영속성 UserDefaults (세션), In-Memory (기록)

주요 패턴

  • ViewModel Input/Output transform 패턴 — ViewController는 이벤트를 Input으로 방출하고 Outputdrive/emit으로 소비
  • 생성자 주입(Constructor Injection) — 모든 의존성은 Protocol 기반으로 주입, 테스트 용이성 확보
  • Coordinator — 화면 전환과 의존성 전달을 ViewController 외부로 분리

4) 실행 방법

  1. Tuist 설치 및 버전 확인
curl -Ls https://install.tuist.io | bash
tuist version
  1. 의존성 설치 및 프로젝트 생성
tuist install
tuist generate
  1. Xcode에서 실행
  • 생성된 PinIt.xcworkspace를 열어 App 스킴을 실행합니다.

5) 테스트 계정 (Mock 로그인)

현재 인증은 백엔드 서버 준비 전까지 Mock으로 동작합니다. 로그인 화면에서 아래 계정으로 진입할 수 있습니다.

이메일 비밀번호
test@pinit.com password1234
  • 다른 값으로 로그인 시 "이메일 또는 비밀번호가 일치하지 않습니다" 에러가 표시됩니다.
  • 로그인 상태는 UserDefaults에 저장되어 앱 재실행 시 유지됩니다.
  • 네트워크 지연을 흉내내기 위해 각 인증 요청은 약 0.3초의 지연을 포함합니다.
  • 백엔드 서버 준비 완료 시 Data 계층의 DefaultAuthRepository / DefaultAuthSessionRepository 구현만 실제 API 호출로 교체하면 됩니다.

6) 시연영상