본문 바로가기
IT 정보

가족사진 30년치를 미니PC에 옮겼습니다 — Immich + 외장하드 미러링 1년 후기, 구글포토 끊어도 멀쩡한 이유

by 철부지아저씨 2026. 5. 8.
홈랩 / 셀프호스팅 작성일: 2026-05-08

1탄에서 25만 원짜리 미니PC로 NAS를 만들었다면, 2탄은 그 위에 사진을 어떻게 안전하게 올려둘지에 대한 이야기입니다. Immich 1년, 외장하드 두 장, 그리고 한 번의 아찔한 실수까지 — 솔직하게 적었습니다.

왜 굳이 구글포토를 끊고 셀프호스팅으로 갔나

살아오면서 사진을 참 많이 찍었던 것 같습니다. 군대를 제대하고 처음 미국 유학가자마자 구입한 제품이 코닥 디지털카메라였는데 용량이 8M였나? 사진 15장 정도를 찍으면 용량이 다 차던 생각이납니다. ㅎㅎㅎ 이후에는 폴더폰 카메라, 갤럭시·아이폰을 거치며 사진과 영상이 차곡차곡 쌓였습니다. 2025년 말 기준으로 NAS에 올린 원본만 4만 2,000장 + 영상 1,180개, 합쳐서 약 1.7TB입니다.

이 데이터를 그동안은 구글포토 200GB 요금제(월 2,400원)에 압축본으로 올려두고, 아이폰 자동 백업으로 굴리고 있었습니다. 문제는 세 가지였습니다. 첫째, 2021년 6월 1일부로 무제한 고화질 백업이 폐지되면서 원본 화질을 유지하려면 결국 용량이 빠르게 차오릅니다(Google 고객센터). 둘째, 2TB 요금제는 월 11,900원, 1년이면 14만 원이 넘어갑니다. 셋째, 그리고 이게 결정적인데 — 구글 계정이 한 번 정지되면 사진 30년치가 한 번에 사라질 수 있다는 사실을 뉴스로 한두 번 본 게 아닙니다.

한국에서도 비슷한 트라우마가 있죠. 싸이월드 사진 백업·복구 이슈 정리를 다시 읽어보면, 한 회사의 운영 정책 변화 한 번에 3,200만 명의 추억이 어떻게 흔들렸는지가 적나라하게 나옵니다. "내 데이터는 내가 들고 있어야 한다"는 결심은 거기서 굳어졌습니다.

마침 1탄에서 다룬 N100 미니PC + OMV로 만든 자작 NAS 1탄이 이미 거실 TV장 옆에서 조용히 돌고 있었습니다. 거기에 Immich를 얹는 것이 2탄 작업의 시작이었습니다.

Immich가 정확히 무엇이고, 다른 대안과 뭐가 다른가

Immich는 오픈소스 셀프호스팅 사진 관리 플랫폼입니다. 한 줄로 정리하면 "내 서버에 올리는 구글포토"에 가장 가깝습니다. GitHub에 공개돼 있고(immich-app/immich), AGPLv3 라이선스로 배포됩니다. iOS·안드로이드 앱이 있어서 폰에서 자동 백업이 되고, 웹에서는 타임라인·검색·앨범·인물 인식이 동작합니다.

중요한 건 단순히 "백업되는 폴더"가 아니라, 구글포토에서 우리가 익숙해진 UX를 거의 그대로 재현한다는 점입니다. 얼굴 인식으로 인물 앨범이 자동 묶이고, "2018년 7월 제주도"처럼 위치+시간 검색이 됩니다. 사진 위에 점을 찍어 지도에 뿌려주는 기능도 있고, 가족 구성원별 계정을 따로 만들어 공유 앨범을 묶을 수도 있습니다. 이 부분이 PhotoPrism, Nextcloud Memories, 시놀로지 Photos보다 훨씬 매끄럽다는 게 1년 써본 결론입니다.

그래도 한 가지 짚고 넘어갈 점

Immich 공식 문서는 첫 페이지에 큰 글씨로 "이 프로젝트는 매우 활발히 개발 중이며, 데이터 손실의 가능성이 있으니 유일한 백업 수단으로 사용하지 말라"고 적어둡니다(immich.app 공식). 이건 단점이라기보다, "그래서 이 글이 미러링 이야기로 이어진다"는 신호로 읽으셔야 합니다. Immich는 보여주고 다루는 도구이고, 사진의 안전은 별개의 백업 레이어가 책임집니다.

