Social Matching · Flutter × Firebase

하루 한 명,
24시간의 설렘

끝없이 프로필을 넘기는 소개팅은 그만. ONLY24는 오늘 단 한 사람과의 진짜 연결에 집중하는 소셜 매칭 앱입니다. 매칭된 순간부터 24시간, 시간이 지나면 모든 대화는 사라집니다.

오늘의 인연이 사라지기까지
23:59:59
Flutter Riverpod Firebase Cloud Functions WebRTC E2E 암호화
ONLY24 홈 화면 — 오늘의 매칭 카드
1하루 매칭
24h대화 자동 소멸
256-bitE2E 암호화
36Cloud Functions
3지원 언어 (ko·en·ja)
Concept

왜 하루에 한 명일까

선택지가 많을수록 마음은 가벼워집니다. ONLY24는 '오늘 하루의 연결'이라는 제약을 제품의 핵심 가치로 설계했습니다.

01

하루 딱 한 명

매일 단 한 명만 추천합니다. 무한 스와이프 대신, 오늘 만난 한 사람에게 온전히 집중하는 만남.

24h

24시간 후 소멸

매칭된 순간부터 24시간. 시간이 지나면 나눈 대화는 깨끗이 사라져 기록이 남지 않습니다.

감성

취향으로 통하다

취향이 담긴 사진 한 장으로 결이 맞는 상대를 찾습니다. 위치가 아니라 감성으로 — AI가 사진을 읽어 '같은 감성의 상대'를 연결합니다.

Screens · 6

화면으로 보는 ONLY24

매칭에서 채팅, 친구·영상통화까지 — 하루의 인연이 흐르는 전체 플로우를 화면별로 정리했습니다.

ONLY24 로그인 화면
01 로그인 · Login

카카오·게스트로 시작하는 핑크 그라데이션 온보딩.

ONLY24 홈 화면 — 오늘의 매칭
02 홈 · Home

취향 사진으로 만난 오늘의 상대, 매칭률과 24시간 대화.

ONLY24 채팅·AI 코치 화면
03 채팅 · AI 코치

AI가 대화 주제를 제안하는 24시간 E2E 암호화 채팅.

ONLY24 피드 화면
04 피드 · Feed

같은 하루를 사는 사람들의 일상을 나누는 소셜 피드.

ONLY24 친구 화면
05 친구 · Friends

마음이 통하면 친구로. 7일간 이어지는 친구 채팅.

ONLY24 프로필·설정 화면
06 프로필 · Profile

대화 성장 기록·매칭 이력·구독을 관리하는 마이페이지.

Features

핵심 기능

매칭 그 이후를 책임지는 기능들 — 대화를 돕고, 안전을 지키고, 인연을 이어줍니다.

AI 대화 코치

무슨 말을 꺼낼지 막막할 때, GPT 기반으로 대화 주제와 표현을 실시간 제안하고 대화 습관도 기록합니다.

사진 매칭

취향이 담긴 사진 한 장으로 결이 맞는 상대를 탐색. Gemini 임베딩(768차원) 기반 코사인 유사도 매칭.

E2E 암호화 채팅

AES-256-GCM + X25519 ECDH로 메시지를 보호합니다. 두 사람 외에는 운영자조차 대화를 볼 수 없습니다.

영상통화

WebRTC 기반 1:1 영상통화. 마음이 맞으면 앱 안에서 바로 얼굴을 보고 대화할 수 있습니다.

PASS 본인인증

PASS 앱으로 간편 본인인증. 만 19세 이상만 가입할 수 있고 중복 가입도 차단합니다.

구독 & 광고

flutter_inapp_purchase 프리미엄(매칭·영상통화·친구 슬롯 확대)과 AdMob, 서버측 영수증 검증.

Architecture

기술 아키텍처

Flutter 클라이언트와 TypeScript Cloud Functions(asia-northeast3)를 축으로, Firestore·Supabase 이중 데이터 계층 위에 보안과 결제를 얹었습니다.

클라이언트Flutter
Flutter 3.9+Riverpodgo_routerflutter_dotenvl10n · ko/en/jaMaterial
실시간·통신Realtime
WebRTC 영상통화FCM 푸시Presence 온라인 상태Connectivity
백엔드Cloud Functions · TS
matchingmatch-lifecyclevideo-callsfcmauthiap-verificationidentity-verification+ 29 more
데이터Firestore · Supabase
Cloud Firestore (주 DB)Supabase (보조)Firebase Auth익명 · 카카오 · 애플Remote Config
보안Security
AES-256-GCMX25519 ECDHFirestore Rules · protected fields화면 캡처 방지24h 자동 삭제
Engineering Highlights

풀어낸 난제들

겉으로는 단순한 매칭 앱이지만, 보안·동시성·AI·생명주기에서 비직관적인 문제들을 다뤘습니다.

보안 · E2E

종단간 암호화 키 라이프사이클

X25519 ECDH로 세션 키를 합의하고 AES-256-GCM으로 메시지를 암호화합니다. 로그아웃(clearKeys)과 계정 삭제(deleteKeys)의 키 처리를 분리해, 재로그인 시 과거 24시간 채팅을 그대로 복호화하도록 설계했습니다.

매칭 · 동시성

트랜잭션 기반 일일 매칭 한도

Firestore 트랜잭션으로 양쪽 일일 매칭 한도를 동시성 안전하게 차감·환원합니다. 프리미엄 판정은 위조 불가능한 서버 SSOT(users.isPremium)로 일일 한도 우회를 차단하고, 거절·만료 시 카운트를 자동 환원합니다.

AI · 추천

사진 임베딩 매칭 파이프라인

취향 사진을 Gemini 임베딩(768차원)으로 벡터화해 코사인 유사도로 매칭합니다. 사람 우선 + 일정 시간 후 봇 폴백(on-demand), 같은 사진의 비결정적 임베딩까지 방어하는 임계값 튜닝을 적용했습니다.

인프라 · 생명주기

백그라운드에서도 끊기지 않는 매칭

앱이 백그라운드로 가도 매칭이 멈추지 않도록 heartbeat 타임아웃을 앱 생명주기를 넘어 보존(90초 → 10분)하고, 서버 cron이 봇 폴백을 이어받아 검색 중 상태가 유실되지 않게 했습니다.

ONLY24 채팅 화면 — AI와의 24시간 대화
Privacy by design

흔적을 남기지 않는 대화

매칭과 동시에 시작되는 24시간 카운트다운. 시간이 지나면 대화는 흔적 없이 사라집니다. 프라이버시는 부가 기능이 아니라 제품의 전제입니다.

  • 종단간 암호화 — 메시지는 기기에서 암호화되어 서버는 암호문만 저장합니다.
  • 24시간 자동 삭제 — 매칭 만료와 함께 대화와 키가 정리됩니다.
  • 신고·차단 — 누적 신고 사용자는 매칭에서 자동 제외됩니다.
  • 화면 캡처 방지 — 민감 화면에 ScreenSecurity를 적용했습니다.