터미널에서 구동되는 데이트 앱을 만들었고 백엔드가 없습니다
I’m happy to translate the article for you, but I’ll need the full text of the post (the parts you’d like translated). Could you please paste the article’s content here? Once I have it, I’ll provide a Korean translation while preserving the source line, markdown formatting, code blocks, URLs, and technical terms as requested.
Overview
제가 아는 모든 개발자는 터미널에서 작업하는 것을 사랑하며, 그들은 주변에서 가장 친절한 사람들 중 하나입니다.
베트남에서는 인구 감소에 대한 이야기가 끊임없이 보도되고, 대부분의 사람들이 찾는 해결책은 Tinder, Bumble, 혹은 FB Dating입니다—첫 두 서비스는 제품의 일부분이 되는 대가로 비용을 청구합니다.
CLI 트렌드는 명백합니다—LLM/AI 통합을 손쉽게 만들어 줍니다. 저는 CLI 도구를 좋아합니다: 가볍고 부드러우며 세련된 느낌이 납니다.
그렇다면 위의 모든 아이디어를 결합해 우리 사랑하는 소프트웨어 개발자들을 위한, 터미널에서 실행되는 정식 데이팅 앱을 만들면 어떨까요?
결과가 어떨지는 모르겠습니다. 엔지니어 정신은 확실한 것은 없다는 것이니, 한번 시도해 볼 뿐입니다.
첫 번째 제약: 거의 제로 예산
- VPS도 없고, 관리형 데이터베이스도 없으며, 월 요금도 없습니다.
- 매칭 플랫폼은 여전히 백엔드와 데이터베이스가 필요합니다 – 프로필을 저장하고, 검증을 실행하며, 매치를 처리할 장소가 필요합니다.
- 비용은 최소화되어야 합니다; 전쟁이 벌어지고 가스 가격이 치솟고 있기 때문입니다.
나는 시장에 어떤 서비스가 그 역할을 대신할 수 있을지 고민했으며, 결국 깨달았습니다: GitHub가 모든 것을 무료로 제공합니다.
| GitHub primitive | What it can replace |
|---|---|
| Repository | Storage |
| GitHub Actions | Event‑driven compute (like AWS Lambda) |
| Issues (with labels) | API endpoints / routes |
| Releases (assets) | CDN / static assets |
GitHub의 프리미티브에 아키텍처를 매핑했을 때, 어색하지만 타당해 보였습니다:
- Registration → Issue 혹은 PR
- Profile validation & encryption → GitHub Action
- Discovery index → Release asset
데이트/매칭 앱은 실시간성이 필요하지 않으므로, 서브밀리초 수준의 지연은 요구되지 않습니다.
분산형 디스커버리
데이트 앱의 가장 근본적인 기능은 디스커버리입니다. 일반적으로 이는 중앙 집중식 DB와 백엔드가 필요합니다.
각 사용자가 데이터베이스를 자신의 기기로 다운로드하고 로컬에서 순위 매기기/매칭을 수행한다면 어떨까요?
딜레마
- 프라이버시 – 프로필이 자유롭게 노출돼서는 안 됩니다.
- 디스커버리는 암호화된 데이터로는 작동할 수 없습니다.
- DB를 다운로드할 수 있다면, 누구든지 몇 초 만에 전체 데이터를 스크랩할 수 있습니다.
전통적인 앱은 개인 서버, 개인 DB, 개인 순위 엔진, 그리고 API 속도 제한을 활용해 대량 추출을 방지합니다. 우리는 중앙 서버 자체를 없애고 싶습니다 – 그것이 바로 재미있는 부분입니다.
체인‑암호화 (검증 가능한 지연 함수)
나는 검증 가능한 지연 함수와 작업 증명(Proof‑of‑Work) 방식을 탐구한 뒤 체인‑암호화라는 설계를 정리했다:
- 마치 잠긴 상자들이 사슬처럼 이어져 있고, 각 상자 안에는 프로필과 다음 상자를 열 수 있는 힌트가 들어 있다.
- 상자를 열려면 짧은 시간 동안 무차별 대입 계산이 필요하며, 우회 방법은 없다.
- 정상 사용자는 몇 초마다 하나씩 프로필을 확인한다 – 인간 수준의 속도.
- 공격자도 정확히 같은 속도로 진행될 뿐이며, “프리미엄 등급” 같은 우회 수단은 존재하지 않는다. 비용은 수학적으로 이미 포함돼 있다.
캐싱 메커니즘을 도입하면 반복적인 접근은 거의 즉시 처리되어 일반 사용은 보상을 받고, 대량 추출은 제재를 받는다.
작동 원리
- 잠금‑조합 = AES 암호화.
- 각 사용자는 등록, 탐색, 채팅을 위한 세 개의 별도 해시를 받으며, 이들은 풀의 GitHub Actions 비밀에만 존재하는 비밀 소금(salt)으로 연결된다.
- 소금이 없으면 네임스페이스는 완전히 연결될 수 없으며, 프로필을 탐색해도 GitHub 사용자 이름을 알 수 없고, 채팅 파트너도 인덱스에서 서로를 찾을 수 없다.
id_hash = sha256(pool:provider:user_id) # 64 hex chars
bin_hash = sha256(salt:id_hash)[:16] # 16 hex chars → .bin filename
match_hash = sha256(salt:bin_hash)[:16] # 16 hex chars → chat handle
엔드‑투‑엔드 암호화 채팅 릴레이
채팅 릴레이는 프라이버시 보장을 확장합니다:
- Messages are encrypted before leaving your machine. → 귀하의 컴퓨터를 떠나기 전에 메시지가 암호화됩니다.
- Authentication is a stateless time‑based signature plus a Merkle‑like verification. → 무상태 시간 기반 서명에 Merkle‑유사 검증을 추가한 인증 방식입니다.
- The relay only routes ciphertext it cannot read. → 릴레이는 읽을 수 없는 암호문만 라우팅합니다.
- Compromise the server → you only get encrypted blobs; there’s nothing to steal. → 서버가 침해되더라도 → 암호화된 블롭만 얻을 수 있으며, 훔칠 것이 없습니다.
도구 및 스택
단일 바이너리, 앱 스토어 없음, 웹 호스팅 없음, 두 개의 명령어:
brew install vutran1710/tap/op
op
TUI는 온보딩, 탐색, 채팅을 적절한 다크 테마 인터페이스로 처리합니다.
- 언어: Go
- UI 프레임워크: Bubble Tea + Lip Gloss (받아야 할 관심보다 훨씬 적게 받음)
아키텍처 다이어그램
┌──────────┐ ┌──────────────────┐ ┌─────────────┐
│ CLI/TUI │──────▶│ Pool Repo │ │ Registry │
│ (Go) │ │ (GitHub) │◀─────▶│ (GitHub) │
│ │ │ pool.yaml │ └─────────────┘
│ │ │ users/{h}.bin │
│ │ │ matches/ │
│ │ └──────────────────┘
│ │ ▲
│ │──────▶┌───────┴───────────┐
│ │ │ Relay Server │
└──────────┘ │ (per‑pool) │
└──────────────────┘
릴레이 서버 – 유일한 백엔드 비용
결국 릴레이는 불가피하게 되며, 이는 시스템이 전통적인 의미에서 100 % 백엔드가 없다는 것이 아니라는 뜻입니다. 하지만 여전히 최소 수준입니다:
- GitHub는 데이터베이스 역할을 합니다.
- GitHub Actions는 주요 백엔드 역할을 합니다 (검증, 암호화, 인덱싱).
- 릴레이 서버는 비용을 지불해야 하는 유일한 구성 요소이며, 단순하고 무상태인 메시지 라우팅 서비스입니다.
Go의 특성상, 릴레이는 작게 만들 수 있고, 호스팅 비용이 저렴하며, 필요에 따라 수평 확장이 가능합니다.
마무리 생각
엔지니어 정신은 확률이 불확실할 때조차도 시도하는 것입니다. 무료 GitHub 기본 요소, 검증 가능한 지연 체인 암호화 스킴, 그리고 최소한의 Go 기반 릴레이를 활용함으로써, 프라이버시를 존중하고 사실상 비용이 들지 않으며 개발자들에게 재미있는 CLI 중심의 만남 방식을 제공하는 터미널 우선 데이팅 앱을 만들 수 있습니다.
한 번 시도해 보고, 해킹해 보며, 이 터무니없는 아이디어가 유용한 도구가 될 수 있는지 커뮤니티가 판단하게 하세요. 즐거운 코딩 되세요!
개요
로드를 꽤 잘, 그리고 저렴하게 처리할 수 있습니다—풀 운영자가 자신의 풀을 실제로 수익화할 수 있다는 것을 깨달을 때까지.
발견 과정에서의 “그라인딩” 지연은 실제로 탐색을 의도적으로 만들며; 각 프로필을 확인하는 데 몇 초가 걸리면 무심코 스와이프할 수 없습니다.
마지막으로 매칭 엔진은 우연히 범용으로 작동한다는 것이 밝혀졌습니다: 스키마가 단순히 YAML이기 때문에, 누구든지 템플릿을 포크하여 코드 변경 없이 잡 보드, 스터디 그룹 찾기, 혹은 프리랜서 마켓플레이스를 실행할 수 있습니다.
구성
name: "
Tags
#go #golang #opensource #cli #terminal #cryptography #decentralized #privacy #sideproject