Immich로 내 사진 셀프 호스팅하기
원문은 Michael Stapelberg님이 에 게재했습니다. 이 블로그 구독하기
내가 사용하는 모든 클라우드 서비스에 대해, 백업과 독립성을 위해 데이터의 로컬 사본을 가지고 싶다. 안타깝게도 Google이 OAuth 범위를 제한하면서 gphotos-sync 도구가 2025년 3월에 작동을 멈췄고, 그래서 기존 Google Photos 환경을 대체할 방법이 필요했다. 이 글에서는 셀프 호스팅이 가능한 사진 관리자인 Immich를 어떻게 구축했는지 설명한다.
최종 결과물은 다음과 같다. NixCon 2025에서 가져온 사진 몇 장(라이브 포토 포함)이다:

1단계. 하드웨어
나는 Immich를 Ryzen 7 미니 PC(ASRock DeskMini X600)에서 실행하고 있다. 이 PC는 대기 상태에서 10W 미만의 전력을 소모하면서도 VM을 구동하기에 충분한 리소스(64GB RAM, 1TB 디스크)를 갖추고 있다. 자세한 내용은 2024년 7월에 작성한 블로그 글에서 확인할 수 있다:
Proxmox라는 오픈소스 가상화 플랫폼을 설치해 이 미니 서버를 VM으로 나누어 사용하고 있지만, 물론 어떤 서버에든 Immich를 직접 설치해도 된다.
2단계. Immich 설치
디스크 500GB, CPU 코어 4개, RAM 4GB를 할당해 “photos”라는 이름의 VM을 만들었다.
초기 가져오기 단계에서는 CPU와 RAM을 더 많이 할당해도 되지만, 평소 사용에는 이 정도면 충분하다.
이 블로그 글에서 설명한 대로 해당 VM에 NixOS를 (선언적으로) 설치했다:
그 다음, 정확히 다음 설정으로 Immich를 활성화했다:
services.immich = {
enable = true;
};이 시점에서 Immich는 localhost에서는 접근할 수 있지만, NixOS가 기본적으로 방화벽을 활성화하므로 네트워크를 통해서는 접근할 수 없다. services.immich.openFirewall 옵션을 활성화할 수도 있지만, 나는 Immich를 Tailscale VPN을 통해서만 접근 가능하게 하고 싶어서 방화벽을 열 필요가 없었다. 대신 tailscale serve를 사용해 트래픽을 localhost:2283으로 포워딩했다:
photos# tailscale serve --bg http://localhost:2283Tailscale의 MagicDNS와 TLS 인증서 프로비저닝을 활성화해 두었기 때문에, 이제 PC나 노트북, 휴대폰의 브라우저에서 https://photos.example.ts.net을 열면 접속할 수 있다.
2단계. 기존 사진 가져오기
처음에는 공식 Immich CLI로 사진을 가져와 봤다:
% nix run nixpkgs#immich-cli -- login https://photos.example.ts.net secret
% nix run nixpkgs#immich-cli -- upload --recursive /home/michael/lib/photo/gphotos-takeout안타깝게도 업로드가 안정적으로 진행되지 않아 타임아웃이 발생하고 몇 번이나 수동으로 재시작해야 했다. 나중에 알게 된 원인은 Immich 서버가 썸네일 생성, 메타데이터 추출, 얼굴 인식 같은 백그라운드 작업을 실행하는데, 이 작업들이 업로드를 느리게 만들어 타임아웃으로 실패할 정도였기 때문이다.
또 다른 문제는 업로드가 끝난 뒤에야 알게 됐는데, Google Photos용 Google Takeout 아카이브에는 원본 이미지 파일 옆에 별도의 JSON 파일로 메타데이터가 들어 있다는 점이다:

