Hyunjun Kim
← 전체 작업

Case 03 / 09

Momento

AI를 지휘해 같은 앱을 iOS·Android 네이티브로 각각 완성 — 커플 추억 자동 매칭 앱

테스트 중아이디어→출시약 7~8주

2026.05 – 2026.06 / 1인 (AI를 팀으로) / iOS · Android

문제
함께한 순간을 일일이 기록하기 번거롭다 — 둘이 같이 있는 순간을 앱이 알아채게.
내 역할
기획 · 기준 설정 · AI 지휘로 구현 (iOS·Android·백엔드)
스택
SwiftUI · Kotlin · Jetpack Compose · Supabase · WidgetKit

결과

개발 착수 → TestFlight (iOS·Android 네이티브)
약 7~8주
개발 착수 → TestFlight (iOS·Android 네이티브)
iOS·Android 네이티브로 각각 구현
2개 플랫폼
iOS·Android 네이티브로 각각 구현
iOS 기능 모듈
24개
iOS 기능 모듈
iOS 업로드 완료 (Android 개발 중)
TestFlight
iOS 업로드 완료 (Android 개발 중)

⚡ 아이디어→출시

약 7~8주

  1. 2026-03-21

    첫 지시

  2. 45일 뒤

    2026-05-05

    첫 동작

  3. 45일 뒤

    2026-06-19

    첫 출시 · 최신

개발 착수(04-27)→TestFlight 약 7~8주(실작업 약 23일). 아이디어~착수 사이 약 5주 공백(다른 프로젝트 병행)

01

아이디어 / 문제

첫 지시: "커플 둘이 비슷한 공간(오차 10m)에 같이 있을 때 한 명이 사진을 찍으면, 그 사진을 날짜·위치와 함께 자동으로 모아주기 — 할 수 있나?"

커플이 함께한 순간을 일일이 손으로 기록하는 건 번거롭습니다. 두 사람이 같은 장소·시간에 있었던 것을 앱이 자동으로 알아채 추억으로 묶어 주면 어떨까, 라는 일상의 아이디어에서 시작했습니다.

02

