앱 개발자들이 쉽게 손대지 않는 영역이 바로 "카메라" 부분인 것 같다. 일반적인 서비스들은 데이터베이스를 연동 한다던가, 자사의 백엔드 API를 연동하여 서비스를 하기 때문에 쉽게 경험하기도 어렵다. 월급을 받으면서 '카메라', '필름', '사진' 관련된 앱을 만든다는 것은 직장인 개발자에게는 꽤 생소한 일일수도 있을것 같다.
앱스토어를 검색해 카메라 관련 앱을 만든 회사들을 훑어보면 금방 알 수 있다. 고도화된 기능을 제공하는 앱이면 빅테크에서 만들었고, 대부분은 소규모 스타트업이나 1인 개발자가 만든 경우가 많다. 잘 만든 앱들은 전 세계적으로 큰 사랑을 받으며 수익화에도 성공하고 있는듯 보인다. 즉, 카메라 앱 개발 경험은 흔하지 않지만, 동시에 큰 기회가 숨어 있는 영역이기도 하다.
디지털 카메라로 촬영한 사진

올해 여름이 다가올 무렵, 우리 가족은 여행을 많이 다니기로 결심 했는데 와이프가 펜트리 저 깊숙히 있던 상자를 꺼내었다. 그 상자에는 아주 오래 전 내가 선물 했던 분홍색 디지털 카메라가 있었다. 알고보니 요즘 2000년대 디지털 카메라 감성이 인스타그램에서 유행을 하고, 옛 디지털카메라의 가격이 역주행을 하고 있다고 한다.
이렇게 시작 됐다. 예전 같았으면 1인 개발자로서 엄두도 내지 못했을 카메라 관련 앱을, 바이브코딩으로 만들어 보기로 했다. ChatGPT도 GPT5로 업그레이드 되고, Gemini 2.5Pro 모델 코드 작성이 아주 뛰어나다는 것을 경험 했다. 많은 토큰을 쏟아내기 위해 ULTRA 요금제를 결제하며 중무장 했다.

