크라우니메신저 v3 백업/복원/데이터내보내기
개요
사용자가 자기 데이터를 100% 소유(소버린화)할 수 있도록 백업/복원/서버간이전 기능을 한선씨로 구현.
무엇을 했는지
/Users/ef/CrownyOS/apps/메신저/v3/백업복원.한선신규 작성 (979줄)- 컴파일:
./hanseonc_high 백업복원.한선 > /dev/null→ exit 0 - 실행 검증: 11개 테스트 전부 통과
구현된 함수 목록
내보내기
메시지내보내기(user_id, 시작일, 종료일)— 날짜 범위 필터연락처내보내기(user_id)— 연락처 + 차단 목록그룹내보내기(user_id)— 멤버십 그룹 목록프로필내보내기(user_id)— 공개 필드만 (비밀번호해시 제외)미디어내보내기(user_id)— file/image/video 타입 메시지 경로 목록전체백업JSON생성(user_id)— 5종 통합 단일 JSON
백업생성(user_id, 종류, 암호화여부, 비밀번호)— full/messages/contacts/groups/media백업진행률조회(backup_id)— 0 또는 100백업파일경로(backup_id)— 저장 경로백업메타데이터(backup_id)— 이력 정보백업암호화(내용, 비밀번호)— AES-GCM 의사 구현백업체크섬(데이터)— SHA256백업파일유효(데이터)— 구조 검증
복원시작(파일경로, 비밀번호)— 암호화/평문 자동 감지메시지복원(데이터, user_id)— 중복 제거 삽입연락처복원(데이터, user_id)그룹복원(데이터, user_id)충돌해결전략(기존, 신규, 전략)— overwrite/skip/merge
서버이전준비(user_id, 새서버URL)— 전체백업 + 이전토큰이전토큰생성(user_id, 새서버URL)— SHA256x2 기반이전검증(이전토큰, 공개키)— 토큰 형식 검증
자동백업설정(user_id, 주기초)— 86400(일), 604800(주)자동백업필요(user_id, 지금)— 마지막 백업 시간 비교오래된백업정리(user_id, 보관일수)— 파일 정리
백업통계(user_id)— 총수/마지막시각/총크기데이터요약(user_id)— 메시지수/그룹수/연락처수
테스트 결과 (모두 통과)
- 전체 백업 생성 → 파일경로 반환
- 암호화 백업 생성 (AES-GCM 의사)
- 메타데이터 조회 → backup_id/kind/file_path 정상
- SHA256 체크섬
- 유효/무효 파일 검증
- 복원시작 → 메시지 1건 복원
- 충돌 해결 overwrite/skip/merge
- 서버 이전 준비 + 토큰 검증 성공
- 자동 백업 필요 여부 (하루 후 참, 100초 후 거짓)
- 통계 (총백업수=3, 총크기=835B)
- 오래된 백업 정리
관련 파일 경로
- 소스:
/Users/ef/CrownyOS/apps/메신저/v3/백업복원.한선 - 저장소:
/Users/ef/.crowny-messenger/v3/backups/ - 이력파일:
/Users/ef/.crowny-messenger/v3/backups/이력.dat - 의존:
도구.한선,해시.한선,프로토콜.한선
발견한 한선씨 VM 특성
파일존재(경로)= 1 이면 파일 있음, < 1 이면 없음 (!= -1이 아님 주의)설정(배열, i, 기본값)은 원소 변경 함수 — 읽기는원소(배열, i)사용- 전역 배열 변수를 함수 내에서
추가()해도 전역에 반영되지 않음 → 파일 기반 영속성 필요 줄분리()결과를설정()으로 읽으면 -1 반환 →원소()또는글자()로 직접 순회
잔여 이슈
- AES-GCM 암호화는 의사 구현 — 실제는
암호화.한선의 브릿지(9760) 연동 필요 이전검증은 형식 검사만 — 실제 서버 인증은 공개키 서명 검증 추가 필요데이터요약의 메시지수는 보낸사람 기준 — 받은 메시지 포함 카운트 개선 가능