해당 스터디는 90DaysOfDevOps
https://github.com/MichaelCade/90DaysOfDevOps
를 기반으로 진행한 내용입니다.
Day 53 - Gickup - Keep your repositories safe
Gickup은 2021년에 Go 언어로 개발된 Git 저장소 백업 도구이다.
Go 언어의 특성상 다양한 CPU 아키텍처와 운영 체제에서 쉽게 컴파일하여 실행할 수 있다.
지원 호스터: GitHub, GitLab, Gitea, Gogs, Bitbucket, Sourcehut, 로컬 저장소 등 URL, 토큰, SSH 키를 제공할 수 있는 모든 Git 저장소를 지원한다.
핵심 기능: 소스 저장소에서 데이터를 가져와 로컬 또는 다른 원격 저장소로 미러링하는 기능
Gickup GitHub Repository
https://github.com/cooperspencer/gickup
Gickup은 자동화와 데이터 안정성이라는 두 가지 측면에서 이점을 가지고 있다.
자동화: 한 번의 YAML 파일을 통해 구성해 두면, 사용자가 새 저장소를 생성할 때마다 별도로 백업 목록에 추가할 필요 없이, 호스터로부터 자동으로 모든 저장소를 가져와 백업을 수행한다.
Disaster Recovery: 저장소 호스팅 서비스의 장애, 계정 오류, 또는 실수 및 악의적 조치로 인한 저장소의 영구 삭제와 같은 상황에 대비하여 데이터를 보호한다.
Gickup은 백업을 원하는 Git 호스터의 API에 연결하여 필요한 모든 저장소 목록을 가져온다.

GitHub와 같은 호스터의 경우, 개인 액세스 토큰을 제공하여 인증을 수행한다.
토큰을 사용하면 접근 권한이 있는 비공개 저장소까지 모두 백업할 수 있다.
저장소 목록을 확보한 후, 사용자의 설정에 따라 로컬 백업을 생성할지 또는 다른 Git 호스터로 미러링을 진행할지 결정한다.
추가로, Gickup은 다양한 환경에서 실행 가능하도록 설계되었다.
설치 방법: 사전 컴파일된 바이너리 다운로드, Homebrew, Arch Linux, Nix 등을 통해 설치할 수 있다.
컨테이너 활용: Docker 컨테이너로 실행하는 방식이 널리 사용된다. (해당 경우 쿠버네티스 CronJob 등을 통해 주기적인 자동 백업을 설정할 수 있다.)
Gickup의 모든 백업 대상과 방식은 단일 YAML 파일을 통해 선언적으로 정의된다.
source:
github:
- token: GITHUBTOKEN # GitHub Personal Access Token
destination:
local:
path: ~/backup
structured: true
# or mirror them (선택적으로 원격 호스트에 미러링)
gitea:
- token: GITEATOKEN
url: https://your-gitea-instance
user: github
createorg: true
source: github
역할: 백업 원본 정의
백업을 가져올 Git 호스터를 지정
token을 사용하여 인증 및 접근 권한이 있는 비공개 저장소까지 확보
destination: local
역할: 로컬 백업 경로
로컬 디스크의 어디에 저장할지 경로를 지정
sstructured: true
역할: 디렉터리 구조 설정
백업된 저장소가 github.com/username/repository와 같은 이해하기 쉬운 폴더 구조로 저장되도록 설정
destination: gitea
역할: 원격 미러링 대상
다른 Git 호스팅 서비스 (Gitea 등)에 백업 저장소의 복제본을 생성
(createorg: true 설정 시 필요하다면 조직도 자동으로 생성)
Gickup을 통해 백업된 저장소는 원본이 실수로 삭제되더라도 즉시 복구가 가능하다.
가장 이상적인 복구 방식
원본 저장소가 삭제되더라도, 미러링된 저장소 (Gitea)는 이미 모든 데이터와 Git 메타데이터를 가지고 있으므로 복구 과정이 거의 필요 없는 상태
개발팀은 미러링된 Gitea 저장소를 새로운 원본으로 즉시 사용하도록 URL을 변경하고 작업을 계속할 수 있음. -> Downtime 최소화
로컬 디스크에 Gickup이 백업해 둔 Bare Repository를 사용하여 원본 저장소를 복원하는 방법
새 원격 저장소 생성: 원본 호스터 (예: GitHub)에 삭제된 이름으로 새로운 빈 저장소를 다시 생성
로컬 디렉토리 이동: Gickup이 백업한 로컬 디렉토리 (~/backup/github.com/username/repo_name.git)로 이동
원격 설정 및 푸시: 새로 생성한 원격 저장소의 URL을 로컬 Bare Repository에 추가하고, 모든 데이터를 푸시
# 1. 새 원격으로 연결
git remote add restore <새로 생성한 깃 저장소 URL>
# 2. 모든 브랜치와 태그를 한 번에 푸시하여 복원
git push -u restore --all --tags
Gickup은 Go 언어로 개발된 CLI 기반의 저장소 백업 애플리케이션이다.
단순한 파일 복사가 아니라, YAML 설정 파일을 사용하여 GitHub, GitLab 등의 호스트 API에 직접 연결한다.
Gickup은 모든 저장소 (비공개 포함)의 완전한 복제본인 Bare Repository을 로컬 디스크나 제3의 원격 호스트로 미러링하여 자동화된 재해 복구 전략을 구축하는 데 사용된다.
설정 후에는 쿠버네티스 CronJob이나 시스템 스케줄러 등을 통해 주기적으로 실행하여 데이터 안전성을 보장할 수 있다.