본 서비스를 개발하는 Lightframe.(이하 권율)은 개인적인 마음과 관계에 관한 내용을 다루는 만큼, 아름다운 편지 작성 경험과 편리한 공유만큼이나 사용자의 데이터와 전달 과정의 투명성을 중요하게 생각합니다.
개인정보 보호와 보안은 Lightframe.와 CSSLetter가 매우 중요하게 생각하는 핵심 원칙이기에, README의 일부 항목으로만 다루지 않고 별도의 문서로 분리했습니다. 새로운 공유 방식이나 저장 기능을 추가할 때도 이 원칙을 뒤로 미루지 않고, 모든 설계와 기술적 결정에서 우선적으로 검토하겠다는 의미를 담고 있습니다.
이 문서는 CSSLetter가 편지 데이터와 보안을 어떻게 다루는지, 그리고 왜 그렇게 설계하는지를 설명합니다. 법률 약관을 대신하는 문서가 아니라, CSSLetter가 지키는 설계 기준을 투명하게 설명합니다.
CSSLetter는 편지를 작성하고 표현하는 데 필요한 정보만 다룹니다. 수신인, 제목, 본문, 서명, 편지지와 화면 설정은 사용자가 자신만의 편지를 만들기 위해 저장되거나 공유 링크에 포함될 수 있습니다.
CSSLetter는 편지 작성과 관계없는 개인정보를 요구하거나 수집하지 않습니다. 편지에는 비밀번호, 인증 번호, 금융 정보, API Key처럼 노출 시 피해가 발생할 수 있는 민감한 정보나 Secret을 입력하지 않는 것을 권장합니다.
CSSLetter는 Tile과 동일한 Lightframe. 인증 프로젝트(Supabase Auth)를 사용합니다. 이메일·비밀번호 로그인 시 인증 정보가 해당 서비스에 HTTPS로 전달됩니다. Google 로그인은 Google 및 Supabase의 인증 화면을 거치며 PKCE를 사용합니다. 로그인은 선택 사항이며 편지 작성과 읽기에 필수적이지 않습니다.
이메일과 사용자 식별자는 계정 표시를 위해 사용합니다. 로그인 세션과 갱신 토큰은 이 사이트의 브라우저 저장소에 cssletter.lightframe.session.v1 키로 보관됩니다. 로그아웃하면 이 사이트의 세션을 종료하며 편지 초안은 지우지 않습니다. 비밀번호는 직접 저장하거나 기록하지 않습니다. 계정 자체의 삭제는 공유 계정이므로 Tile의 계정 관리에서 처리합니다.
로그인해도 편지·편지지의 클라우드 저장이나 기기 간 동기화는 수행하지 않습니다. 편지 읽기 링크에서는 인증 요청과 첫 방문 안내를 실행하지 않습니다. 사용법 안내를 본 여부만 cssletter.welcome.v1에 저장하며 외부에 전송하지 않습니다.
- 공개 publishable key만 사용하며 관리자 키를 포함하지 않습니다. 인증 SDK는 고정 버전의 로컬 파일로 제공합니다.
- Supabase Authentication의 URL Configuration에서 실제 CSSLetter 주소와 개발 주소를 반환 허용 목록에 등록해야 Google 로그인 후 올바르게 돌아옵니다. 다른 서비스의 기본 Site URL로 돌아가지 않는지 배포 전에 확인하세요.
- CSP는 동일 출처와 지정된 Lightframe. Supabase 인증 도메인만 통신하도록 제한합니다. 다른 인증 프로젝트로 바꿀 경우 CSP와 인증 설정을 함께 수정해야 합니다.
작성 중인 편지와 직접 만든 편지지 설정은 기본적으로 사용 중인 브라우저의 localStorage에 저장됩니다.
이 데이터는 CSSLetter의 사용자 계정 데이터베이스에 자동으로 업로드되지 않습니다. 브라우저의 사이트 데이터를 삭제하면 해당 기기에 저장된 CSSLetter 데이터도 함께 삭제될 수 있습니다.
CSSLetter는 작성 중인 편지를 서버에 모으기보다, 가능한 한 사용자의 기기 안에서 처리하는 방식을 우선합니다.
공용 기기에서는 편지 작성이 끝난 뒤 초안을 직접 삭제하거나 브라우저의 사이트 데이터를 삭제하는 것을 권장합니다.
현재 CSSLetter는 편지 데이터를 URL의 #letter= Fragment에 Base64URL 형식으로 담아 공유합니다.
URL Fragment는 일반적인 HTTP 요청 경로에 포함되지 않지만, 공유 링크를 받은 사람과 해당 링크를 확인할 수 있는 App 또는 사람은 편지 내용을 읽을 수 있습니다.
Base64URL은 데이터를 전달하기 위한 Encoding일 뿐 암호화가 아닙니다. 공유 링크 자체를 편지 원문처럼 다루고, 공개 게시물이나 신뢰할 수 없는 장소에 올리지 않는 것을 권장합니다.
미래의 나에게 쓰기도 일반 공유 편지와 같은 링크 방식을 사용합니다. 예약 시각, 브라우저 카운트다운, 화면이 열려 있는 동안의 브라우저 알림은 받는 기기의 시간과 브라우저 동작에 의존하며, 페이지를 닫은 뒤에도 서버가 알림을 보내는 기능은 아닙니다.
캘린더 알림 파일(.ics)을 내려받으면 이벤트에 편지 공유 링크가 포함됩니다. 일정 앱에 가져오면 해당 앱의 알림 설정으로 알림을 받을 수 있지만, 일정 서비스에 링크가 동기화될 수 있으므로 신뢰하는 개인 캘린더에만 추가하세요. 링크를 받은 사람이 내용을 볼 수 있는 점과 링크 자체가 암호화되지 않는 점은 동일합니다.
CSSLetter는 사용자가 공유 링크 생성을 직접 실행했을 때만 편지 내용을 링크 형태로 만듭니다.
공유 링크를 생성하기 전까지 작성 중인 편지는 브라우저의 로컬 저장 공간에 유지됩니다. 생성된 링크를 누구에게 전달할지와 어떤 방법으로 공유할지는 사용자가 직접 결정합니다.
현재 생성된 공유 링크에는 별도의 회수 기능이 없습니다. 링크를 잘못 전달했다면 해당 링크가 더 이상 비밀이라고 가정해서는 안 됩니다.
CSSLetter는 공유 데이터의 길이를 제한하고, 읽기 화면에서는 편지를 표현하기 위해 허용된 데이터 구조만 복원합니다.
공유 링크가 손상되었거나 올바른 편지 형식이 아니면 해당 내용을 표시하지 않고, 새로운 편지를 작성할 수 있도록 안내합니다.
링크에 포함된 데이터는 편지 화면을 구성하는 용도로만 사용하며, 공유 링크를 통해 임의의 Script나 실행 가능한 코드를 전달하는 방식으로 사용하지 않습니다.
사용자는 작성 화면에서 저장된 초안을 삭제하거나 브라우저의 사이트 데이터를 제거해 자신의 CSSLetter 데이터를 직접 관리할 수 있습니다.
직접 만든 편지지와 화면 설정도 현재 브라우저에 저장되며, 브라우저의 사이트 데이터를 삭제하면 함께 제거될 수 있습니다.
계정, Server 저장, 짧은 링크, 실제 암호화, 분석 기능처럼 데이터 처리 방식에 영향을 주는 기능을 추가하는 경우에는 수집 항목, 사용 목적, 전달 대상, 보관 위치와 삭제 방식을 이 문서에 명확히 업데이트합니다.
CSSLetter의 공개 코드와 Git 저장소에는 실제 API Key, Secret 또는 개인 인증 정보를 포함하지 않습니다.
향후 Server 기능이나 외부 서비스를 연결할 경우 중요한 권한을 가진 Key는 Client 코드에 포함하지 않고 Server 환경 변수로 관리합니다. 공개 저장소에는 예시 설정과 공개해도 안전한 구성만 포함합니다.
CSSLetter는 편지를 예쁘게 보여주는 것뿐 아니라, 사용자가 자신의 편지가 어디에 저장되고 어떻게 전달되는지 이해할 수 있는 서비스를 지향합니다.
- 공유 전에 편지 내용을 사용자가 직접 확인할 수 있게 합니다.
- 편지 저장과 공유를 사용자의 명시적인 행동으로 구분합니다.
- Encoding과 암호화를 혼동하지 않도록 명확히 설명합니다.
- 데이터가 어디에 저장되고 누가 읽을 수 있는지 가능한 한 투명하게 보여줍니다.
- 개인정보 보호와 보안을 나중에 덧붙이는 기능이 아니라 편지 전달 경험의 기본 조건으로 다룹니다.
UI는 사용자가 서비스를 신뢰하게 되는 첫 경험입니다.
UX는 그 경험이 자연스럽게 이어지도록 만듭니다.
개인정보 보호와 보안은 사용자가 보지 못하더라도 절대 타협하지 않는 기반입니다.
CSSLetter는 단순히 편지 링크를 만드는 서비스가 아니라, 사용자가 자신의 마음을 편안하고 솔직하게 전할 수 있도록 돕기 위해 존재합니다. 그 편리함이 편지의 내용, 사용자의 선택권과 전달 과정의 신뢰를 희생해서 만들어져서는 안 된다고 믿습니다.