- MVP
돌아가는 기능부터
2026.09.30 ~ 10.01 · v1 ~ v42
시도
Expo로 프로젝트를 만들고 전화번호 인증 · 프로필 · 1:1 매칭 대화부터 만들었어요. 이어서 유저 탭, 익명 피드, 스토리와 스토리 편집기, 쪽지, 음성 녹음, 차단, 알림, 탈퇴, 설정, 약관까지 이틀 만에 들어갔어요. 디자인은 네 번 다시 해서 지금의 다크 디자인과 글꼴을 정했어요.
부딪힌 문제
- 로그인은 익명 로그인, 본인인증은 PASS로 시작했다가 둘 다 버리고 전화번호 문자 인증으로 정했어요.
- 관리자 기능을 앱 안에 넣었는데, 나중에 별도 관리자 웹사이트로 떼어 냈어요.
- 무료 쪽지를 하루 30개로 시작했다가 3개로 줄였어요.
아쉬운 점
기능은 다 돌아갔지만 결제 · 광고 · 제재 · 안드로이드처럼 실제로 출시해서 운영하는 데 필요한 것이 없었어요.
그래서 다음 판들은 "출시할 수 있는 앱"을 목표로 했어요.
- v50+
출시할 수 있는 앱으로
2026.10.02 ~ 10.03 · v50 ~ v99

네 번 갈아엎은 끝에 정한 피드 카드 
말풍선 반응 · 답장 · 입력 중 표시가 들어간 대화방 시도
안드로이드 대응, 보안 · 어뷰징 · 다계정 막기(한 기기 한 계정), RevenueCat 결제, 말풍선 반응 · 답장 · 입력 중 표시, 3D 큐브로 넘기는 스토리를 넣었어요. 관리자는 별도 웹사이트로 옮겨 역할별 권한 · 운영 기록 · 기간별 · 기능별 제재를 만들고, AdMob 광고를 붙였어요.
부딪힌 문제
- 피드 카드 디자인을 네 번 갈아엎었어요. 목록형(v88) → 시안 카드(v89) → 작은 카드(v90) → 넓고 덜 둥근 카드(v92).
- 고친 파일을 전달하다가, 직접 넣어 둔 결제 설정 값을 빈 값으로 덮어써서 결제가 멈췄어요. → v75에서 되살리고, 사용자가 채운 값이 있는 파일은 덮어쓰지 않는다는 규칙을 만들었어요.
- 광고가 왜 안 나오는지, 상품이 왜 안 불러와지는지 알 수 없었어요. → 안 보여 주는 이유와 못 받은 이유를 남기는 진단 기록과 운영자 전용 결제 진단 버튼을 만들었어요.
- 상품 ID를 App Store Connect에 등록한 이름에 맞춰 다시 바꿨어요(v79).
아쉬운 점
스토어 심사 기준에 맞는지는 제출해 보고서야 알 수 있었어요.
그래서 10월 3일, 1.0.0을 심사에 냈어요.
- 빌드 6
첫 심사와 첫 거절
2026.10.03 ~ 10.04

