무엇을 만들었나
유튜브 채널 김먼지의 시청자가 한곳에 모이는 앱입니다.
새 글과 방송 일정을 알림으로 받고,
같은 채널을 보는 사람들과 이야기합니다.
피드 글, 사진, 투표와 이모지 반응, 댓글
일정 업로드·라이브·행사를 달력으로
채팅방 시청자 모두가 함께 쓰는 공개 방 하나
알림 원하는 것만 골라서
김먼지 최신 영상과 채널 링크
이렇게 정했습니다
- 회원가입을 없앴습니다
이름, 전화번호, 이메일을 받지 않습니다.
앱을 열면 바로 쓸 수 있습니다. - 채팅은 공개 방 하나뿐입니다
1:1 대화와 무작위 연결은 없습니다.
모르는 사람에게 갑자기 메시지를 받을 일이 없습니다. - 기록은 30일만 보여줍니다
채팅과 댓글은 30일 동안만 앱에 보입니다.
그 뒤에는 신고 확인을 위해 1년만 따로 보관하고 지웁니다. - 알림은 직접 고릅니다
새 글, 일정, 채팅방 메시지, 내 댓글의 답글을 각각 켜고 끌 수 있습니다.
알림을 모두 꺼도 다른 기능은 그대로 쓸 수 있습니다. - 신고와 차단은 조용하게
불편한 글은 길게 눌러 바로 신고할 수 있습니다.
차단해도 상대에게는 알리지 않고, 차단을 풀면 그 기록도 함께 지웁니다. - 광고가 있다는 것도 먼저 알립니다
서버 운영비를 위해 광고를 넣었고, 개인정보처리방침 맨 위 ‘한눈에 보기’에 적어 두었습니다.
광고 식별자는 앱에서 구글로 바로 가고, 제 서버는 받지 않습니다.
출시
Google Play 프로덕션 심사를 통과해 정식으로 출시했습니다.
미국에서 서비스할 때 필요한 정책 기준까지 함께 맞췄습니다.
처음부터 App Store 가이드라인도 지키며 만들어서,
iOS도 거의 바로 출시할 수 있는 상태입니다.
안전하게
- 서버를 밖에 드러내지 않았습니다
Cloudflare Tunnel로만 연결해서
서버의 IP와 포트를 외부에 열어 두지 않습니다. - 도배와 스팸을 막습니다
짧은 시간에 글이나 채팅을 여러 번 보낼 수 없습니다.
이때 쓰는 IP 주소는 처리하는 동안에만 쓰고 어디에도 저장하지 않습니다. - 가입 없이도 같은 기기를 알아봅니다
기기 ID는 서버 비밀키로 되돌릴 수 없게 바꾼 값만 저장합니다.
원래 값은 남기지 않으면서도, 앱을 다시 깔아도 이용 제한이 풀리지 않습니다. - 자동으로 걸러냅니다
욕설, 전화번호 같은 개인정보, 광고 링크는
올라가기 전에 자동으로 걸러냅니다. - 운영자도 필요한 만큼만 봅니다
채팅을 누가 읽었는지는 운영자에게도 보이지 않고,
몇 명이 읽었는지 숫자로만 보입니다. - 관리 화면은 잠가 두었습니다
서버와 데이터베이스는 관리자 인증을 거쳐야만 접근할 수 있고,
앱과 서버 사이 통신은 모두 암호화(HTTPS)합니다.
가볍고 빠르게
- 사진은 줄여서 주고받습니다
올릴 때 크기를 줄이고 한 번 받은 사진은 저장해 두어,
데이터와 기다리는 시간을 아낍니다. - 끊겨도 다시 이어집니다
지하철처럼 네트워크가 잠깐 끊겨도
채팅이 알아서 다시 연결됩니다. - 첫 화면이 빨리 뜹니다
앱을 열자마자 바로 볼 수 있게
첫 화면이 뜨는 과정을 다듬었습니다.
운영
- 개인정보처리방침을 직접 썼습니다
무엇을 받고, 얼마나 보관하고, 언제 지우는지
템플릿을 베끼지 않고 실제 동작에 맞춰 정리했습니다. - 고친 내용도 숨기지 않습니다
방침에 빠져 있던 항목을 찾았을 때, 무엇이 빠졌고 왜 고쳤는지 변경 이력에 그대로 적었습니다.
중요한 변경은 시행 7일 전에 앱에서 먼저 알립니다. - 삭제 요청은 10일 안에 처리합니다
계정이 없어도 작성한 내용과 대략적인 시각만 알려 주면
찾아서 지우고, 10일 안에 결과를 알려 드립니다. - 멈춰도 스스로 돌아옵니다
오류는 기록으로 남기고,
서버가 멈추면 자동으로 다시 켜지게 했습니다. - 데이터는 따로 백업합니다
서버에 문제가 생겨도 되돌릴 수 있게
데이터를 주기적으로 백업합니다.
기술
Flutter
Dart
Spring Boot 4
Java 21
Linux
Cloudflare Tunnel
앱은 Flutter로, 서버는 Spring Boot로 만들었습니다.
서버는 직접 운영하는 리눅스 서버에서 Cloudflare Tunnel로 연결합니다.