소중한 추억들을 포토카드에 간단한 메시지와 함께 기록 및 보관하는 서비스
- 개발 기간: 25.03.26 ~ 25.04.05 (유지보수 중)
- 구성 인원: 기획 & 디자인 & iOS 개발 (1인)
- 최소 버전: iOS 15.0 +
| 포토카드 작성 및 저장 기능 | 폴더기반 관리 시스템 | 커스텀 카메라 및 이미지 필터 기능 | 폴더별 이미지 미리보기 기능 |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
| FaceID 기반 보안 기능 | 위젯 지원 | 다양한 색상 테마 지원 |
|---|---|---|
![]() |
![]() |
![]() |
- MVVM + Input-Output + Repository 패턴과 RxSwift, RxCocoa를 활용한 아키텍처
사용자 인터랙션의 실시간 반영, 데이터베이스의 복잡한 데이터 스트림 처리, 이미지 및 FileManager를 통한 비동기 작업 처리
등의 책임을 명확하게 분리하기 위해 도입 - Compositional Layout을 활용한 적응형 UI 구현
디바이스 해상도와 화면 크기에 따른 동적 레이아웃과 반응형 UI 구현 - CollectionView 셀 재사용 최적화
prepareForReuse 메서드를 통해 셀 재사용 시 상태를 초기화하여 메모리 누수 방지 - Realm DB를 활용한 복잡한 구조의 데이터 관리
Folder → List → EmbeddedObject 구조로 1:N:1 관계 설정 - 스와이프 애니메이션 모듈 분리 - GNSwipeAnimation
애니메이션 로직의 변경이 메인 애플리케이션 코드와 비즈니스 로직에 영향을 주지 않도록 모듈화
도메인 특화 데이터 타입에 의존하지 않는 범용적인 UIView 확장으로 구현하여 재사용성 확보
CameraManager (카메라 엔진)
├── AVCaptureSession (세션 관리)
├── AVCaptureVideoDataOutput (비디오 데이터 출력)
├── AVCaptureDeviceInput (카메라 입력)
└── RxSwift Observable (상태 관리)
CameraViewController (UI 컨트롤러)
├── UI 이벤트 바인딩
├── 카메라 상태 구독
└── 촬영 결과 처리
VideoView (렌더링 뷰)
└── CALayer 직접 렌더링
- CameraManager: 카메라 세션 및 데이터 처리 로직
- CameraViewController: UI 이벤트 처리 및 사용자 인터페이스
- VideoView: 실시간 렌더링 전용 커스텀 뷰
- RxSwift 기반 상태 관리
- BehaviorRelay를 활용해 카메라 위치(전후면) 상태 관리
- Driver를 통한 메인 스레드 UI업데이트 보장
- PublishRelay로 촬영 결과 비동기 전달
- 메모리 최적화
- UIImage 변환 과정 제거
- 불필요한 메모리 복사 방지: CVPixelBuffer 직접 활용
- 약한 참조 사용
- 렌더링 최적화
- CALayer 직접 조작: layer.contents에 CGImage 직접 설정
- 메인스레드 보장
- 스레드 관리
- background 세션 시작
- 비디오 처리 전용 큐 사용
- UI 업데이트 분리
- 사용자가 시스템 테마를 선택했을 때, 실시간으로 앱의 모든 컬러가 이를 감지하여 업데이트 되도록 구현
- @propertyWrapper와 RxCocoa의 UserDefaults 옵저버 기능을 결합해 현재 테마 색상을 조회하거나 변경할 수 있도록 설계
- enum에 테마 컬러를 쉽게 추가할 수 있도록 유지보수성과 확장성 고려