처음 바로 대화 화면. "서로의 프로필은 공개되지 않고" 바로 다음 친구와 이어졌어요. 심사에서 걸린 게 바로 이 부분이에요. (스토어 스크린샷, 예시 데이터) 시도
빌드 5로 처음 제출했어요. Apple이 신규 개발자 계정에 추가 정보를 요청해서, 실기기 녹화 영상과 질문 여섯 개에 대한 영어 답변을 붙여 빌드 6으로 다시 냈어요.
부딪힌 문제
- 10월 4일 거절. 이유는 세 가지였어요.
- 가이드라인 2.1(b): 앱 안에서 파는 상품을 앱과 함께 심사에 내지 않았어요.
- 가이드라인 1.2: 처음 만난 사람과 이어 주는 채팅은 대화 전에 상대 정보를 보여 주고 수락 · 거절 · 건너뛰기를 고를 수 있어야 하고, 신고를 24시간 안에 처리해야 하고, 스토어 설명에 "무작위 채팅" 같은 표현을 쓰면 안 됐어요.
- 가이드라인 2.5.4: 쓰지 않는 백그라운드 오디오 권한이 켜져 있었어요.
아쉬운 점
앱의 핵심인 바로 대화가 "아무 정보 없이 모르는 사람과 바로 이어지는" 구조였어요.
그래서 바로 대화를 숨기는 대신(A안), 기능을 살린 채 다시 설계하는 B안을 골랐어요.
- 빌드 7
바로 대화를 다시 설계
2026.10.04 ~ 10.20
움직이는 예시: 다시 설계한 바로 대화. 서로의 프로필 카드를 20초 동안 보고, 둘 다 수락해야 3분 대화가 열려요. 시도
매칭되면 서로의 프로필 카드(닉네임 · 성별 · 나이 · 지역 · 소개 · 사진)를 20초 동안 보여 주고, 둘 다 수락해야 대화방이 열리게 바꿨어요. 대화는 1분에서 3분으로 늘렸어요. 연락처나 다른 앱으로 옮기자는 말은 서버가 찾아내서 보낸 사람에게만 경고를 보여 주고 자동으로 신고해요. 약관에 신고 24시간 처리를 넣고, 스토어 문구에서 "랜덤" 표현을 모두 뺐어요. 상품 9개를 앱과 같은 제출에 담고 데모 영상과 영어 답변을 붙여 다시 냈어요.
부딪힌 문제
- 연락처 감지는 처음에 보내기 전에 경고했다가 버렸어요. 보낸 뒤 말풍선 아래에 안내하는 방식으로 바꾸고, 초성과 우회 표현도 잡게 했어요.
- 두 사람의 타이머가 서로 달랐어요. "둘 다 준비되면 시작" 대신 서버 시계에 맞추는 방식으로 고쳤어요.
- 다시 낼 때 실수로 앱만 제출해서, 심사에서 빼고 상품 9개와 앱을 같은 초안에 담아 다시 냈어요.
- 그사이 갤럭시 대응(진동 · 키보드 · 뒤로가기), 화면 최적화 5단계, 서버 비용 줄이기(항상 켜 두던 인증 서버 끄기, 임시 기록 자동 삭제)를 했어요.
- Google Play 계정이 10월 6일 승인돼 내부 테스트를 시작했고, 받은 쪽지 화면에서 뒤로가기가 안 되는 버그를 찾아 고쳤어요. 10월 8일에는 비공개 테스트 검토를 통과했어요.
- 한 대화가 1,041턴까지 길어져서 10월 7일 작업을 Claude Code로 옮겼어요. 대화 전체를 구간별로 다시 읽어 "무엇을 왜 정했는지"를 인수인계 문서로 남기고, 대화에서 전달한 변경 197개가 코드에 다 들어갔는지 하나씩 대조했어요.
아쉬운 점
10월 20일, 두 번째 거절. 앱이 광고 추적 허용(ATT)을 쓰는데 심사팀이 그 창을 찾지 못했어요. 로그인하고 2.5초 뒤에 물어봤는데, 같은 때 알림 허용 창이 먼저 떠서 iOS가 추적 창을 건너뛰었던 거예요.
그래서 빌드 9는 앱을 켜자마자, 로그인 전에 묻기로 했어요.
- 빌드 9
로그인 전에 묻기
2026.10.21 ~ 지금지금
움직이는 예시: 빌드 9의 순서. 앱을 켜면 로그인 화면 위에서 추적 허용을 먼저 묻고, 알림 허용은 그다음이에요. 시도
앱을 켜면 로그인 화면이 뜨기 전, 앱이 활성 상태가 되고 1초 뒤에 추적 허용을 물어요. 창이 안 떴으면 한 번 더 묻고, 알림 허용과 광고 시작은 그다음이에요. 같은 빌드에서 다른 거절 위험도 미리 고쳤어요. 위치 권한을 거부하면 지역을 직접 고를 수 있고, 사진은 사진첩 전체 권한 없이 시스템 선택기로만 골라요. 캡처 방지는 로그인한 뒤부터 켜서 심사용 녹화를 찍을 수 있게 했어요.
부딪힌 문제
- 새로 설치 → 로그인 화면 위에 추적 창 → 거부 → 로그인 화면까지 8초짜리 실기기 녹화를 찍어 심사 답변에 붙였어요.
- 거절된 제출 상태에서는 인앱 상품 칸이 안 보이고 다시 제출도 막혀 있어서, 거절 건을 취소하고 새 초안에 앱과 상품을 모두 담아 10월 21일 다시 냈어요.
- Android는 10월 23일 Google Play 프로덕션 출시 신청이 접수됐어요.
만들면서 생긴 사고와 배운 것
- 여러 줄 명령이 한 줄로 붙어 실행되면서 서버 코드 폴더가 지워졌어요. git으로 되살렸고, 그 뒤로 지우는 명령은 따로 한 줄씩 실행해요.
- 설정 파일에 줄을 덧붙이다 두 줄이 붙어서 관리자 사이트가 서버에 연결되지 않았어요. 그 뒤로 설정 파일은 직접 열어 고쳐요.
- 서버 배포를 빠뜨려서 심사용 계정 로그인이 실패했어요. 그 뒤로 변경마다 "서버 배포 필요"를 따로 적어요.
- TestFlight로 설치한 앱이 개발용 앱을 덮어써서, 고친 게 아이폰에 반영되지 않는 줄 알았어요.
- 판매 지역을 대한민국으로만 해 두었더니, 미국 계정에서는 상품이 하나도 안 보였어요.
- "코드에 들어갔는지"와 "값이 맞는지"는 달랐어요. 197개 변경이 모두 들어간 걸 확인한 뒤에도, 광고 단위 값이 틀려서 이전 빌드에서는 실제 광고가 안 나왔을 수 있다는 걸 찾았어요.