TIP Immich가 내부적으로 사진을 어떻게 저장하는지 알아두면 마음이 편합니다. 원본 파일은 평범한 폴더 구조 그대로 디스크에 저장되고, 메타데이터만 PostgreSQL DB에 들어갑니다. 즉 Immich가 망해도 파일 자체는 살아 있어, 다른 갤러리 앱으로 갈아탈 수 있습니다.

우리 집 사진 30년치 — 실제 마이그레이션 기록

구글포토에 흩어져 있던 데이터를 NAS로 가져오는 작업이 의외로 가장 까다로웠습니다. Google Takeout으로 내려받으면 50GB짜리 zip이 30개 단위로 쪼개져 옵니다. 저는 1.4TB를 받느라 사흘이 걸렸고, 다운로드 링크가 만료돼 두 번이나 재요청했습니다.

압축을 풀고 나서 진짜 함정이 시작됐는데, Takeout은 사진 옆에 IMG_1234.JPG.json 형태로 메타데이터를 따로 줍니다. 이걸 사진의 EXIF 안으로 다시 합쳐주지 않으면 촬영 일자가 "다운로드한 날짜"로 다 뭉개집니다. 저는 GitHub의 google-photos-takeout-helper(MattKovtun 포크 버전)로 일괄 보정했고, 그 후에 Immich CLI(immich upload)로 폴더 단위 업로드했습니다.

한 가지 마음에 든 건, Immich가 자체적으로 SHA-1 해시 기반 중복 탐지를 한다는 점입니다. 같은 파일을 두 번 올려도 한 장만 저장되고, "이 사진은 이미 존재합니다" 메시지가 뜹니다. 누나가 따로 모아둔 외장하드, 어머니 휴대폰 백업, 제 노트북 백업 — 세 군데서 중복된 사진이 4,000장 넘게 잡혔는데 Immich가 알아서 한 장으로 정리해줬습니다. 이걸 수동으로 했으면 주말 두 번이 날아갔을 겁니다.

주의 Takeout으로 받은 zip을 풀 때 파일명이 한글이거나 이모지가 섞여 있으면 윈도우 기본 압축해제기에서 깨집니다. 7-Zip이나 리눅스 unzip -O UTF-8로 푸세요. 안 그러면 나중에 Immich가 같은 파일을 다른 이름으로 두 번 올리는 사고가 납니다(제가 그랬습니다).

3-2-1 백업 룰을 미니PC + 외장하드 두 장으로 구현하기

백업 업계에 오래 통용되는 원칙이 있습니다. 3-2-1 룰이라고 부르는데, 미국 사이버보안인프라보안국(CISA)과 미국 상공회의소(U.S. Chamber of Commerce), Backblaze 같은 백업 업체들이 모두 같은 표현을 씁니다(Backblaze 공식 블로그). 원본 1개 + 백업 2개로 총 데이터 사본 3개, 서로 다른 미디어 2종류, 그중 1개는 오프사이트(다른 장소)에 보관하라는 규칙입니다.

저희 집에 적용한 모양은 이렇습니다. 거실 미니PC NAS의 내장 SSD에 Immich가 운영 중인 원본 1세트가 있고, 그 옆에 4TB 외장 USB HDD를 한 장 항상 꽂아둡니다. 매일 새벽 3시에 rsync가 돌면서 NAS의 사진 폴더를 외장하드로 그대로 복사합니다. 그리고 또 한 장의 4TB 외장 HDD는 처가 부모님 댁 책장 서랍에 들어 있고, 매월 한 번 명절·생일 갈 때 가져가서 갱신합니다. 화재나 도난이 나도 사진 30년치는 한 번에 잃지 않도록 만든 구조입니다.

사실 이런 식의 "데이터를 내 손에 두는" 사고방식은 사진뿐 아니라 노트, 메모, 일기 같은 디지털 기록 전반에 적용됩니다. 저는 같은 미니PC에서 사진 옆에 노트도 올려두는데, 이쪽 셋업은 옵시디언 노트 1,400개 셀프호스팅 정착기에 따로 정리해뒀습니다. 같은 철학을 사진에 옮긴 게 이번 글이라고 봐도 됩니다.