특히 이번 프로젝트는 토큰을 쏟아내는 양이 많은 만큼, 인공지능이 알려주는 코드를 내가 모두 흡수를 하지 못할 수도 있을것 같아 학습과 포스팅을 병행하며 진행 하기로 결심 했다. 그동안 너무 무지성으로만 바이브코딩을 진행해서 이제는 동영상강의나 공식 문서를 보며 "학습" 자체를 안하게 됐는데 이게 점점 위험신호라는 것이 느껴진다.
왜 바이브필름(VibeFilm)인가?
이름에서 알 수 있듯이, 단순히 사진을 찍는 도구가 아니라 "감성"을 담아내는 카메라 앱을 목표로 한다. 한 줄로 정의하면 이렇다.
2000~2010년대 디카・필름 감성을 원탭으로 촬영 및 편집하고, SNS 규격에 즉시 맞춰 저장과 공유를 할 수 있는 오프라인 iOS앱
여기서 핵심 키워드는 즉시성, 감성 필터, 간단한 편집, SNS 프리셋, 초보 친화 UI 다섯 가지다.
- 앱을 실행하자마자 바로 카메라 뷰가 열리고, 로그인이나 계정은 필요 없다.
- 홈 기본 탭에는 디카 감성 필터 세트가 자리 잡는다.
- 밝기/노출/대비/온도 정도의 최소한의 조정만으로도 충분히 "그때 그 시절" 사진을 재현할 수 있다.
- 인스타그램, 틱톡, 유튜브 쇼츠 등 SNS 규격 프리셋을 미리 제공한다.
- UI는 큼직한 버튼과 단순한 구조로, 초보자도 어렵지 않게 다룰 수 있다.
문제 정의와 맥락
왜 이런 앱이 필요했을까? 사실 요즘 스마트폰 카메라는 너무 좋아졌다. 자동 HDR, AI 화질 보정, 심지어 인물 사진 보정까지 알아서 해준다. 하지만 아이러니하게도, 너무 깨끗하고 완벽해진 결과물이 오히려 사람들에게 피로감을 준다.
특히 MZ세대 사이에서 2000년대 감성이 유행하면서, 화이트 밸런스가 살짝 틀어진 듯한 색감, 센서가 못 따라가 생긴 노이즈, 플래시 잔상 같은 불완전함이 매력으로 다가오고 있다.
그런데 현실에서 그런 결과물을 얻으려면?
- 중고 디카를 구매해야 하고
- 구형 소프트웨어를 돌려야 하고
- 보정값을 수동으로 찾아야 한다
쉽지 않다. 그래서 원탭으로 디카 감성을 얹어주는 앱이 필요하다.
바이브필름이 제시하는 해법
VibeFilm은 이런 Pain Point를 해결하기 위해 다음을 제공한다.
- 실행 즉시 촬영: 온보딩, 계정, 네트워크 없음. 그냥 켜자마자 바로 찍는다.
- 디카 필터 기본 탑재 : 홈 화면에 디지털카메라 느낌 필터 세트가 기본으로 들어간다.
- SNS 프리셋: 1:1, 4:5, 9:16 등 플랫폼별 규격을 원클릭으로 맞춤.
- 기본 보정 & 이팩트: 밝기/대비/채도 같은 최소한의 보정 + 그러엔/더스트/라이트 누출.
- 오프라인 동작: 모든 편집과 저장은 로컬에서, 계정도 서버도 필요 없다.
페르소나와 사용자 시나리오
앱을 설계할 때 가장 중요하게 본 건 누가 쓰는가다. 크게 세 그룹으로 나눌 수 있었다.
- 뉴트로 크리에이터 (19~29세) : "데이트, 여행, 행사에서 디카 감성 사진을 찍어 바로 올리고 싶다."
- 라이트 유저 (25~40세) : "육아·일상 기록을 간단하게 예쁘게 남기고 싶다."
- 입문 포토러버 (15~24세) : "보정값을 공부하거나 장비에 돈을 쓰지 않고, 그럴듯한 사진을 만들고 싶다."
이 사용자들은 공통적으로 복잡한 앱은 싫다. 원탭, 빠름, 감성, 이 세 가지를 원한다.
프로젝트 구조
VibeFilm을 구현하면서 MVVM 아키텍처를 선택했다. 이유는 단순하다. 카메라 앱은 상태 변화가 엄청 많다.
- 플래시 ON/OFF
- 줌 0.5x/1x/2x/5x
- 현재 적용된 필터
- 촬영한 사진 저장 여부
이걸 View 안에 다 넣으면 코드가 엉망진창 된다. 그래서 역할을 분리 했다. (학습과 병행 하기 위해 가장 익숙하게 사용하는 폴더 구조를 사용했다.)
VibeFilm/
├── App/
├── Components/
├── Models/
├── Protocols/
├── Resources/
├── Services/
├── Utils/
├── ViewModels/
└── Views/
- App: 진입점 (FibeFilmApp.swift)
- Components : 재사용 가능한 UI 버튼들
- Models : 데이터 구조체 (Asset, FilterPreset 등)
- Protocols : 서비스 인터페이스 정의
- Services : 실제 동작 구현 (CameraService, FilterService)
- Utils : AppError, Logger 같은 공통 유틸
- ViewModels : 상태와 로직 (CameraViewModel)
- Views : SwiftUI 화면 (CameraView 등)
마무리
VibeFilm은 단순한 카메라 앱이 아니다. 2000년대 디카 감성을 원탭으로 재현하고, SNS 규격에 맞게 저장 및 공유하며, 100% 오프라인으로 동작한다. 다음 글부터는 실제로 Xcode 프로젝트를 세팅하고, 폴더 구조를 만들어 MVVM 아키텍처를 하나씩 채워 넣는 과정을 다룰 예정이다.