안타깝게도 immich-cli는 이 파일들을 고려하지 않는다.
다행히 immich-go라는 훌륭한 서드파티 도구가 있어 두 문제를 모두 해결해 준다! 이 도구는 업로드 전에 백그라운드 작업을 일시 중지하고 완료 후 다시 시작해 훨씬 안정적으로 동작하며, Google Takeout 아카이브도 최대한 잘 이해해 처리한다.
나는 immich-go를 다음과 같이 실행했고 아주 잘 동작했다:
% immich-go \
upload \
from-google-photos \
--server=https://photos.example.ts.net \
--api-key=secret \
~/Downloads/takeout-*.zip3단계. Immich iPhone 앱 설치
새 사진의 주된 출처는 휴대폰이므로, iPhone에 Immich 앱을 설치하고 Tailscale URL로 Immich 서버에 로그인한 뒤 오른쪽 상단 아이콘을 통해 새 사진 자동 백업을 활성화했다.
이 설정이 맞는지 100% 확신할 수는 없지만, 카메라 사진은 보통 Live Photos에 들어가고 Recent가 나머지 파일을 커버하는 것 같다…?!
아시는 분이 있다면 설명(또는 링크!)을 보내 주시면 글을 업데이트하겠다.
또한 Immich의 알림은 꺼두는 것을 강력히 권장한다. 그렇지 않으면 백그라운드에서 이미지를 업로드할 때마다 알림이 뜨기 때문이다. Reddit에서 Immich 개발자가 확인했듯이 백그라운드 업로드가 동작하는 데 이 알림이 필요한 것은 아니다. Settings → Apps → Immich → Notifications로 이동해 허용 체크박스를 해제하면 된다:
4단계. 백업
Immich의 백업 문서에는 좋은 권장 사항이 담겨 있다. Immich 개발자들은 UPLOAD_LOCATION 전체를 백업할 것을 권장하는데, NixOS에서는 /var/lib/immich이다. backups 하위 디렉터리에는 SQL 덤프가 들어 있고, upload, library, profile 세 디렉터리에는 사용자가 업로드한 모든 데이터가 들어 있다.
그래서 나는 rsync를 실행해 /var/lib/immich를 내 PC로 복사하는 systemd 타이머를 설정해 두었고, 이 PC는 3-2-1 백업 전략에 따라 백업되고 있다.
아직 부족한 점은?
Immich에는 (현재로서는?) 사진 편집 기능이 없어서, 이미지를 회전하거나 자르려면 이미지를 다운로드한 뒤 GIMP를 사용한다.
이미지를 공유할 때는 (누구와 공유하느냐에 따라) 여전히 Google Photos에 업로드한다.
왜 Immich인가?
셀프 호스팅 이미지 관리 도구 중 가장 유망해 보이는 두 가지는 Immich와 Ente이다.
내 주변에서는 Immich가 더 인기 있는 것 같았고, Ente는 내가 원하는 것보다 범위가 훨씬 크다는 인상을 받았다:
Ente는 서비스 제공자를 신뢰하지 않고도 클라우드에 데이터를 저장할 수 있는 완전한 오픈소스 종단간 암호화 플랫폼을 제공하는 서비스입니다. 이 플랫폼 위에서 지금까지 두 가지 앱을 만들었습니다: Ente Photos(Apple 및 Google Photos의 대안)와 Ente Auth(지원이 중단된 Authy를 대체하는 2FA 앱).
나는 종단간 암호화 플랫폼이 필요하지 않다. 이미 전송 계층(Tailscale)과 디스크 계층(LUKS)에서 암호화를 하고 있어 더 복잡하게 만들 필요가 없다.
결론
Immich는 정말 즐거운 앱이다! 매우 빠르고 전반적으로 잘 동작한다.
초기 가져오기는 올바른 도구를 사용할 때만 매끄럽게 진행된다. 이상적으로는 공식 immich-cli가 개선되면 좋겠다. 혹은 immich-go를 공식 도구로 만드는 것도 좋을 것 같다.
iPhone에서 자동 백업 설정이 너무 어렵다고 생각하는데, 이 부분도 개선되면 좋겠다.
하지만 이런 초기 걸림돌을 제외하면 불만은 없다.
글을 무작위로 읽기
댓글
로그인하고 댓글 남기기