TIP 오프사이트 한 장은 굳이 외장하드일 필요는 없습니다. 친척 집에 작은 미니PC를 한 대 더 두고 WireGuard로 묶어서 야간에만 동기화하는 분도 봤고, Backblaze B2나 iDrive E2 같은 클라우드 오브젝트 스토리지에 암호화해 보내는 분도 있습니다. 다만 4TB짜리 클라우드 비용이 1년이면 7~9만 원대라, 가족용으로는 외장하드 한 장이 가장 무난한 시작점이었습니다.

1년 사용 후 체감 — 비용·속도·고장률 비교표

숫자로만 적으면 그래프가 깔끔하지만, 실제로 1년을 굴리고 나면 몇 군데가 의외였습니다. 아래 표는 구글포토 200GB·2TB 플랜과 미니PC NAS + Immich 셋업을 5가지 축으로 비교한 것입니다. 가격은 2026년 5월 기준 Google One 한국 페이지(one.google.com)와 다나와에서 직접 확인했습니다.

항목 Google One 200GB Google One 2TB 미니PC + Immich 셀프호스팅
월 비용 2,400원 11,900원 전기료 약 1,800원 (24h × 8W 기준)
1년 누적 비용 28,800원 142,800원 약 22,000원 (전기료만)
최초 셋업 비용 0원 0원 미니PC 25만 + 4TB×2 약 22만 = 약 47만 원
업로드 속도(아이폰→서버) WAN 의존(우리 집 12MB/s) WAN 의존 LAN 100MB/s 이상(공유기 기가비트 기준)
1년간 장애·중단 횟수 0회(서비스 안정) 0회 2회(컨테이너 OOM 1회, 정전 1회)
인물·장소 검색 정확도 높음(구글 학습 모델) 높음 중상(ML 모델 자체 추론, 한국인 얼굴 학습 약간 약함)
가족 공유 가족 그룹 6명까지 가족 그룹 6명까지 계정 무제한, 권한 세분화

표에서 가장 눈에 띈 건 손익분기점이었습니다. 200GB 요금제와만 비교하면 47만 원짜리 셋업은 약 16~17년이 지나야 본전입니다. 그런데 데이터가 1.7TB 수준이면 사실상 2TB 요금제와 비교하는 게 맞고, 그러면 손익분기점이 3년 5개월로 확 당겨집니다. 거기에 광고 없는 갤러리, 가족 4명이 자유롭게 쓰는 공유 앨범, 영구 보관 보장이라는 무형 가치가 더해집니다.

단점과 주의사항 — 솔직히 말하면 이런 게 불편했다

1년을 굴리면서 좋은 얘기만 하기엔 양심이 찔리는 지점이 몇 군데 있습니다.

1) 인물 인식 정확도가 구글보다 한 수 낮습니다

Immich는 내부적으로 BUDA·ArcFace 계열 모델을 돌리는데, 유아기 얼굴이 자라며 변하는 구간을 잘 못 따라옵니다. 조카가 3살에서 7살이 되는 동안 인물 클러스터가 4개로 쪼개져 있었고, 한 번씩 수동으로 합쳐줘야 했습니다. 구글포토는 같은 데이터로 알아서 묶더군요. 모델은 계속 업데이트되고 있긴 한데, 아직은 차이가 분명합니다.

2) 첫 1주일은 진짜로 신경이 곤두섭니다

가족이 쓰는 시스템을 셀프호스팅한다는 건, 한밤중에 아내가 "사진이 안 올라가"라고 부를 가능성을 떠안는다는 뜻입니다. 초반에는 도커 컨테이너 메모리 한도 설정을 잘못 잡아서 한밤중에 Immich가 죽고 자동 백업이 멈춘 일이 한 번 있었습니다. NAS는 24시간 돌고 있어도, 운영자는 24시간 깨어 있을 수 없다는 걸 그날 알았습니다.

3) Immich는 아직 v1.x 단계입니다

공식 깃허브 README와 로드맵 문서(immich.app/roadmap)에서도 분명히 명시하듯, Immich는 활발히 개발 중인 프로젝트라 마이너 버전 업데이트 시 DB 스키마가 바뀌어 호환성이 깨지는 경우가 종종 있습니다. 저는 매번 업데이트 전에 docker compose downtar로 전체 폴더 스냅샷 후에 올리는 절차를 지킵니다. 무지성 pull을 하면 1년에 한 번쯤은 사고가 납니다.

주의 Immich를 가족용 단독 백업처로 쓰지 마세요. 외장하드 미러링은 옵션이 아니라 필수입니다. 공식 README도 같은 톤으로 경고합니다. 미니PC가 죽어도 살아남는 별도 사본이 한 장은 있어야 진짜 백업입니다.

