지식 베이스로 돌아가기

프라이버시 우선 설계로 Tempy.email을 구축한 방법

대부분의 이메일 서비스는 메시지를 데이터베이스에 저장하고, 검색을 위해 인덱싱하고, 백업을 유지하며, 무기한으로 보관합니다.

우리는 반대로 합니다: 모든 것이 메모리에 존재합니다. 타이머가 만료되면 데이터는 사라집니다.

전통적인 이메일의 프라이버시 문제

Gmail, Outlook 또는 기존 이메일 서비스를 사용할 때:

  1. 이메일이 디스크에 저장됨 → 소환장, 유출 또는 판매 가능
  2. 검색을 위해 인덱싱됨 → 통신에 대한 메타데이터 생성
  3. 백업됨 → 여러 사본이 존재하여 노출 증가
  4. 무기한 보관됨 → 10년 전 이메일이 여전히 존재
  5. 광고를 위해 스캔됨 → 타겟 광고를 위해 콘텐츠 분석
  6. 로그 유지됨 → IP 주소, 타임스탬프, 접근 패턴 추적

진정으로 삭제되는 것은 없습니다.

"삭제"를 눌러도 데이터는 다음에 존재할 수 있습니다:

  • 백업 테이프
  • 검색 인덱스
  • 서버 로그
  • 컴플라이언스 아카이브
  • 법적 보존 시스템

우리의 접근 방식: 메모리 전용 아키텍처

tempy.email은 하나의 원칙 위에 구축되었습니다: RAM에 없으면 존재하지 않습니다.

전통적인 이메일:
사용자 → 웹 서버 → 데이터베이스 → 디스크 → 백업 → 아카이브
(데이터가 영원히 존재)

tempy.email:
사용자 → 웹 서버 → Redis (RAM 전용) → 만료 → 사라짐
(데이터가 10분간 존재)

영구 저장소 없음

없는 것:

  • ❌ PostgreSQL, MySQL 또는 디스크 기반 데이터베이스 없음
  • ❌ 파일 스토리지 없음 (S3, 디스크, NAS)
  • ❌ 백업 없음
  • ❌ 아카이브 없음
  • ❌ 이메일 콘텐츠 로그 없음
  • ❌ "소프트 삭제" 없음 (삭제로 표시하지만 데이터 유지)

있는 것:

  • ✅ Redis (인메모리 키-값 저장소)
  • ✅ TTL (Time-To-Live) 모든 키에 적용
  • ✅ 자동 만료

이메일 저장 방식

이메일이 도착하면:

// TTL과 함께 Redis에 이메일 저장
await redis.set(
  `mailbox:${address}:emails`,
  JSON.stringify(email),
  'EX', 600  // 600초(10분) 후 만료
);

10분 후:

  • Redis가 자동으로 키를 삭제
  • 메모리가 해제됨
  • 데이터가 완전히 사라짐 (삭제 표시가 아닌 실제로 사라짐)

복구할 것이 없으므로 "복구" 프로세스도 없습니다.

서버 로그는?

로깅을 최소화합니다:

전통적인 서버 로그:

2026-02-12 10:15:23 User [email protected] logged in from 203.0.113.5
2026-02-12 10:15:45 [email protected] opened email "Password Reset"
2026-02-12 10:16:12 [email protected] deleted 3 emails

tempy.email 로그:

2026-02-12 10:15:23 Mailbox created (no email address logged)
2026-02-12 10:15:45 Email received (no content logged)
2026-02-12 10:25:23 Mailbox expired

이벤트를 기록하지, 식별 가능한 데이터를 기록하지 않습니다.

프라이버시 기능

1. 사용자 계정 없음

원해도 계정을 만들 수 없습니다:

  • 가입 양식 없음
  • 비밀번호 없음
  • "내 계정" 페이지 없음
  • 사용자 데이터베이스 없음

이유: 계정은 신원을 만듭니다. 우리는 당신이 누구인지 알고 싶지 않습니다.

2. 추적이나 분석 없음

많은 "프라이버시 우선" 서비스도 여전히 사용하는 것들:

  • Google Analytics
  • Facebook Pixel
  • Mixpanel
  • Hotjar

우리가 사용하는 것: 위의 어떤 것도 없음.

추적하는 것:

  • 생성된 총 메일박스 수 (카운터)
  • 처리된 총 이메일 수 (카운터)

추적하지 않는 것:

  • 누가 생성했는지
  • 언제 생성했는지
  • 어떤 IP에서 왔는지
  • 어떤 브라우저를 사용했는지

3. 이메일 콘텐츠 스캔 없음

이메일 콘텐츠를 분석하지 않습니다:

  • 광고
  • 머신러닝 훈련
  • 패턴 감지
  • 콘텐츠 분류

이메일은 사람이나 알고리즘이 읽지 않은 상태로 시스템을 통과합니다.

4. IP 로깅 없음

기록하지 않는 것:

  • IP 주소
  • 지리적 위치
  • ISP
  • 기기 핑거프린트

