아래로 당겨서 새로고침

[기록] 구글 포토 무제한 자동 업로드 환경 구성 v1.0

date
Jan 3, 2025
thumbnail
화면 캡처 2025-02-17 160846.png
gsc
In progress
public
public
slug
googlephoto-uploader
author
tags
Server
OS
Network
summary
소중한 나의 사진들을 지키기 위한 노력
type
Post
updatedAt
Feb 17, 2025 07:33 AM
 

Introdution

노트북만 사용하던 나는 배터리 손상 걱정 없이 안정적으로 사용할 데스크탑이 필요했다. 이번에 맥 미니를 구입하면서, 생활 속 반복되는 잡일들을 하나씩 자동화해 보기로 했다.
첫번째로 개인 사진 및 영상을 관리하는 작업을 자동화했다. 기존 외장하드와 픽셀1을 이용한 업로드 형태로 사용하고 있었지만, 상태관리 및 모니터링을 위해 내 입맛에 맞춘 프로그램을 만들었고 현재 매우 만족스럽게 사용중이다. 😋
상세한 소스들은 기록하지 않고, 환경 및 구성의 주요 내용들만 기록해본다.

계획

✔ 사용중인 스마트폰에서 취침 시 백업 처리
✔ 픽셀1에서 구글포토로 원본 무제한 업로드
✔ 심플하고 직관적인 환경 구성
✔ 성공, 실패 등 상태를 관리하고 재시도 될 수 있도록 구성
✔ 구글포토에서 중복 제거되도록 메타정보 유지
✔ 기존 하드디스크의 자료들도 백업 필요
✔ 시놀로지포토와의 연계
✔ Push 알림, 상태 모니터링

구성 환경

notion image
구분
상세
비고
서버
mac OS
NAS
Synology
공유기
통신사 제공 공유기
내부망 구성
스마트폰
Google Pixel 1세대
구글포토 무제한 업로드 정책 적용 모델
실행 환경
Node.js
DB
SQLite3
Android App
FolderSync MacroDroid
백업 디렉토리 연동용 구글포토 용량 비우기 작업용
Push 서버
Firebase Cloud Messaging(FCM)
작업 정보를 알리기위한 Push 서버

흐름

sequenceDiagram participant FCM as FCM participant 시스템 as node.js participant SQLite as SQLite DB participant NAS as NAS participant Pixel1 as Pixel1 participant GooglePhotos as Google Photos loop Everyday 시스템-->>NAS: 파일&디렉토리 정보 색인 NAS-->>시스템: 시스템->>SQLite: 색인 정보 기록 시스템-)FCM : Push: 신규 데이터 (전체 150 / 82.52GB) 시스템->>+SQLite: 작업대기 상태 파일 조회 SQLite-->>-시스템: 시스템->>NAS: 파일 복사 alt success 시스템->>SQLite: 업데이트 (ready) else error 시스템->>SQLite: 업데이트 (error) end 시스템-)FCM : Push: 복사 작업 완료 (전체 1,102 / 실패 0) alt FolderSync Pixel1-->>NAS: 작업 디렉토리 확인 Pixel1->>GooglePhotos: 작업 디렉토리의 파일 업로드 Pixel1-->>NAS: 업로드 완료된 파일 삭제 end 시스템->>SQLite: 준비 상태 파일 조회 시스템-->>NAS: 준비 상태 파일 여부 NAS-->>시스템: alt 파일 없음 시스템->>SQLite: 업데이트 (done) end 시스템-)FCM : Push: 업로드 완료 (전체 1,102 / 업로드 802) alt MacroDroid GooglePhotos-->>GooglePhotos: 완료 파일 제거(용량확보) end end
※ 흐름 요약 
  1. 지정 디렉토리 하위의 모든 파일 및 디렉토리 정보를 SQLite에 기록 (주기 매일) 단, 이미 처리된 건의 정보를 다시 가져오지 않기 위해 디렉토리 단위로 먼저 체크하며 용량, 수정일시가 기록정보와 다른 경우에만 하위로 접근하여 불필요한 리소스 사용을 최소화 Push 알림: 신규 데이터 (전체 00건 / 82.52GB)  
  1. 작업대기 상태인 파일을 작업 디렉토리로 복사 (주기 매일) 단, Pixel1의 가용 가능한 용량의 한도 내에서만 폴더에 복사 ( 최대 110GB ) Push 알림: 복사 작업 완료 (전체 00건 / 실패 00건)  
  1. 복사가 성공 시 준비 상태, 실패 시 오류 상태로 업데이트  
  1. Pixel1에서 작업 디렉토리의 데이터를 구글포토로 업로드하고 완료된 데이터는 삭제 (주기 매일)  
  1. 작업 디렉토리 내 파일 상태 체크 및 검증 준비 상태의 파일 목록의 파일 검증 - 완료: 작업 디렉토리에 파일이 없는 경우 - 오류: 오류 상태건 작업대기로 변경 (2번 작업과 함께 동작하지만, 설명 흐름상 4번으로 작성) Push 알림: 업로드 완료 (전체 00건 / 업로드 00건 / 오류상태)  
  1. Pixel1의 MacroDroid를 이용하여, 구글포토 용량확보 기능 호출 용량확보: 구글포토에서 제공하는 기능으로, 클라우드 백업이 완료된 사진은 기기에서 삭제
 

마무리

2021년 구글포토의 유료화 선언당시 이베이에서 Pixel1 구매 후 지금까지 잘 사용하였지만, 일부 수동적인 작업을 필요로하여 짧은 주기로 백업을 하지 못했었다. 이제는 자동화되어 마음이 편해졌다. 다음 버전인 v1.1에는 모바일앱과 연동하여 작업을 실시간 요청하고 백업 관리 페이지를 하나 만들어야겠다.
💡 Tip. 구글 Pixel1의 정책 및 약관으로 해당 스마트폰을 통해 구글포토로 사진 백업하는 경우 원본화질-무제한 업로드 가능하다.
 

긴 글 읽어주셔서 감사합니다.
오탈자 및 내용 피드백은 언제나 환영합니다.

#Network#OS#Server