내가 정한 기획·기준

  • 페어링, 타임라인, 다이어리, 기념일, 지도, 위치 체크인 등 기능 범위를 직접 기획
  • 플랫폼 기준: iOS는 SwiftUI, Android는 Kotlin/Compose로 각각 네이티브. **"Android에 iOS 코드를 그대로 옮기지 말고 플랫폼 관례를 따를 것"**을 작업 원칙으로 못 박음
  • 디자인 기준: "다꾸톤"(코랄 #E07A5F, 폴라로이드/마스킹테이프/손글씨)
  • 변경 전 부작용을 먼저 설명받고 승인한 뒤에만 수정 — AI 작업의 안전장치로 삼음
Momento — momento 02 1
Momento — momento 02 2
Momento — momento 02 3
Momento — momento 04 ios
iOS · SwiftUI
Momento — momento 04 android
Android · Jetpack Compose

03

AI 지휘 과정

Fig. momento-03

AI 지휘 과정

  1. 01 처음 시킨 것

    iOS와 Android 각각에 대해, 같은 기능을 플랫폼 관례대로 구현하도록 지시했습니다.

  2. 02 확인한 것

    빌드와 화면을 돌려 보며 서버 날짜가 깨지는 지점, Android 빌드가 막히는 지점을 찾았습니다.

  3. 03 수정 지시

    "서버에서 오는 여러 날짜 형식을 유연하게 받는 디코더를 만들어 줘", "Android 의존성 주입 도구가 안 맞으니 수동 싱글톤으로 바꿔 줘"처럼 원인을 짚어 지시했습니다.

실제 지시 (발췌)

  • 안드로이드는 iOS 코드를 복사하지 말고 그 플랫폼 관례대로 다시 만들어.
  • 됐다는 걸 기억 말고 실제 코드로 확인해서 보여줘.

04

막힌 순간과 해결

  • Supabase 날짜 형식 불일치: 서버 날짜 형식이 일정치 않아 iOS 디코딩이 실패했습니다. 여러 형식을 유연하게 받는 커스텀 디코더를 만들도록 지시해 해결했습니다.
  • Android DI 도구 비호환: 최신 빌드 환경과 Hilt가 충돌해, 자동 주입 대신 수동 싱글톤 구조로 바꾸도록 지시해 빌드를 안정화했습니다.
  • 위치 매칭 신뢰도: 두 사람의 위치를 앱에서 비교하면 기기마다 결과가 달라 배터리도 많이 썼습니다. 위치 기록을 서버에 모아 SQL 함수로 매칭 후보를 계산하도록 설계를 바꿨습니다.

Fig. momento-07

위치 매칭을 기기에서 서버로 옮긴 설계

기기 ↔ 기기 직접 비교서버에서 계산
iOSA의 위치 기록 (ping)
AndroidB의 위치 기록 (ping)
DB서버에 위치 기록 저장
SQL매칭 함수같은 장소·시간 후보 계산
결과추억 자동 생성두 사람 타임라인에
두 사람의 위치를 앱끼리 비교하면 기기마다 결과가 달라지고 배터리도 많이 썼습니다. 위치 기록을 서버에 모아 SQL 함수로 매칭 후보를 계산하도록 바꿨습니다.

Case 01

서버에서 받은 날짜가 iOS에서 디코딩 실패로 화면이 깨짐.

  1. 증상

    서버에서 받은 날짜가 iOS에서 디코딩 실패로 화면이 깨짐.

  2. 내 설명

    서버 날짜 형식이 일정치 않아 파싱이 실패한다"고 사실로 전달.
  3. AI 첫 시도

    단일 형식만 가정한 수정은 다른 형식에서 또 실패.

  4. 내가 잡은 포인트

    여러 형식을 모두 받아들이는 유연한 디코더가 필요하다는 점.

  5. 해결

    커스텀 디코더(여러 형식 허용)를 만들도록 지시해 해결.

  6. 재발 방지

    외부에서 들어오는 값은 '형식이 흔들린다'고 가정하고 방어적으로 받음.

Case 02

Android 빌드가 의존성 주입 도구(Hilt)와 최신 빌드 환경 충돌로 실패.

  1. 증상

    Android 빌드가 의존성 주입 도구(Hilt)와 최신 빌드 환경 충돌로 실패.

  2. 내 설명

    빌드 로그와 함께 증상 전달.
  3. AI 첫 시도

    버전만 바꿔선 해결 안 됨.

  4. 내가 잡은 포인트

    Hilt 대신 수동 싱글톤으로 우회하는 편이 맞다는 판단.

  5. 해결

    수동 싱글톤 구조로 바꾸도록 지시해 빌드 안정화.

  6. 재발 방지

    도구 비호환은 억지로 끌고 가지 않고 대안을 먼저 검토.

05

결과 · 수치

  • 같은 앱을 iOS(SwiftUI)와 Android(Compose) 네이티브 양쪽으로 구현
  • iOS 136개 Swift 파일, 약 17,911줄 / 기능 모듈 24개, Android 84개 Kotlin 파일, 약 11,454줄
  • iOS는 TestFlight 업로드 완료(앱스토어 입금 계좌·세금 서류 설정 포함), Android 개발 중
Momento — momento 06

06

회고

같은 기능을 두 플랫폼에서 각자의 방식으로 지시하며, "복사-붙여넣기"가 아니라 플랫폼마다 자연스러운 설계가 따로 있고, 그걸 AI에 지시로 분리해 줘야 한다는 걸 체감했습니다. 다음에는 백엔드와 공통 규칙을 먼저 굳히고 양쪽을 붙이겠습니다.

(01) Review

Honest Review

개발자가 만들었다면?

강점3
  • 기능 범위 — iOS 기능 모듈 24개, TestFlight

    페어링·위치 매칭·타임라인·지도·다이어리·기념일·인앱결제·광고·위젯·복구, TestFlight 빌드 12.

  • 속도·비용 — 약 7주에 네이티브 앱 2개 약 2.9만 줄

    iOS(SwiftUI)·Android(Compose)를 각각 만들고 백엔드 하나, DB 마이그레이션 14개.

  • 현지화 — 4개 언어, 두 플랫폼 키 약 220개 동일

    영·한·일·태 4개 언어를 iOS·Android에서 똑같이 유지.

동등4
  • 구조 — 기능별 폴더, 플랫폼 정석 패턴

    기능별 폴더, @Observable + 뷰모델 13개, 화면 대부분 300~500줄, 백엔드 공통 모듈 분리.

  • 코드 위생 — 깔끔

    강제 언래핑·위험한 캐스팅 사실상 0, 1,000줄 넘는 파일 0.

  • 성능 — 배터리를 배려한 위치 추적

    iOS 100m 이동 필터, Android 15분 백그라운드 작업, DB 공간 인덱스.

  • 보안 기본기 — 모든 테이블에 접근 규칙

    테이블 22개 전부 행 단위 접근 규칙(정책 47개), 키는 서버에만.

다음 단계 (보완 중)5
  • 테스트·자동화 — 매칭 엔진만 테스트 있음

    매칭 백엔드 테스트 8개뿐, 앱 테스트·CI 없음.

    개선 계획 → 페어링·매칭·구매 흐름 테스트 추가, 두 앱 모두 CI.

  • 배포·운영 — 운영 DB와 저장소가 어긋남

    백엔드 저장소는 5월 초 이후 멈췄는데 운영 DB는 계속 바뀜.

    개선 계획 → 운영 스키마를 마이그레이션 파일로 덤프해 커밋, 대시보드 직접 수정 금지.

  • 보안 — 스토어 출시 전 강화

    스토어 출시 전에 구매 처리에 서버 측 확인을 추가하고, 오류를 묻어두지 않고 드러내도록 정리.

    개선 계획 → 구매 검증을 서버 중심으로, 오류 보고 체계화.

  • Android 완성도 — iOS보다 뒤처짐

    iOS를 먼저 완성했고 Android는 개발 중.

    개선 계획 → iOS 기능 목록 기준으로(코드 복사 없이) Android 완성도 끌어올리기.

  • 접근성 — 주요 화면에만 라벨

    화면낭독 라벨 iOS 23곳, Android 약 10곳.

    개선 계획 → 라벨·글자 크기 대응을 출시 체크리스트 필수 항목으로.

다음 프로젝트 →

AttenNFC

기획자의 설계를 AI 구현으로 — NFC·GPS 출퇴근과 급여 자동정산을 묶은 태국 소규모 사업장용 앱

01 NFC 동적 토큰
02 Wi-Fi 신호 (보조)
03 기기 바인딩
04 루팅·탈옥 탐지
출퇴근 기록
케이스 보기
이력서 PDF