숫자로 본 위핑캠
제품의 기능 범위는 상용 서비스에 가깝습니다. 통화, 본인인증, 결제, 안전 장치, 커뮤니티가 모두 들어 있고 비어 있는 기능은 검색과 아이디 찾기 두 가지입니다. 남은 일은 대부분 운영 서버 전환과 출시 정리입니다.
누가 무엇을 주고받나
일반 데이팅 앱이 "서로 마음에 들면 연결"이라면, 위핑캠은 가격이 먼저 정해져 있습니다. 한쪽은 시간을 팔고, 다른 한쪽은 그 시간을 삽니다.
여성 회원
- 분당 통화 요금을 직접 정합니다 — 영상 1,500~3,000P, 음성 700~1,400P
- 통화 받을 시간대를 정하고, 원하지 않으면 요청 자체를 막을 수 있습니다
- 사진을 유료 앨범으로 올려 열람료를 받을 수 있습니다
- 통화로 적립한 포인트를 기프티콘으로 바꿉니다
- 통화 후 좋은 평가를 받으면 랭킹이 올라갑니다
남성 회원
- 포인트를 인앱결제로 충전합니다
- 접속자 목록에서 상대를 직접 골라 통화를 요청합니다
- 상대가 수락하면 연결되고, 분 단위로 포인트가 차감됩니다
- 유료 사진 열람, 채팅, 선물에도 포인트를 씁니다
- 누적 구매액에 따라 GOLD·VIP·VVIP 등급을 받습니다
설치부터 첫 통화까지
세 장의 소개
영상통화 · 안전과 차단 · 무료 포인트 이벤트. 세 장 중 한 장이 통째로 안전에 배정돼 있습니다.
약관 · 본인인증
문자 인증과 PASS 인증을 교차 확인합니다. 두 번호가 다르면 막힙니다. 추천인 코드는 선택입니다.
사진 · 한 줄 소개
관심사 3개 이상, 태그 최대 5개. 닉네임을 비우면 무작위로 만들어집니다.
승인돼야 이용
평균 5분. 얼굴이 70% 이상 보여야 하고 AI 생성 사진, 단체·연예인 사진은 거절됩니다.
고르고, 요청하고
라이브 탭에서 상대를 골라 통화를 요청합니다. 상대가 수락하면 연결됩니다.
가입 단계의 세부 규칙
| 항목 | 규칙 |
|---|---|
| 로그인 방식 | 휴대폰 번호 또는 이메일 + 비밀번호 (8자 이상, 영문과 숫자 포함) |
| 본인확인 | 문자 인증 + PASS 본인인증, 본인 명의 휴대폰만. 중복 가입은 본인확인 고유값으로 차단 |
| 필수 권한 | 전화 · 알림 · 카메라 · 마이크 · 위치. 하나라도 거부하면 앱이 종료됩니다 |
| 프로필 심사 거절 기준 | 얼굴 70% 미만 · AI 생성 또는 가공 사진 · 단체 사진 · 연예인 사진 |
| 가입 혜택 | 무료 3,000P, 추천인 코드 입력 시 양쪽 모두 3,000P |
화면 구성
하단 탭 다섯 개로 이뤄져 있고, 상단에는 로고와 알림, 검색 아이콘이 있습니다.
| 탭 | 역할 |
|---|---|
| 라이브 | 지금 접속한 회원 목록. 접속 중·통화 중 표시, 성별 필터, 거리 표시. 여기서 통화를 요청합니다 |
| 토크 | 게시판형 커뮤니티. 카테고리와 태그, 댓글 |
| 랭킹 | 통화 평가 기반 순위. 1~3위 시상대와 "첫 순위의 주인공이 될 수 있어요" 빈자리 안내 |
| MY함 | 통화 내역, 채팅, 친구, 포인트 내역 |
| 커뮤니티 | 사진 피드(일상), 좋아요와 댓글, 안전 정책 안내 |
화상통화는 어떻게 연결되나
가장 공들인 부분입니다. 통화 하나에 29개 파일이 붙어 있고, 상대방 앱이 꺼져 있어도 전화가 울리도록 만들어져 있습니다. 무작위로 연결되지 않고, 반드시 상대를 지목하고 상대가 수락해야 이어집니다.
목록에서 상대를 고르고 통화 버튼을 누른다
라이브 탭이나 프로필에서 영상 또는 음성통화를 요청합니다. 먼저 카메라·마이크·통화 알림 권한이 켜져 있는지 검사합니다.
_executeStartVideoCall / _executeStartVoiceCall executeEnsureCallPermissions CALL_NOTIFICATION_DISABLED
통화 세션을 만들고 조건을 확인한다
발신자의 잔액, 상대의 접속·통화 상태, 통화 요청 차단 여부, 통화 가능 시간대를 확인합니다. 상대가 이미 통화 중이면 여기서 막힙니다.
_executeBeginCallSession CALL_BUSY · WALLET_BALANCE_INSUFFICIENT
앱이 꺼져 있어도 잠금화면에 전화가 울린다
휴대폰 기본 전화처럼 수신 화면이 뜹니다. iOS는 CallKit, Android는 ConnectionService를 씁니다. 부재중이면 알림이 남습니다.
flutter_callkit_incoming ACTION_CALL_INCOMING "WipinCam 부재중 통화"
수락, 거절, 또는 응답 없음
앱이 완전히 종료된 상태에서 수락을 누르면 그 동작을 보관했다가 앱이 켜진 뒤 이어서 처리합니다. 거절해도 불이익이 없다고 앱이 안내합니다.
incoming_call_action_store executeDrainIncomingCallActions ACTION_CALL_ACCEPT / DECLINE / TIMEOUT
일회용 입장권을 발급한다
수락이 확인되면 서버가 영상 채널 입장 토큰을 만들어 양쪽에 내려줍니다. 앱에 열쇠를 박아두지 않고 통화마다 발급하므로 외부에서 무단으로 채널에 들어올 수 없습니다.
AgoraJoinToken / parseAgoraJoinToken
같은 채널에 들어가 영상이 이어진다
영상과 음성 전송은 Agora가 맡습니다. 직접 서버를 짓지 않고 Agora의 전 세계 네트워크를 빌려 씁니다. 카메라 끄기, 음소거, 카메라 전환이 가능합니다.
joinChannel → onJoinChannelSuccess enableVideo · startPreview · switchCamera muteLocalAudioStream · muteLocalVideoStream
화면 속 상대가 실제 사람인지 주기적으로 확인한다
통화하는 동안 앱이 서버에 검증 신호를 반복해서 보냅니다. 녹화해 둔 영상을 틀어놓고 사람인 척하는 행위를 막기 위한 장치입니다. 화면 캡처와 녹화는 시스템 차원에서 차단됩니다.
_startCallLivenessHeartbeat _executeSendCallLiveness FLAG_SECURE
잔액이 떨어지면 끊기기 전에 알려주고, 그 자리에서 충전한다
남은 포인트가 1분 미만이면 알림이 뜨고, 0이 되면 통화가 정리되며 종료됩니다. 통화 화면 위에 충전 시트와 선물 시트가 올라옵니다.
call_charge_bottom_sheet _executeOpenPointCharge / _executeShowGiftSheet
정산하고, 평가를 받는다
차감은 앱이 아니라 서버가 합니다. 앱은 통화가 끝나면 잔액을 다시 받아옵니다. 종료 신호가 유실될 경우에 대비해 재시도가 세 겹입니다. 이어서 상대에 대한 평가 화면이 뜹니다.
_executeRefreshWalletAfterCallEnd _executeEndCallWithRetry _executeRetryEndCallInBackground
신호를 세 갈래로 보내는 이유
전화가 울리지 않으면 이런 서비스는 바로 무너집니다. 그래서 "통화 요청이 왔다"는 사실을 전하는 길을 세 개 깔아두었습니다.
실시간 소켓
앱이 켜져 있을 때 가장 빠릅니다. 연결이 유지되는 동안 즉시 전달합니다.
푸시 알림
앱이 꺼져 있을 때 씁니다. 이 신호가 잠금화면의 수신 화면을 띄웁니다.
주기적 확인
앞의 둘이 모두 실패할 때를 대비해 대기 중에는 앱이 서버에 직접 물어봅니다.
통화가 안 될 때 보여주는 안내
| 상황 | 앱 안내 문구 |
|---|---|
| 내가 이미 통화 중 | "이미 통화 중입니다. 잠시 후 다시 이용해 주세요." |
| 상대가 통화 중 | "상대방이 통화 중입니다. 잠시 후 다시 이용해 주세요." |
| 상대가 거절 | "상대방이 통화를 거절했습니다." |
| 상대가 받을 수 없음 | "상대가 전화를 할 수 없는 상태입니다." |
| 내가 요청 차단을 켜둠 | "통화 요청 차단이 활성화되어 있습니다. 설정에서 해제해야 통화를 요청할 수 있습니다." |
| 잔액 부족 | "포인트가 부족해요. 충전 후 다시 통화해 주세요." |
통화가 끝나면 — 평가
평가는 선택이지만, 이 데이터가 랭킹과 제재 판단의 재료가 됩니다. 외모 점수가 아니라 행동을 평가합니다.
돈은 어디서 들어오나
모든 결제는 포인트(P)로 이뤄집니다. 남성 회원이 포인트를 사고, 통화·사진·채팅·선물에 씁니다. 공급측 수익 경로는 통화와 유료 앨범 두 가지입니다.
| 포인트를 쓰는 곳 | 가격 | 누가 정하나 |
|---|---|---|
| 영상통화 | 1,500 ~ 3,000P / 분 | 여성 회원 |
| 음성통화 | 700 ~ 1,400P / 분 | 여성 회원 |
| 유료 앨범 사진 열람 | 50P / 건 | 사진별로 무료·유료 선택 (한 번 결제하면 다시 볼 때 무료) |
| 채팅 전송 | 50P / 건 | 고정 |
| 닉네임 변경 | 5,000P | 고정 · 심사 후 반영 |
| 선물 (기프티콘) | 상품가 | 상품별 |
포인트를 무료로 얻는 길
등급 — 많이 산 사람에게 돌려준다
| 등급 | 조건 (누적 구매액) | 혜택 |
|---|---|---|
| 일반 | 50만원 미만 | — |
| GOLD | 50만원 이상 | 0.5% 적립 + GOLD 쿠폰팩 |
| VIP | 100만원 이상 | 3% 적립 + VIP 쿠폰팩 |
| VVIP | 500만원 이상 | 5% 적립 + VVIP 쿠폰팩 |
공급측 정산 — 현금이 아니라 기프티콘
여성 회원이 통화로 적립한 포인트는 앱 안에서 현금으로 인출하는 경로가 없습니다. 대신 기프티콘 상점에서 상품을 사고, 가입한 휴대폰 번호로 문자(MMS) 발송받습니다. 같은 상점에서 다른 회원에게 선물을 보낼 수도 있습니다.
환불
환불은 고객센터 1:1 문의로 접수합니다. 이미 쓴 포인트와 이벤트로 받은 무상 포인트는 제외됩니다. 통화가 연결되지 않았을 때 자동으로 돌려주는 기능은 없습니다.
왜 하필 인앱결제인가
사람과 사람이 만나는 서비스라면 카드 결제가 훨씬 싸 보입니다. 그런데 이 업종에서는 인앱결제가 사실상 유일하게 열려 있는 길이고, 그 이유는 애플·구글이 아니라 국내 카드사에 있습니다.
정책은 오히려 문을 열어두고 있다
애플은 1:1 실시간 대인 서비스에 한해 외부 결제를 허용합니다(심사 지침 3.1.3(d)). 규정이 드는 첫 예시가 화상 과외입니다. 시간 단위 과금, 실시간 1:1, 공급자가 단가를 정하는 구조라는 점에서 위핑캠의 통화는 1:1 화상강의와 형식이 같습니다. 다만 이 예외를 쓸 수 없는 이유가 있습니다.
포인트가 하나로 묶여 있다
예외는 대인 서비스 결제에만 해당합니다. 같은 포인트로 채팅·닉네임 변경·기프티콘을 사기 때문에 디지털 재화로 분류됩니다.
예외를 주장하면 다른 위험이 커진다
"1:1 유료 대인 서비스를 판다"는 선언이 심사에서 다른 조항의 표적이 됩니다. iOS 심사가 진행 중이라 더 조심해야 합니다.
카드망이 애초에 막혀 있다
예외를 받아도 쓸 결제 수단이 없습니다. 국내 카드사가 이 업종을 받지 않습니다.
국내 카드사가 공유하는 등록 불가 업종에 채팅, 사이버머니 충전, 상품권·기프티콘이 모두 들어 있습니다. 위핑캠은 이 세 가지에 동시에 해당합니다 — 영상·음성 통화, 포인트, 기프티콘 상점. "웹에서 카드로 받으면 되지 않나"라는 대안도 결국 같은 카드사 심사를 통과해야 열립니다.
수수료는 세금이 아니라 입장료에 가깝다
인앱결제는 업종 심사를 거치지 않고, 환불·분쟁·미성년자 결제 취소 처리도 스토어가 상당 부분 맡습니다. 다만 이 앱은 번 돈의 일부를 공급자에게 돌려줘야 하므로 수수료의 무게가 일반 앱보다 큽니다.
| 1만원 충전 기준 | 스토어 30% | 스토어 15% (소규모 사업자) | 웹 결제 3% |
|---|---|---|---|
| 결제 수수료 | −3,000 | −1,500 | −300 |
| 회사 수취 | 7,000 | 8,500 | 9,700 |
| 공급자 몫 (45% 가정) | −4,500 | −4,500 | −4,500 |
| 회사에 남는 금액 | 2,500원 | 4,000원 | 5,200원 |
지금 정해둬야 할 것
소규모 사업자 프로그램 등록
애플·구글 모두 일정 매출까지 수수료가 15%입니다. 신청해야 적용됩니다.
포인트를 두 갈래로 나누기
통화 전용 재화와 범용 포인트를 분리해 두면 나중에 결제 선택지가 생깁니다. 합쳐두면 바꾸기 어렵습니다.
소액은 앱, 고액은 웹
결제 건수의 대부분은 앱에서 받고 큰 금액만 웹으로 받습니다. 앱 안에서 웹 결제를 안내하는 것은 정책 위반입니다.
연결 실패 자동 환불
분쟁이 쌓이면 결제사가 계약을 끊습니다. 분쟁률 관리가 곧 결제망 유지입니다.
가짜와 사고를 막는 여러 겹
이 업종에서 가장 흔한 불만은 "상대가 진짜 사람이 맞느냐"와 "불쾌한 상대를 피할 수 있느냐"입니다. 위핑캠은 가입, 통화 중, 사후 세 단계로 대응합니다.
실명 본인인증
문자와 PASS 인증을 교차 확인합니다. 본인 명의 휴대폰만 가능하고 만 19세 미만은 차단됩니다.
중복 가입 차단
본인확인 기관의 고유값으로 같은 사람의 재가입을 막습니다. 제재 후 새 계정을 만드는 행위를 막습니다.
프로필 사진 심사
얼굴 70% 이상, AI 생성·단체·연예인 사진 거절. 승인 전에는 서비스를 쓸 수 없습니다.
실제 사람 확인
통화 중 주기적으로 서버 검증을 보냅니다. 녹화 영상을 틀어놓는 수법을 겨냥한 장치입니다.
화면 캡처·녹화 차단
Android는 시스템 차원에서 막고 iOS는 감지 시 화면을 가립니다. 반복 시도하면 이용이 제한됩니다. 실제 기기에서 캡처가 검은 화면으로 나오는 것을 확인했습니다.
영상 검열 모듈
부적절한 영상을 탐지하는 Agora 확장 모듈이 앱에 포함돼 있습니다.
신고
회원·통화·게시글·사진·댓글 각각에서 신고합니다. 허위 신고자도 제재 대상입니다.
단계별 제재와 이의제기
경고·기능 제한·정지·영구정지·포인트 회수. 중대한 위반은 신고 횟수와 무관하게 즉시 영구정지되고, 이의제기 절차가 있습니다.
여성 회원 보호 기능
공급측이 원하지 않는 통화를 피할 수 있도록 설계돼 있습니다. 경쟁 서비스에서 찾기 어려운 부분입니다.
통화 요청 차단
켜두면 통화 요청을 받지 않습니다. 필요할 때만 열어둘 수 있습니다.
통화 가능 시간대
통화를 받고 싶은 시간을 직접 정합니다.
잠수 · 비공개 모드
홈과 랭킹에서 내가 보이지 않게 합니다. 위치·거리 노출도 끌 수 있습니다.
"아니요. 통화 요청 차단을 설정하면 먼저 통화를 요청받지 않을 수 있고, 수신 통화를 거절해도 페널티가 없습니다. 원할 때만 응답하세요." 앱 내 자주 묻는 질문 원문
차단
회원 차단
차단하면 서로의 프로필, 채팅, 통화가 모두 막히고 목록·피드·랭킹에서도 보이지 않습니다. 차단 사실은 상대에게 알려지지 않습니다.
지인 차단 (연락처 기반)
휴대폰 연락처에 있는 번호의 회원을 자동으로 차단해 아는 사람과 마주치지 않게 합니다. 연락처 동기화는 선택입니다.
신고 사유
약관은 불법 촬영, 성희롱, 협박, 타인 사칭, 개인정보 요구, 외부 결제 유도, 금전 거래 요구, 시스템 우회를 금지합니다. 운영자는 회원에게 사진이나 연락처를 요구하지 않는다고 명시해 사칭 피해도 막고 있습니다.
통화 말고 사람을 붙잡아 두는 장치
| 기능 | 내용 |
|---|---|
| 사진 피드 (일상) | 일상 사진 공유, 좋아요와 댓글. 무료 공개와 유료 공개를 사진마다 선택 |
| 토크 게시판 | 카테고리와 태그(최대 5개)가 있는 게시판, 댓글 |
| 1:1 채팅 | 실시간 채팅, 건당 50P. 방을 나가면 대화가 보이지 않음 |
| 친구 | 친구 추가, 서로 친구 표시, 친구 접속 알림 |
| 랭킹 | 통화 평가 기반 순위, 시상대, 빈자리 안내 |
| 프로필 방문 알림 | "님이 프로필을 보고 있어요" |
| 출석 체크 · 이벤트 | 매일 출석 보상, 이벤트 공지와 참여 보상 |
| 친구 초대 | 추천인 코드 공유, 양쪽 모두 3,000P |
| 알림 설정 | 통화·채팅·친구·프로필 방문·이벤트·마케팅 알림을 각각 켜고 끔 |
| 고객센터 | 자주 묻는 질문 14개, 1:1 문의 접수와 답변 확인 |
| 공지 팝업 | "오늘 그만보기", "3일 그만보기" |
| 원격 운영 통제 | 서버 점검 안내, 강제 업데이트와 권장 업데이트 구분 |
무엇으로 만들어졌나
영상은 직접 만들지 않았습니다 — Agora를 씁니다
영상통화를 직접 구축하려면 전 세계에 중계 서버를 깔고 유지해야 합니다. 위핑캠은 대신 Agora라는 글로벌 실시간 통신 회사의 인프라를 빌려 씁니다. 개발 기간을 크게 줄이고 통화 품질을 처음부터 확보하는 선택입니다.
앱 용량 110MB 중 절반 가까이가 Agora입니다. 영상 전송 외에도 AI 잡음 제거, 에코 제거, 화질 보정, 얼굴 검출, 부적절 영상 검열까지 확장 모듈 17종을 함께 넣었기 때문입니다.
빌려 쓰는 만큼 통화 시간에 비례해 비용이 나갑니다. 통화가 늘면 원가도 함께 오르므로 요금 설계와 직접 맞물립니다.
- 영상 엔진
- Agora RTC
- SDK 본체
- 26.8 MB
- 확장 모듈
- 17종
- 앱 내 비중
- 약 50%
- 비용 방식
- 사용 시간 기준
| 역할 | 사용한 것 | 의미 |
|---|---|---|
| 앱 본체 | Flutter | 하나의 코드로 Android와 iOS를 함께 만듦 |
| 영상·음성 | Agora RTC | 상용 인프라 임대 |
| 실시간 신호 | Socket.IO | 통화 요청과 채팅 즉시 전달 |
| 수신 화면 | CallKit · ConnectionService | 잠금화면에서 일반 전화처럼 수신 |
| 푸시 | Firebase Cloud Messaging | 앱이 꺼져 있어도 도달 |
| 결제 | Google Play Billing · StoreKit | 스토어 인앱결제 |
| 본인확인 | PASS · NICE평가정보 · KMC | 통신사 실명 인증 |
| 서버 통신 | Dio | 토큰 자동 갱신, 재시도, 오류 변환을 단계별로 처리 |
| 상태 관리 | Riverpod · get_it | 화면 상태와 의존성 관리 |
| 보안 저장 | flutter_secure_storage | 로그인 토큰 암호화 저장 |
| 위치 | geolocator · geocoding | 거리 표시와 주변 추천 |
| 웹사이트 | Next.js | wipincam.com 소개·약관 페이지 |
코드는 어떻게 정리돼 있나
351개 파일이 기능별 폴더로 나뉘고, 각 폴더 안은 똑같은 네 칸 서랍으로 정리돼 있습니다. 화면을 그리는 코드, 흐름을 지휘하는 코드, 규칙을 담은 코드, 서버와 통신하는 코드가 섞이지 않습니다. 새로 합류한 개발자도 어디를 고쳐야 할지 금방 찾을 수 있는 구조입니다.
사람이 보는 화면과 버튼
live_home_page · call_room_page · point_charge_page
화면 뒤에서 상태를 관리하고 흐름을 지휘
call_controller · ranking_controller · wallet_controller
"통화란 무엇인가", "회원이란 무엇인가" 같은 개념 정의. 기술과 무관한 규칙
call_session · live_member · photo_feed_visibility
서버 통신, 외부 서비스 연동, 데이터 변환
agora_call_service · call_realtime_service · iap_purchase_service
기능별 규모
파일 수는 그 기능에 들인 공을 보여줍니다. 점선은 사실상 비어 있는 곳입니다.
서버 통신 계층
모든 서버 요청은 다섯 단계를 차례로 거칩니다. 로그인이 만료되면 사용자가 모르게 다시 연결하고, 일시적인 오류는 자동으로 재시도합니다.
위픽캠과 무엇이 다른가
위핑캠은 2020년부터 운영 중인 위픽캠(다른 회사의 서비스)을 참고 모델로 삼았습니다. 탭 이름과 매칭 방식은 비슷하지만, 코드는 새로 만들었고 요금·정산·안전 구조는 크게 다릅니다. 위핑캠 앱 안에는 위픽캠의 서버 주소나 코드 흔적이 전혀 없습니다.
| 항목 | 위핑캠 | 위픽캠 (참고 모델) |
|---|---|---|
| 매칭 | 목록에서 선택 + 상대 수락 | 목록에서 선택 + 상대 수락 |
| 통화 요금 | 여성이 1,500~3,000P 설정 | 분당 900P 고정 |
| 음성통화 | 있음 | 없음 |
| 유료 앨범 | 있음 | 없음 |
| 공급측 정산 | 기프티콘 | 현금 환전 |
| 본인확인 | 문자 + PASS 교차 확인 | 자체 문자 인증 |
| 프로필 심사 | 있음 (AI 사진 거절 포함) | 없음 |
| 통화 중 사람 확인 | 있음 | 없음 |
| 화면 캡처 차단 | 있음 | 없음 |
| 여성 보호 · 지인 차단 | 있음 | 확인되지 않음 |
| 앱 방식 | Flutter 네이티브 | 웹 화면을 앱으로 감싼 하이브리드 |
| 서버 | 자체 서버 | 여러 브랜드가 함께 쓰는 공유 서버 |
스토어에서 "위핑캠"을 검색하면 바로 아래에 위픽캠(설치 10만 이상)이 함께 나옵니다. 도메인도 wipincam과 wippycam으로 비슷합니다. 운영사도 출시 전 이름을 바꿀 계획이라고 밝혔는데, 설치 수가 거의 없는 지금이 바꾸는 비용이 가장 적습니다.
어디까지 왔고, 무엇이 남았나
스토어에 올라간 앱이 개발용 서버를 바라보고 있고, 운영용 서버 주소는 존재하지 않습니다. 개발용 알림 시뮬레이터와 "로컬 서버에 연결할 수 없습니다. iPhone을 서버와 같은 Wi-Fi에 연결하거나…" 같은 개발자용 문구도 함께 들어 있습니다. 출시 빌드와 개발 빌드를 나누는 설정이 아직 안 된 상태입니다.
스토어 카테고리는 커뮤니케이션인데 공식 웹사이트는 "얼굴 보고 시작하는 진짜 소개팅 캠"이라고 소개합니다. 데이팅 카테고리에는 미성년자 차단 의무와 신규 등록 제한이 따르므로, iOS 심사 과정에서 서비스 성격과 카테고리가 맞지 않는다고 판단될 수 있습니다.