동기화 프로그램 작성의 마지막 단계로 파일의 hash값을 판단하여 생성 및 삭제 목록을 생성하도록 했다.

GCP Storage에서 업로드된 객체들의 hash값을 계산해서 저장하고 있으므로 해당 값을 가져와 비교를 했다.

GCP Storage에서 제공하는 hash 값들 중 md5해시값이 있으므로 해당 값을 이용했다.

 

기존에 변경된 파일을 감지하지 못하여 overwrite라는 플래그를 사용하였는데,

이번 변경으로 overwrite플래그를 삭제했다.

 

 


 

로컬 파일들의 hash값 구하기

로컬 파일들의 hash값은 md5 알고리즘을 이용하여서 가져왔다.

지정된 디렉토리의 하위 파일들의 리스트를 얻어오고 각각의 파일들을 열어서 hash값을 구하였다.

 

 

 

스토리지 파일들의 hash값 구하기

스토리지 파일들의 hash값은 구글에서 제공하는 값을 사용했다.

지정된 디렉터리(prefix)의 하위 객체들을 가져와 md5값을 가져왔다.

 

 

 

 

위 코드로 실행하였더니 콘솔에서 보이는 값과 로컬에서 계산한 값은 같은데, 코드에서 얻은 값은 다른 상황이 발생했다.

콘솔에서와 로컬에서 계산한 값이 같으므로 md5 hash값은 같지만 형태가 달라서 생긴 문제라 생각하여 구글에서 찾아보았다.

아래의 글을 참고하여 테스트해보니 로컬에서의 md5값과 코드에서 얻은 값이 같아졌다.

 

https://stackoverflow.com/questions/34868385/how-to-convert-google-cloud-storage-base64-md5sum-to-hexadecimal-version

 

 

 

 

hash값 비교

로컬 및 스토리지 hash값을 { file_path: md5_hash } 형태의 dict값을 두 개의 변수에 각각 담았다.

focus(중점)에 따라서 각 dict변수를 순회하며 hash값을 검사하여 추가 및 삭제 리스트를 생성했다.

 

 

 

 


사용 화면

약 20개의 파일, 실행시간 2초

 

 

 

목표 달성

초기에 원했던 목표를 달성했다.

 

처음에는 생각하지 못했던 문제들을 해결하였고, 내 생각보다 출력문이 괜찮게 나와서 뿌듯하다.

 

 

 

전체 코드

 

https://github.com/mannamman/namthplaygroundblog/tree/main/project/local_to_gcp_storage_v3

 

 


 

사용 중 발견한 문제

  1. 2022-09-30: https://github.com/mannamman/namthplaygroundblog/issues/5
    프로젝트 폴더의 크기가 커질수록 실행시간이 늘어나고 있음.
    내 예상으로는 스토리지에 저장되어있는 파일들의 hash값을 가져오는 시간때문인 것 같음.

 

 

 

번외

구글 스토리지 객체의 hash값을 찾기 위해 문서를 뒤지다가 발견한 명령어가 있는데,

gsutil rsync라는 유틸리티를 발견했다.

 

이름에서 알 수 있듯이 빠르게 파일들을 복사하는 유틸리티이다.

 

https://cloud.google.com/storage/docs/gsutil/commands/rsync

 

rsync - Synchronize content of two buckets/directories  |  Cloud Storage  |  Google Cloud

Send feedback Notifications Save this page to your Developer Profile to get notifications on important updates. Stay organized with collections Save and categorize content based on your preferences. rsync - Synchronize content of two buckets/directories Sy

cloud.google.com

 

 

# 2022.09.30 수정