이유: "익명화된" IP 로그조차 상관관계 공격을 통해 역익명화될 수 있습니다.

5. 타사 서비스 없음

사용하지 않는 것:

  • 추적하는 CDN (프라이버시 모드의 Cloudflare만 사용)
  • 분석 플랫폼
  • 광고 네트워크
  • 소셜 미디어 위젯
  • 타사 폰트 (Google Fonts를 로컬로 제공)

이유: 모든 타사 서비스는 잠재적인 데이터 유출 경로입니다.

기술적 구현

Redis 설정

// 모든 키에 기본 TTL 적용
const DEFAULT_TTL = 600; // 10분

// 메일박스 키
await redis.setex(
  `mailbox:${address}`,
  DEFAULT_TTL,
  JSON.stringify({ created: Date.now() })
);

// 이메일 키
await redis.rpush(`mailbox:${address}:emails`, emailJson);
await redis.expire(`mailbox:${address}:emails`, DEFAULT_TTL);

자동 정리

Redis가 만료를 자동으로 처리합니다:

T+0: 이메일 도착 → Redis에 저장
T+600초: TTL 만료 → Redis가 키 삭제 → 메모리 해제

크론 작업 없음. 수동 정리 없음. "소프트 삭제" 없음.

이메일 새니타이제이션

이메일을 저장하기 전에 HTML을 새니타이즈하여 다음을 방지합니다:

  • XSS 공격
  • 추적 픽셀
  • 악성 스크립트
  • 프라이버시 유출
var sanitizer = new HtmlSanitizer();
sanitizer.AllowedTags = ["p", "a", "b", "i", "ul", "ol", "li"];
// <img> 없음, <script> 없음, 추적 없음
var cleanHtml = sanitizer.Sanitize(rawHtml);

접근할 수 없는 것들

원한다 해도 (원하지 않지만), 우리가 물리적으로 할 수 없는 것:

  1. 삭제된 이메일 복구 → 백업이 존재하지 않음
  2. 과거 데이터 보기 → TTL이 모든 것을 삭제
  3. 사용자 행동 추적 → 분석할 로그가 없음
  4. 사용자 식별 → 계정도 없고, 기록된 IP도 없음
  5. 데이터 요청에 응하기 → 넘길 데이터가 없음

이것은 정책적 결정이 아닙니다. 아키텍처적인 것입니다.

우리가 받아들이는 트레이드오프

프라이버시 우선 설계는 제한을 수용한다는 것을 의미합니다:

제공할 수 없는 것:

  • ❌ 이메일 검색 (인덱싱 없음)
  • ❌ 장기 저장 (기본 10분)
  • ❌ 이메일 복구 (만료되면 사라짐)
  • ❌ 사용자 계정 (메일박스를 "저장"할 수 없음)
  • ❌ 실제 받은편지함으로 이메일 전달

제공할 수 있는 것:

  • ✅ 완벽한 프라이버시
  • ✅ 제로 추적
  • ✅ 즉시 삭제
  • ✅ 데이터 유출 위험 없음 (유출할 데이터가 없음)
  • ✅ 마음의 평화

"프라이버시 중심" 이메일과의 비교

기능 ProtonMail Tutanota tempy.email
암호화 ✅ E2E ✅ E2E ⚠️ 전송 중만
영구 저장 ✅ 예 ✅ 예 ❌ 아니오 (10분 TTL)
사용자 계정 ✅ 예 ✅ 예 ❌ 계정 없음
데이터 소환장 위험 ⚠️ 암호화된 데이터 존재 ⚠️ 암호화된 데이터 존재 ✅ 소환할 데이터 없음
IP 로깅 ⚠️ 선택적 ⚠️ 선택적 ❌ 절대 없음
사용 목적 영구 비공개 이메일 영구 비공개 이메일 일회용/테스트

ProtonMail과 Tutanota는 영구적인 비공개 이메일에 탁월합니다.

tempy.email은 데이터가 전혀 존재하지 않기를 원하는 일회용 사용을 위한 것입니다.

결론

대부분의 서비스가 말합니다: "우리는 당신의 데이터를 보지 않겠습니다" 우리는 말합니다: "우리는 당신의 데이터를 볼 수 없습니다 (충분히 오래 존재하지 않습니다)"

대부분의 서비스가 말합니다: "요청하시면 삭제하겠습니다" 우리는 말합니다: "요청 여부와 관계없이 10분 후 자동 삭제됩니다"

대부분의 서비스가 말합니다: "우리는 프라이버시 중심입니다" 우리는 말합니다: "프라이버시가 우리의 아키텍처입니다"

이것은 정책에 의한 프라이버시가 아닌, 설계에 의한 프라이버시입니다.

직접 확인해보세요: 임시 주소를 생성하세요. 10분 후 그 이메일은 영원히 사라집니다. "보관"된 것도 아니고, "삭제"된 것도 아닙니다. 사라진 것입니다.

업데이트됨 2월 12, 2026