보안 정책 · Security

최종 업데이트 · 2026-05-05

TubeFilter는 사용자가 분석한 영상 데이터와 라이브러리 정보를 안전하게 보호합니다. 이 페이지는 우리가 데이터를 어떻게 보호하는지에 대한 기술적 약속입니다.

01요약 · TL;DR

02인증 · Authentication

2.1 로그인 방식

TubeFilter는 비밀번호를 직접 받거나 저장하지 않습니다. 대신 Supabase Auth가 제공하는 Google OAuth 2.0 흐름을 사용합니다. 사용자의 Google 계정 자격증명은 Google 도메인에서만 처리되며, TubeFilter는 OAuth 동의 후 발급된 액세스 토큰만 사용합니다.

2.2 토큰 관리

모든 API 요청은 Authorization: Bearer <JWT> 헤더로 인증되며, 서버는 Supabase JWKS를 통해 토큰 위조를 방지합니다. 만료된 토큰은 자동 거부되고, 재발급은 OAuth refresh flow로만 가능합니다.

2.3 비로그인 사용자

가입 없이도 일부 분석을 체험할 수 있도록, 비로그인 사용자에게는 IP 기반 일일 한도를 적용합니다. 개인 식별 정보는 수집하지 않으며, IP 정보는 한도 카운팅 목적으로만 사용되고 24시간 후 자동 삭제됩니다.

03데이터 보호 · Data Protection

3.1 전송 중 암호화 (In Transit)

모든 사용자 ↔ TubeFilter 간 통신은 TLS 1.3 (HTTPS) 로 암호화됩니다. HTTP 요청은 자동으로 HTTPS로 리다이렉트되며, HSTS preload 등록으로 브라우저가 항상 HTTPS로 접속하도록 강제합니다.

3.2 저장 시 암호화 (At Rest)

데이터베이스 (Supabase Postgres) 의 모든 데이터는 AES-256 으로 암호화되어 디스크에 저장됩니다. 백업 파일도 동일하게 암호화됩니다.

3.3 사용자 간 데이터 격리

PostgreSQL Row-Level Security (RLS) 를 모든 사용자 데이터 테이블에 적용합니다. 사용자는 본인 영상 분석 결과 (라이브러리), 사용량, 구독 정보만 조회/수정 가능하며, 애플리케이션 코드 외에 데이터베이스 레벨에서도 격리가 강제됩니다.

04결제 보안 · Payment Security

모든 결제는 Paddle (Merchant of Record) 가 처리합니다. 신용카드 번호, CVC, 은행 계좌 정보는 TubeFilter 서버에 절대 저장되거나 전송되지 않습니다. PCI-DSS Level 1 인증을 받은 Paddle의 결제 페이지에서 직접 처리됩니다.

4.1 Webhook 검증

Paddle이 보내는 결제 이벤트 (구독 생성/갱신/취소) 는 다음 3겹 방어로 검증됩니다:

05API 보안 · API Security

5.1 키 관리

외부 AI API (Google Gemini) 키는 환경변수로만 관리되며 코드 저장소에 절대 커밋되지 않습니다. GitHub Secret Scanning + Push Protection 으로 실수 커밋도 차단됩니다.

5.2 키 로테이션 (Round-Robin)

Gemini API 키는 4개를 운영하며 매 호출마다 round-robin 으로 분산됩니다. 이는 (1) quota 분산, (2) 단일 키 노출 시 영향 최소화, (3) 키별 사용량 추적을 위한 설계입니다.

5.3 Rate Limit + Quota

모든 분석 엔드포인트에 사용자별 quota (분 단위) 와 동시 영상 수 제한이 적용됩니다. 비로그인 사용자는 IP 기반 일일 한도가 추가됩니다.

06인프라 · Infrastructure

6.1 호스팅

6.2 보안 헤더

모든 응답에 다음 보안 헤더가 적용됩니다:

07제3자 서비스 · Third-Party Services

서비스 운영을 위해 다음 제3자 처리자와 협력하며, 각각 자체 보안 인증을 갖추고 있습니다:

서비스역할인증/표준
SupabaseDB · Auth · StorageSOC 2 Type II, GDPR
Google Gemini APIAI 분석 · 임베딩ISO 27001, SOC 2/3
YouTube Data API영상 메타데이터Google 데이터 처리
Paddle결제 (Merchant of Record)PCI-DSS Level 1, GDPR
VercelFrontend 호스팅SOC 2 Type II
RailwayBackend 호스팅SOC 2 Type II
CloudflareCDN · WAF · DDoS 방어SOC 2 Type II, ISO 27001

