Skip to content

onesunny2/GG-NA

Repository files navigation

🎞️끄나: 그 때 그 순간의 나를 기억하며

소중한 추억들을 포토카드에 간단한 메시지와 함께 기록 및 보관하는 서비스

image

앱 소개

  • 개발 기간: 25.03.26 ~ 25.04.05 (유지보수 중)
  • 구성 인원: 기획 & 디자인 & iOS 개발 (1인)
  • 최소 버전: iOS 15.0 +

기술스택

image

기능소개

포토카드 작성 및 저장 기능 폴더기반 관리 시스템 커스텀 카메라 및 이미지 필터 기능 폴더별 이미지 미리보기 기능
FaceID 기반 보안 기능 위젯 지원 다양한 색상 테마 지원

사용기능

  • MVVM + Input-Output + Repository 패턴과 RxSwift, RxCocoa를 활용한 아키텍처
    사용자 인터랙션의 실시간 반영, 데이터베이스의 복잡한 데이터 스트림 처리, 이미지 및 FileManager를 통한 비동기 작업 처리
    등의 책임을 명확하게 분리하기 위해 도입
  • Compositional Layout을 활용한 적응형 UI 구현
    디바이스 해상도와 화면 크기에 따른 동적 레이아웃과 반응형 UI 구현
  • CollectionView 셀 재사용 최적화
    prepareForReuse 메서드를 통해 셀 재사용 시 상태를 초기화하여 메모리 누수 방지
  • Realm DB를 활용한 복잡한 구조의 데이터 관리
    Folder → List → EmbeddedObject 구조로 1:N:1 관계 설정
  • 스와이프 애니메이션 모듈 분리 - GNSwipeAnimation
    애니메이션 로직의 변경이 메인 애플리케이션 코드와 비즈니스 로직에 영향을 주지 않도록 모듈화
    도메인 특화 데이터 타입에 의존하지 않는 범용적인 UIView 확장으로 구현하여 재사용성 확보

상세기능

1. AVFoundation 커스텀 카메라 구현

CameraManager (카메라 엔진)
├── AVCaptureSession (세션 관리)
├── AVCaptureVideoDataOutput (비디오 데이터 출력)
├── AVCaptureDeviceInput (카메라 입력)
└── RxSwift Observable (상태 관리)

CameraViewController (UI 컨트롤러)
├── UI 이벤트 바인딩
├── 카메라 상태 구독
└── 촬영 결과 처리

VideoView (렌더링 뷰)
└── CALayer 직접 렌더링

3계층 분리 아키텍처

  • CameraManager: 카메라 세션 및 데이터 처리 로직
  • CameraViewController: UI 이벤트 처리 및 사용자 인터페이스
  • VideoView: 실시간 렌더링 전용 커스텀 뷰

데이터 플로우

image

성능 최적화 전략

  1. RxSwift 기반 상태 관리
  • BehaviorRelay를 활용해 카메라 위치(전후면) 상태 관리
  • Driver를 통한 메인 스레드 UI업데이트 보장
  • PublishRelay로 촬영 결과 비동기 전달
  1. 메모리 최적화
  • UIImage 변환 과정 제거
  • 불필요한 메모리 복사 방지: CVPixelBuffer 직접 활용
  • 약한 참조 사용
  1. 렌더링 최적화
  • CALayer 직접 조작: layer.contents에 CGImage 직접 설정
  • 메인스레드 보장
  1. 스레드 관리
  • background 세션 시작
  • 비디오 처리 전용 큐 사용
  • UI 업데이트 분리

2. 시스템 테마색상 상태관리

  • 사용자가 시스템 테마를 선택했을 때, 실시간으로 앱의 모든 컬러가 이를 감지하여 업데이트 되도록 구현
  • @propertyWrapper와 RxCocoa의 UserDefaults 옵저버 기능을 결합해 현재 테마 색상을 조회하거나 변경할 수 있도록 설계
  • enum에 테마 컬러를 쉽게 추가할 수 있도록 유지보수성과 확장성 고려
image

About

그 시절 그 순간의 내 추억을 담아주는, 끄나 입니다.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages