최근 모바일 앱 시장에서 큰 성공을 거두고 있는 "Cleanup"이라는 아이폰 앱이 있습니다. 이 앱은 지난달에만 700만 달러의 수익을 올렸으며, 연간 8천만 달러에 달하는 엄청난 매출을 기록하고 있습니다. 또한 5천만 명 이상의 월간 활성 사용자를 보유하고 있어, 그 인기는 실로 놀랍습니다. 오늘 우리는 이러한 강력한 앱을 100% AI를 사용하여 아이폰과 아이패드에서 동시에 구현하고 앱 스토어에 제출하는 과정을 살펴볼 것입니다. 이 모든 것을 단 한 번의 세션 안에 말이죠 [1].
**1. 프로젝트의 시작: 앱 컨셉과 첫 프롬프트**
우리가 만들 앱은 'Cleanup'과 유사한 **폰 스토리지 클리너**입니다. 이 앱은 틱톡이나 인스타그램 광고에서 흔히 볼 수 있는 '사진용 틴더(Tinder)'와 같은 방식으로 작동합니다. 즉, 사진을 왼쪽으로 스와이프하면 삭제되고, 오른쪽으로 스와이프하면 보관됩니다. 이 앱은 iOS 네이티브 앱이므로, 일반 모바일 앱처럼 사용자의 사진에 접근할 수 있는 권한을 요청하게 됩니다 [1].
첫 번째 AI 프롬프트는 다음과 같았습니다. "인터넷에서 'Cleanup' 앱을 검색하여 이 앱의 목적과 핵심 가치 제안을 완전히 이해한 다음, 전체 앱을 다시 만드세요. 내 모든 사진을 가져오세요." 이 프롬프트를 Vibe Code라는 클라우드 기반 모바일 앱 개발 도구에 입력했습니다 [1]. Vibe Code의 장점은 아이폰과 아이패드에서 동일한 계정으로 로그인하면, 컴퓨터 없이도 프롬프트 입력과 앱 빌드 과정이 완벽하게 동기화되어 진행된다는 점입니다 [2].
**2. 앱의 초기 형태와 기능 확인**
Vibe Code를 통해 앱이 빌드되자, 우리는 즉시 그 결과물을 확인했습니다. 앱은 시각적으로 매우 깔끔했으며, 모든 앱에 공통적으로 있는 하단 내비게이션 바를 갖추고 있었습니다 [2]. 초기 로딩 후, 앱은 빠르게 사용자의 사진을 불러왔고, "중복 사진 스캔" 기능을 통해 **251개의 중복 사진과 7.9GB의 저장 공간 낭비를 발견**했습니다. 가장 인상 깊었던 점은 이 앱이 **아이폰에 기본적으로 접근하여 실제 사진을 삭제할 수 있다는 것**이었습니다. 이는 네이티브 앱의 강력한 장점입니다 [2].
하지만 첫 번째 버전에서 몇 가지 개선 사항이 발견되었습니다. 사진을 삭제했을 때, 앱 내에서 즉시 시각적으로 반영되지 않고 뒤로 갔다가 다시 들어와야 삭제된 것을 확인할 수 있는 '상태 오류'가 있었습니다. 또한, 앱이 한 번에 1,000장 이상의 사진을 불러오지 못하는 '사진 로딩 제한'이 있었고, 중복 사진 외에도 '흐릿한 사진' 같은 다른 범주를 스캔하고 싶다는 니즈도 있었습니다. 궁극적으로는 모든 사진을 한눈에 볼 수 있는 '전체 갤러리' 기능도 원했습니다 [2, 3].
**3. 첫 번째 개선 작업: 기능 확장과 한계 극복**
이러한 문제점들을 해결하고 기능을 확장하기 위해 우리는 다음 프롬프트를 입력했습니다: "사진을 삭제했을 때 장치에서는 삭제되지만 앱에서는 여전히 보이는 상태 오류를 수정해주세요. 또한 더 많은 빠른 작업 카테고리를 원하며, 모든 사진을 포함하는 새로운 카테고리를 추가해주세요. 그리고 1,000장의 사진 제한을 30,000장으로 늘려주세요." [3]
AI 에이전트들은 아이폰과 아이패드에서 동시에 작업을 수행하며, 심지어 동일한 코드베이스를 공유하면서도 각 기기에 맞춤형 레이아웃을 만들 수 있는 유연성을 보여주었습니다 [3]. 개선된 앱은 **'모든 사진', '중복', '큰 사진', '오래된 사진', '스크린샷', '동영상'과 같은 다양한 새로운 카테고리를 추가**했습니다. '모든 사진' 섹션에서는 이전에 1,000장이 넘는 사진을 볼 수 없었던 것과 달리, **훨씬 많은 사진을 로드할 수 있었으며, 이는 총 123GB에 달하는 사진들을 포함**하고 있었습니다 [3, 4]. 이는 이전에 비해 엄청나게 증가한 수치였습니다 [4]. 아쉽게도, 사진 삭제 시 즉각적인 애니메이션 부재 문제는 여전히 남아있었습니다 [4].
**4. 삭제 애니메이션 개선에 집중**
삭제 애니메이션 문제를 해결하기 위해 다음 프롬프트를 신중하게 작성했습니다: "카테고리 중 하나로 들어가서 사진을 삭제할 때, 아이폰의 기본 '정말 삭제하시겠습니까?' 메시지가 표시된 후, 삭제 버튼을 누르면 즉시 시각적으로 삭제되는 것을 보여주고 싶습니다. 삭제 버튼을 누르는 즉시 반응하여 삭제되는 모습을 보여주세요." [4]
이 단계에서 우리는 중요한 프롬프트 작성 가이드라인을 깨달았습니다. 여러 가지 수정을 한 번에 요청하는 것보다는 **하나의 기능에 집중하거나 서로 관련 있는 요청만 묶어서 하는 것이 더 빠르고 효과적**이라는 것입니다 [4]. 또한, 앱의 핵심 기능이 완전히 작동하게 만든 다음 디자인 작업을 하는 것이 효율적이라고 조언했습니다. 디자인은 나중에 얼마든지 쉽게 바꿀 수 있기 때문입니다 [4].
AI는 이 요청에 따라 사진을 삭제하면 즉시 화면에서 사라지는 기능을 구현했습니다. 완벽한 애니메이션은 아니었지만, MVP(최소 기능 제품)로서는 충분했습니다 [5].
**5. 가장 어려운 도전: 틴더(Tinder) 기능 구현**
다음 목표는 앱의 핵심적인 '틴더'와 유사한 스와이프 기능을 추가하는 것이었습니다. 이 기능은 앱의 새로운 중심 탭으로 추가될 예정이었고, 무작위로 사진이 표시되며 왼쪽으로 스와이프하면 삭제, 오른쪽으로 스와이프하면 유지되는 방식이었습니다 [5]. 또한, 화면 오른쪽 상단에는 폴더 아이콘을 토글하여 특정 카테고리(폴더)의 사진만 스와이프할 수 있도록 할 계획이었습니다. 폴더는 사진 개수가 많은 순서대로 나열되며, 해당 폴더 내에서도 사진은 무작위로 표시될 것입니다 [5, 6].
이 기능은 우리가 지금까지 시도한 것 중 **가장 어려운 작업**이었으며, **처음으로 심각한 버그를 발생**시켰습니다 [6]. '스와이프' 탭으로 이동할 때 앱이 충돌하는 애니메이션 오류가 발생했습니다. 우리는 오류 메시지를 복사하여 AI에게 다시 프롬프트로 전달하며 문제를 해결해달라고 요청했습니다 [6].
**6. 틴더 기능 버그 수정의 반복**
AI는 애니메이션 오류를 성공적으로 수정하여 스와이프 기능을 작동시켰습니다 [6]. 이제 사진을 스와이프하여 삭제하거나 보관하는 것이 가능해졌습니다 [7]. 하지만 몇 가지 새로운 문제들이 드러났습니다: 첫 스와이프 후에는 더 이상 스와이프가 되지 않고 멈춰버리는 문제, 이미지가 흐릿하고 회색으로 보이는 문제, 그리고 이미지가 'X'나 '하트' 버튼, 상단의 폴더 아이콘 등 화면의 다른 요소들을 가리는 문제였습니다 [7].
이러한 문제들을 해결하기 위해 우리는 AI에게 스와이프가 멈추는 것, 이미지 가림 현상을 수정하고, 이미지를 더 작게 만들어서 버튼을 가리지 않도록 요청했습니다. 또한 AI가 다른 기능을 건드리지 않고 이 문제에만 집중하도록 명확한 지시를 내렸습니다 [7, 8].
AI의 수정 후, 이미지는 더 이상 버튼을 가리지 않았고, 연속적인 스와이프도 가능해졌습니다. 그러나 **수평 이미지의 경우 전체 가로세로 비율이 표시되지 않고 잘리는 문제**가 있었으며, 사진을 삭제할 때 **다음 사진 스택이 엉망이 되는 문제**가 여전히 남아있었습니다. 즉, 현재 사진을 삭제하면 배경에 있던 다음 사진이 다른 무작위 사진으로 바뀌는 현상이 발생했습니다 [8]. 우리는 AI에게 모든 사진을 원래 가로세로 비율로 표시하되 최대 높이는 유지하도록 하고, 스택의 순서가 섞이는 '동시성(concurrency)' 문제를 해결해달라고 요청했습니다 [8, 9].
여기서 우리는 앱의 로직에 대한 통찰을 얻었습니다. 현재 앱은 한 번에 하나의 무작위 이미지만 로드하고 있었는데, 이는 틱톡이나 인스타그램처럼 여러 이미지를 미리 로드하여 부드러운 전환을 제공하는 방식과는 달랐습니다 [9].
AI는 가로세로 비율 문제는 해결했지만, 스택 문제는 여전히 남아있었습니다. 특히 사진을 '삭제'할 때 장치에서 삭제 확인 팝업이 뜨는 순간 다음 사진이 바뀌는 현상이 발생했습니다 [10]. 우리는 이 문제를 재차 강조하며, 한 번에 더 많은 카드를 로드하는 방식을 고려해달라고 요청했습니다 [10].
**7. 혁신적인 해결책: 휴지통 기능 도입**
계속되는 스택 문제에 직면하여, 우리는 다른 접근 방식을 시도하기로 결정했습니다. 즉시 삭제 확인 팝업을 띄우는 대신, **삭제할 사진을 별도의 '휴지통'에 임시로 보관한 다음, 사용자가 원할 때 한 번에 비울 수 있도록 하는 것**입니다 [11]. 이는 애플의 기본 사진 앱과 유사한 방식이며, 사용자 경험 측면에서 훨씬 편리할 것이라고 판단했습니다.
AI에게 "사진을 왼쪽으로 스와이프한 후 즉시 삭제 확인 프롬프트가 뜨는 대신, 이제 휴지통에 해당 사진의 위치를 저장하고 사용자가 많은 사진을 휴지통에 보관한 다음, 휴지통을 비워서 모든 사진을 한 번에 삭제할 수 있도록 해주세요"라고 요청했습니다 [11].
놀랍게도, 이 새로운 방식은 성공적이었습니다! 사진은 휴지통에 잘 추가되었고, '휴지통 비우기' 기능을 통해 모든 사진이 삭제되었습니다 [11]. 단 한 가지 문제가 남아있었는데, **휴지통 아이콘 옆에 표시되는 사진 개수가 실시간으로 업데이트되지 않는다는 점**이었습니다. 숫자는 항상 0으로 표시되다가, 휴지통을 비운 후에야 제대로 된 개수가 반영되었습니다 [11, 12]. 이 작은 버그를 수정하기 위해 AI에게 휴지통 아이콘 옆의 숫자가 실시간으로 업데이트되도록 요청했고, AI는 이를 빠르게 해결했습니다. 이제 **휴지통 기능은 완벽하게 작동**했습니다 [12].
**8. 자동 스캔 및 UI 개선으로 MVP 완성**
이제 앱의 핵심 기능들이 안정화되었으므로, 우리는 사용자 편의성 향상에 집중했습니다. 기존에는 흐릿한 사진이나 중복 사진을 찾으려면 매번 수동으로 '스캔' 버튼을 눌러야 했습니다 [12]. 이를 개선하기 위해 **앱을 열면 자동으로 사진 스캔이 이루어지도록 요청**했습니다.
또한, 스와이프 화면에서 이미지가 상단의 '폴더' 메뉴를 가리는 UI 문제를 해결해야 했습니다. 우리는 폴더 메뉴를 **모든 화면 요소 위에 표시되는 드롭다운 모달(Modal)** 형태로 변경해달라고 요청했습니다 [12]. 이로써 사용자가 스와이프를 하는 동안에도 폴더를 선택하는 데 방해가 없도록 했습니다. AI에게는 이미 작동하는 다른 부분은 건드리지 말고, 이 두 가지 개선 사항에만 집중하도록 명확히 지시했습니다 [12].
AI는 자동 스캔 기능을 구현했지만, 앱 상태를 업데이트하려면 수동으로 새로고침해야 하는 작은 문제가 있었습니다. 하지만 MVP로서는 허용 가능한 수준이었습니다 [13]. 가장 중요한 것은 **폴더 드롭다운 모달이 완벽하게 작동하여 중복, 흐릿한 사진 등의 카테고리를 쉽게 선택하고 스와이프 및 삭제할 수 있게 되었다는 점**입니다 [13]. 이로써 우리는 앱의 MVP(최소 기능 제품)를 완성했다고 선언할 수 있었습니다 [13].
**9. 디자인 최종화 및 앱 스토어 제출 준비**
MVP가 완성된 후, 이제 앱을 사용자에게 선보일 준비를 해야 했습니다. 가장 먼저 필요한 것은 **앱 아이콘**이었습니다. 우리는 ChatGPT를 사용하여 'Photo Monkey'라는 앱 이름에 맞춰 원숭이가 사진을 들고 있는 iOS 스타일의 앱 아이콘을 생성했습니다 [13]. 수많은 반복적인 프롬프트 수정을 통해(예: "만화 스타일", "앱 스토어 상위 10위 앱 아이콘 스타일", "흰색 배경 제거", "쓰레기통에 고릴라 사진을 넣는 원숭이", "정사각형으로 만들기" 등) [13, 14], 최종적으로 **고릴라 사진을 쓰레기통에 넣는 만화 스타일의 원숭이 아이콘**을 완성했습니다. 이 아이콘은 photomonkey.app 랜딩 페이지에도 사용될 예정이었습니다 [14].
다음으로, **스플래시 화면**을 디자인했습니다. 앱이 로딩되는 동안 중앙에 아이콘을 표시하고, "Photo Monkey가 이미지를 가져오는 중입니다"와 같은 텍스트를 함께 보여주며, 최소 3초 동안 표시되도록 설정했습니다 [14, 15].
앱 스토어 제출을 위해서는 몇 가지 필수적인 단계가 남아있었습니다. 특히 **Apple의 안전 기능을 위해 앱이 사진, 연락처, 카메라, 캘린더 등 특정 데이터에 접근하는 이유를 명시하는 `info.plist` 파일의 '목적 문자열(purpose strings)'을 추가**해야 했습니다 [16, 17]. Cursor라는 또 다른 AI 도구를 사용하여 코드베이스를 분석하고 필요한 모든 권한 설정을 자동으로 추가하도록 했습니다 [17]. AI는 예상보다 많은 양의 `P list` 항목을 추가했지만, 이는 안전한 방법이었습니다 [17].
이제 앱 스토어 제출을 위한 마지막 절차가 시작되었습니다.
1. **Cursor를 통해 모든 변경 사항을 Git에 커밋**했습니다 [16, 17]. 이는 코드 변경 사항을 저장하고 모든 기기에 동기화하는 과정입니다.
2. 터미널을 열고 **`npx test flight` 명령어를 입력**했습니다 [17]. Test Flight는 Apple 앱 테스트 플랫폼으로, 개발자가 앱을 베타 테스터에게 배포하고 피드백을 받을 수 있게 해줍니다.
3. Test Flight 및 EAS Expo 계정에 로그인하는 절차를 거쳤습니다. 새로운 프로젝트를 생성하고, 앱 식별자를 확인하며, 암호화 사용 여부(Photo Monkey는 로컬 앱이므로 표준 암호화 예외) 등을 확인했습니다 [18].
4. Apple App Store Connect 계정에도 로그인하고, 개발 팀과 프로비저닝 프로필을 설정했습니다. 이 과정에서 여러 번의 확인 및 동의("예")가 필요했습니다 [18].
이 모든 과정을 거쳐, 우리는 **클라우드에서 앱을 빌드하고 App Store Connect에 제출**했습니다 [18]. photomonkey.app 랜딩 페이지는 이미 "Coming Soon"이라는 문구와 함께 준비되어 있었으며, 앱이 승인되면 "Get the App" 링크로 대체될 예정입니다 [19]. 우리는 이제 Apple의 검토 결과를 기다리는 단계에 들어섰습니다 [19].
**10. 결론: AI 개발의 가능성**
단 한 시간이라는 짧은 시간 안에 우리는 연간 8천만 달러의 매출을 올리는 'Cleanup' 앱과 유사한 강력한 기능을 가진 앱을 AI를 사용하여 개발하고 앱 스토어에 제출했습니다 [1, 19]. 이 앱은 **무료로 제공될 예정**입니다 [19].
이 과정은 AI 기반 개발 도구인 Vibe Code와 Cursor의 놀라운 능력을 보여주었습니다. 초기 아이디어 구상부터 복잡한 기능 구현, 버그 수정, 그리고 앱 스토어 제출을 위한 기술적인 요구 사항 충족까지, AI는 개발의 모든 단계에서 핵심적인 역할을 수행했습니다. 반복적인 프롬프트 입력과 AI의 빠른 응답을 통해, 우리는 기존 앱보다 더 나은 앱을 개발할 수 있을 것이라는 확신을 얻었습니다 [15]. 이는 AI가 미래의 앱 개발 방식을 어떻게 변화시킬지 보여주는 강력한 사례입니다.