실천 가이드 — Immich + 미러링 셋업 8단계

1탄에서 OMV(OpenMediaVault) + Docker가 깔린 미니PC가 이미 있다고 가정하고, 그 위에 Immich와 미러링을 올리는 흐름만 정리합니다. 초보자 기준으로 주말 하루면 끝낼 수 있는 분량입니다.

STEP 1저장 경로 결정. 보통 /srv/photos/library를 Immich 라이브러리, /srv/photos/upload를 임시 업로드, /mnt/backup1을 외장 HDD 마운트 지점으로 잡습니다. 폴더 구조를 처음에 잘 짜두면 1년 뒤 자기가 자기를 칭찬합니다.
STEP 2docker-compose.yml 받기. Immich 공식 docs의 "Install Immich" 페이지에서 docker-compose.yml.env를 그대로 복사해 옵니다. 임의 수정은 처음엔 하지 않습니다.
STEP 3UPLOAD_LOCATION 지정. .env 파일의 UPLOAD_LOCATION을 위에서 정한 /srv/photos로 바꿉니다. 이 한 줄이 잘못되면 나중에 외장 HDD 미러링이 헛것을 복사하게 됩니다.
STEP 4컴포즈 기동. docker compose up -dhttp://NAS_IP:2283에 접속해 첫 관리자 계정을 만듭니다. 가족 구성원 계정을 여기서 미리 4명 정도 추가해 두면 편합니다.
STEP 5모바일 앱 자동 백업 켜기. 앱스토어에서 Immich 검색 → 서버 URL 입력(https://...) → 본인 계정 로그인 → "백업 켜기". Wi-Fi에서만, 충전 중에만 같은 옵션은 거의 디폴트로 두면 됩니다.
STEP 6Takeout 데이터 일괄 업로드. Google Takeout zip을 풀고, 메타데이터 보정 도구를 한 번 돌린 뒤 immich-cli로 폴더째 업로드합니다. 1.7TB 기준 LAN으로 약 6~7시간이 걸렸습니다.
STEP 7외장하드 자동 미러링. 외장 HDD를 ext4로 포맷하고 /mnt/backup1에 자동 마운트한 뒤, 아래의 cron 한 줄을 추가합니다. 새벽 3시에 매일 사진 폴더를 거울처럼 복사합니다.
# /etc/cron.d/immich-mirror
0 3 * * * root rsync -aH --delete /srv/photos/ /mnt/backup1/photos/ >> /var/log/immich-mirror.log 2>&1
STEP 8오프사이트 한 장 더. 똑같은 외장 HDD를 한 장 더 사서 한 달에 한 번 처가·본가 같은 다른 장소에서 갱신합니다. 매번 rsync 명령 한 줄이면 끝나서, 명절 인사 가서 30분이면 됩니다. 이걸 빼먹으면 3-2-1 룰이 무너집니다.

마치며 — 1년 뒤 다시 구글포토로 돌아갈 생각이 있는가

이짓을 하면서 처음 두 달은 "왜 사서 고생을 하나" 싶은 순간이 몇 번 있었습니다. 설 연휴에 Immich 컨테이너가 죽어서 아내한테 "오늘 찍은 사진 일단 갤러리에 두고 있어"라고 양해를 구한 일, Takeout zip이 깨져서 다시 받느라 사흘 까먹은 일, 외장하드 USB 케이블이 헐거워져서 미러링이 사실은 한 달 동안 멈춰 있었던 일. 이짓을 하면 한두 번씩은 다 겪는 일입니다. ㅜ.ㅜ

그런데 1년이 지난 지금 거실 TV 옆을 보면, 작은 미니PC 한 대가 7~9W의 전력을 쓰며 조용히 돌고 있고, 그 옆에는 외장하드 한 장이 빨간 LED로 깜빡입니다. 그게 우리 집 30년치 추억의 본거지라는 사실이, 어느 순간부터 묘하게 안심이 되더군요. 구글 계정 정책이 어떻게 바뀌든, 어떤 회사가 인수합병되든, 이 박스만 살아 있으면 사진은 그대로입니다.

돌아갈 생각이 있느냐고 묻는다면, 구글포토는 이제 "오프사이트 백업 후보 중 하나"로만 남겨둘 생각입니다. 메인은 미니PC + Immich, 보험은 외장하드 두 장. 이 조합이 깨지지 않는 한, 다음 30년치 사진도 같은 자리에 쌓일 겁니다.