전송된 데이터는 각 서비스의 개인정보 처리방침에 따라 처리됩니다. 자세한 개인정보 처리는 개인정보 처리방침 페이지를 참조하세요.

08데이터 격리 · 사용자 라이브러리

분석된 영상은 사용자별 라이브러리 (user_videos 매핑) 로 격리됩니다. 한 사용자가 분석한 영상의 분리수거 결과는 다른 사용자에게 노출되지 않습니다. 글로벌 캐시는 LLM 비용 절감 목적으로만 운영되며, 라이브러리 매핑과는 분리됩니다.

09입력 검증 · Input Validation

9.1 Pydantic 스키마

모든 API 요청은 Pydantic 모델로 타입/포맷 검증됩니다. 잘못된 입력은 자동 422 응답으로 거부됩니다.

9.2 SQL Injection 방어

모든 데이터베이스 쿼리는 parameterized query 로 작성됩니다. 사용자 입력이 SQL 구문에 직접 결합되는 경로가 코드에 존재하지 않습니다.

9.3 LLM Prompt Injection 방어

사용자 자막/제목 등 외부 입력은 격리 컨테이너 (<user_transcript> 등) 로 감싸 LLM 시스템 지시와 분리됩니다. 알려진 오버라이드 패턴 ("ignore previous", "이전 지시 무시" 등) 은 zero-width space 삽입으로 약화됩니다.

10모니터링 · 로깅

서비스 운영을 위해 다음 정보를 로깅합니다:

로그는 30일 보관 후 자동 삭제됩니다. 보안 사고 조사 등 법적으로 요구되는 경우에 한해 연장될 수 있습니다.

11취약점 신고 · Responsible Disclosure

보안 취약점을 발견하셨다면 공개 GitHub Issue 가 아닌 아래 이메일로 연락 부탁드립니다. 확인 후 24시간 이내 회신, 영향도에 따라 7~30일 내 패치를 목표로 합니다.

현재 별도의 버그 바운티 프로그램은 운영하지 않으나, 의미 있는 신고에 대해서는 감사 표시 (크레딧, 명예의 전당 등재) 를 검토합니다.

12사고 대응 · Incident Response

데이터 유출/침해 사고 발생 시 다음 절차를 따릅니다:

  1. 침해 확인 후 24시간 이내 영향 범위 파악 및 격리 조치
  2. 72시간 이내 영향받은 사용자에게 이메일 통지 (개인정보보호법 §34, GDPR Art. 33 준수)
  3. 관할 감독기관 (한국 개인정보보호위원회) 에 법정 기한 내 신고
  4. 사후 보고서 공개 (재발 방지 조치 포함)

13사용자 권리 · Your Rights

사용자는 언제든 다음 권리를 행사할 수 있습니다:

요청은 yangyeongjin458@gmail.com 으로 부탁드리며, 30일 이내 처리됩니다.

14Chrome 확장 프로그램 · Browser Extension

공식 확장 TubeFilter — Watch Later Selector 는 사이트와 동일한 보안 원칙을 따릅니다.

14.1 권한 (Manifest V3)

14.2 수집·전송하는 데이터

14.3 인증 분리

확장은 사용자 로그인 정보에 접근하지 않습니다. TubeFilter 사이트 도착 후 사이트의 Supabase Auth 세션으로 별도 인증.

14.4 코드 공개

확장 소스 전체는 GitHub에 공개되어 있으며 (youtube-watchlater-url-extractor), Chrome Web Store 검토 외에도 누구나 코드 검증 가능합니다.

15규정 준수 · Compliance

TubeFilter는 다음 규정을 준수합니다:

국제 데이터 이전이 발생할 경우 (예: 미국 소재 Vercel/Gemini), 표준 계약 조항 (SCC) 을 적용한 처리자와만 협력합니다.

16변경 이력 · Changes

이 정책의 중요 변경 사항은 최소 30일 전 이메일로 공지하며, 사소한 표현 수정은 본 페이지에 즉시 반영됩니다. 이전 버전은 GitHub 변경 이력 에서 확인 가능합니다.

연락처: yangyeongjin458@gmail.com
관련 문서: 개인정보 처리방침 · 이용약관 · 환불 정책