개인정보처리방침
mymoney는 계정 인증과 가계부 저장·동기화에 필요한 정보를 처리합니다. 이 방침은 처리하는 정보, 기기에 남는 데이터, 삭제 방법과 문의 창구를 설명합니다.
1. 처리하는 정보와 목적
- 계정: 이메일, 무작위 사용자 ID, 가입 시각, 비밀번호 해시와 salt를 계정 인증·관리에 사용합니다. 인증 요청에서 비밀번호는 서버로 전송되지만 원문을 서비스 DB에 저장하지 않습니다.
- 로그인 세션: 세션 토큰의 해시, 사용자 ID, 생성·만료 시각을 저장합니다. 브라우저에는 로그인 유지를 위한 HttpOnly 세션 쿠키가 설정됩니다.
- 가계부: 거래 금액·내용·메모·날짜, 카테고리, 월별 예산, 고정지출·저축과 금액 이력, 반복 기록 식별자, 갱신 시각을 저장·동기화합니다. 클라우드에는 이 본문을 암호화한 user_state와 서버 갱신 시각을 저장합니다.
- 동기화: 필드별 편집 순서, 임시 기기 실행 식별자(actor), 삭제 표시(tombstone), 삭제된 항목의 필드와 충돌 후보를 본문에 유지합니다. 삭제 항목의 재등장 방지와 동시 편집 병합에 사용합니다.
- 암호화: 형식·버전, KDF 종류·반복 수·salt, 본문 IV·암호문, 비밀번호와 복구키로 각각 감싼 가계부 키(DEK) 및 래핑 IV를 보관합니다. 복호화와 비밀번호 변경 후 접근 유지에 사용합니다.
- 신뢰 기기(선택): 기기 ID, 사용자 ID, 공개키, 브라우저·OS를 바탕으로 만든 기기 표시 이름, 등록·최근 사용 시각을 저장합니다. 비밀번호 재설정 시 challenge ID·무작위 challenge, 사용자·기기 ID, 생성·만료·사용 시각을 저장하여 일회성 서명을 검증합니다.
이 정보는 계정 인증, 기기간 동기화, 데이터 저장, 신뢰 기기를 통한 비밀번호 재설정, 기기 관리와 서비스 보안에 사용합니다. 사용자가 입력하는 메모에는 불필요한 개인정보를 적지 않는 것이 좋습니다.
2. 암호화의 범위와 한계
현재 클라이언트는 무작위 가계부 키로 본문을 AES-256-GCM 암호화하고, 비밀번호에서 유도한 키로 가계부 키를 감싸 전송합니다. 서버의 인증용 비밀번호 해시와 가계부 키 래핑은 별도로 처리됩니다. 계정 이메일과 인증·기기 메타데이터는 가계부 본문 암호화의 대상이 아닙니다.
운영자는 배포되는 웹 클라이언트 코드를 통제합니다. 따라서 운영자가 어떠한 상황에서도 내용을 볼 수 없다고 보장하지 않습니다. 기기 내 평문, 약한 비밀번호, 악성 코드, 브라우저 취약점과 배포 코드 변경은 별도의 위험입니다. 비밀번호와 신뢰 기기, 복구키를 모두 잃으면 암호화된 가계부를 복구하지 못할 수 있습니다.
복구키는 가계부 잠금 해제 수단입니다. 복구키만으로 계정 비밀번호를 재설정하는 기능은 제공하지 않습니다.
3. 브라우저와 기기 저장
- localStorage: 복호화된 가계부와 동기화 메타데이터, 마지막 계정 ID, 이메일별 신뢰 기기 참조·표시 이름·등록 시각, 기기 등록 안내 상태가 남습니다.
- IndexedDB: 비추출형(non-extractable) 가계부 CryptoKey를 저장합니다. 신뢰 기기 등록 시 비추출형 서명용 비공개키, 기기 AES 키, 해당 키로 감싼 DEK와 IV도 저장합니다. 비추출형 키라도 같은 사이트에서 실행되는 코드는 사용할 수 있습니다.
- 서비스 워커 캐시: 오프라인 사용을 위한 앱 화면·스크립트·스타일·공개 문서를 저장합니다. 인증·가계부 API 응답은 캐시하지 않습니다.
로그아웃하면 현재 가계부 사본과 자동 잠금 해제 키를 정리하고 빈 기본 상태로 바꿉니다. 등록한 신뢰 기기의 복구 키는 비밀번호 재설정을 위해 유지합니다. 기기 등록 해제 시 해당 복구 키를 정리합니다. 브라우저 저장 공간을 직접 지우면 로컬 기록과 키도 사라질 수 있습니다.
4. 사용자가 내려받는 백업
JSON 백업은 암호화되지 않은 파일이며 삭제·충돌 메타데이터도 포함합니다. 파일을 저장한 PC, 휴대폰, 클라우드 드라이브는 사용자가 관리합니다. 회원탈퇴를 해도 서비스는 이 외부 파일을 삭제할 수 없습니다.
백업 가져오기는 현재 가계부와 병합합니다. 삭제 표시가 있는 동일 ID는 자동 복원하지 않으며, 서로 다른 동시 값은 충돌 후보로 보관할 수 있습니다.
5. 보유 기간과 파기
- 계정 정보와 가계부 암호문은 계정 유지 동안 보관하고 회원탈퇴 시 서비스 DB에서 삭제합니다.
- 세션은 30일 동안 유효하며 만료 세션은 후속 로그인 세션 생성 시 정리합니다. 로그아웃은 해당 세션을, 비밀번호 변경·재설정과 탈퇴는 해당 계정의 세션을 삭제합니다. 만료 즉시 모든 행을 지우는 예약 작업은 없습니다.
- 신뢰 기기는 등록 해제 또는 탈퇴 시 삭제합니다. 복구 challenge는 5분간 유효하며 사용 후 재사용할 수 없습니다. 만료·사용 기록은 후속 복구 요청 또는 탈퇴 시 정리합니다.
- 개별 항목 삭제는 화면·계산에서 제외하는 처리입니다. 재등장 방지를 위한 삭제 표시와 삭제 필드·충돌 후보는 즉시 소거하지 않고 가계부와 함께 유지합니다.
현재 앱 코드에는 별도 장기 백업을 정기 생성하는 작업이 없습니다. Cloudflare D1의 자동 복구 이력(Time Travel)은 서비스 DB 행 삭제와 별도로 유지될 수 있으며, 적용 요금제와 Cloudflare 정책에 따라 만료됩니다. 탈퇴 시 모든 인프라 복구 사본까지 즉시 소거된다고 보장하지 않습니다. Cloudflare D1 복구 이력 안내
6. 서비스 인프라
Cloudflare, Inc.의 Pages(화면 제공), Workers 기반 Pages Functions(API), D1(데이터베이스)을 이용합니다. Cloudflare는 네트워크 제공·보안을 위해 IP 주소, 요청·접속 정보 등을 처리할 수 있습니다. 인프라 로그의 보존과 처리 위치는 적용 서비스 설정·계약 및 Cloudflare 정책에 따르며, 앱의 계정 삭제 API가 인프라 로그 전체를 삭제하지는 않습니다.
현재 배포 코드에는 광고, 이용행태 분석·추적 SDK, 제3자 로그인이나 결제 SDK가 없습니다. 앱 코드에서 인증 요청의 비밀번호나 가계부 본문을 로그로 출력하지 않습니다. Cloudflare 개인정보처리방침 · Cloudflare 데이터 처리 약정
7. 열람·수정·계정 삭제
앱에서 가계부를 열람·수정하고 JSON 백업을 내려받을 수 있습니다. 계정 및 설정에서 비밀번호 변경, 신뢰 기기 관리, 회원탈퇴를 이용할 수 있습니다. 앱 설치 없이 공개 계정 삭제 페이지에서도 로그인 후 같은 탈퇴 절차로 이동할 수 있습니다.
탈퇴 시 현재 비밀번호와 삭제 확인을 거쳐 users, sessions, user_state, trusted_devices, password_reset_challenges의 해당 계정 기록을 서비스 DB에서 삭제합니다. 현재 브라우저의 해당 계정 가계부, 계정 참조, 잠금 해제 키, 신뢰 기기 키와 안내 상태를 정리합니다. 다른 기기의 오프라인 사본과 내려받은 백업은 직접 삭제해야 합니다.
접근할 수 없는 계정, 개인정보 열람·정정·삭제·처리정지 요청이나 불편 사항은 아래 이메일로 문의해 주세요. 비밀번호나 복구키는 이메일에 보내지 마세요. 문의는 자동 탈퇴나 암호화 복구를 보장하는 별도 기능이 아니며 본인 확인과 처리 가능 범위 확인이 필요합니다.
8. 운영 및 개인정보 문의
서비스: mymoney
개인정보 업무·고충 및 계정 삭제 문의: mymoney 운영 담당
이메일: geol5286@gmail.com
방침이 변경되면 이 공개 페이지에 변경 내용과 시행일을 반영합니다. 앱 내부 개인정보처리방침 링크도 같은 문서를 사용합니다.