PhotoPrism vs Immich 비교: 나에게 맞는 사진 서버는?
자체 호스팅 사진 서버인 PhotoPrism과 Immich를 비교합니다. 모바일 자동 백업과 파일 관리 방식의 차이, VPS 환경에서의 RAM 점유율, 그리고 데이터 보존을 위한 필수 백업 명령어까지 실무적인 관점에서 상세히 분석해 드립니다.
PhotoPrism와 Immich: 요약
PhotoPrism와 Immich를 비교하는 것은 같은 제품의 두 버전을 선택하는 것이 아니라, 서로 다른 목적을 가진 두 도구 중 하나를 선택하는 것입니다. Immich는 Google Photos를 대체합니다. 휴대폰 앱이 카메라 롤을 자동으로 백업하며, 타임라인 구성은 휴대폰 갤러리를 사용하던 사용자에게 익숙한 형태입니다. 반면 PhotoPrism은 이미 보유한 사진 라이브러리를 정리합니다. 디스크에 있는 파일 폴더를 인덱싱하고 메타데이터를 읽어 지도에 표시하며, 파일은 원래 위치 그대로 유지합니다.
"휴대폰 용량이 부족하고 Google Photos에서 벗어나고 싶다"면 Immich를 선택하십시오. "드라이브에 400 GB의 사진이 있는데 무엇이 어디 있는지 찾기 어렵다"면 PhotoPrism을 선택하십시오. 두 서비스 모두 오픈 소스이며, 일반적인 VPS에서 Docker 컨테이너로 실행됩니다. 또한 제3자에게 데이터를 전송하지 않고 라이브러리를 인덱싱하고 검색할 수 있습니다.
철학의 차이와 그에 따른 결정적 영향
Immich는 파일을 직접 관리합니다. 업로드 위치를 지정하면 휴대폰 앱이나 웹 업로더가 원본 파일을 전송하고, Immich는 이를 자체 경로와 명명 규칙에 따라 저장합니다. 앨범, 얼굴 인식, 검색에 대한 정보는 데이터베이스가 관리합니다. 이러한 설계 덕분에 서버가 모든 자산의 전체 상태를 항상 파악하고 있어 모바일 환경에서 우수한 사용자 경험을 제공합니다.
PhotoPrism은 파일을 읽기만 합니다. 사용자가 이미 관리 중인 originals 폴더를 마운트하면 PhotoPrism이 그 위에 인덱스를 구축합니다. 디렉터리 구조는 그대로 유지됩니다. 내일 당장 PhotoPrism을 삭제하더라도 사진은 원래 폴더와 이름 그대로 남아 있으며, PhotoPrism이 분석한 내용은 옆에 생성된 sidecar YAML 파일에 기록되어 있습니다.
이 단 하나의 차이가 나머지 대부분의 특징을 설명합니다. Immich는 데이터 수집 과정을 직접 제어하기 때문에 강력한 모바일 지원을 제공합니다. PhotoPrism은 기존 파일 구조를 변경하지 않으므로 라이브러리 관리에 강점이 있습니다. 휴대폰에 사진을 보관하는 가족 단위 사용자에게는 Immich가 더 나은 선택입니다. 반면 디스크에 아카이브를 보관하는 경우에는 PhotoPrism이 더 적합합니다.
하드웨어 요구 사항: Immich의 높은 사양
문서화된 최소 메모리 사양의 격차가 크며, 소규모 VPS 환경에서는 이것이 보통 결정적인 요인이 됩니다.
The data behind this chart
[
{
"label": "Immich",
"min_ram_gb": 6,
"recommended_ram_gb": 8
},
{
"label": "PhotoPrism",
"min_ram_gb": 3,
"recommended_ram_gb": 4
}
]Immich는 최소 6 GB, 권장 8 GB의 RAM을 요구하며, 4 GB 장비에서는 머신러닝 기능을 꺼야만 실행할 수 있다고 명시합니다. PhotoPrism은 3 GB의 물리 메모리와 2개의 CPU 코어를 요구하며, RAM 용량은 코어 수에 비례해야 한다고 설명합니다.
이 격차는 머신러닝 컨테이너에서 발생합니다. Immich는 별도의 immich-machine-learning 서비스를 통해 CLIP(Contrastive Language Image Pretraining) 및 얼굴 인식 모델을 메모리에 로드합니다. 2 GB 장비에서는 커널이 해당 컨테이너를 강제 종료하며, Docker에서 메모리 부족으로 인한 종료를 의미하는 코드 137이 출력됩니다. PhotoPrism의 TensorFlow 모델은 상대적으로 작으며, 시스템이 죽는 대신 성능을 낮추는 방식을 택합니다. 1 GB 이하의 장비에서는 TensorFlow와 RAW 변환 기능을 비활성화하여 충돌을 방지합니다.
두 프로젝트 모두 스왑(swap) 공간을 요구합니다. PhotoPrism 문서는 서버에 최소 4 GB의 스왑을 설정할 것을 명시합니다. 두 애플리케이션 중 하나라도 설치하기 전에 스왑을 먼저 추가하십시오.
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
free -hfree -h 명령을 실행하면 4.0Gi가 포함된 Swap: 줄이 출력되어야 합니다. 만약 0B이 출력된다면 swapon가 실패한 것이며, 이는 보통 파일 시스템이 fallocate를 지원하지 않아 sudo dd if=/dev/zero of=/swapfile bs=1M count=4096이 대체제로 사용되었기 때문입니다. 컨테이너 메모리 제한 또한 중요하며, Docker Compose에서 메모리 제한 설정하기를 통해 특정 서비스가 자원을 독점하여 서버 전체가 다운되는 것을 방지할 수 있습니다.
사용자들이 자주 놓치는 요구 사항이 하나 더 있습니다. Immich의 Postgres 데이터베이스는 반드시 로컬 스토리지의 일반적인 Unix 파일 시스템에 위치해야 하며, 적절한 소유권과 권한이 설정되어야 합니다. 네트워크 공유 드라이브는 사용할 수 없습니다. PhotoPrism 역시 데이터베이스 파일에 대해 동일한 조건을 요구합니다. 두 애플리케이션 모두 데이터베이스를 마운트된 객체 스토리지(object store)에 두고 운영하는 것은 안전하지 않습니다.
각각 설치하는 방법
두 설치 모두 벤더가 제공하는 compose 파일과 하나의 명령어로 진행합니다. VPS에서 Docker Compose를 사용하는 방법 가이드에 따라 Docker Engine과 Compose 플러그인을 먼저 설정하십시오.
Immich는 모든 릴리스마다 compose 파일과 예제 환경 파일을 함께 제공합니다.
sudo mkdir -p /opt/immich && cd /opt/immich
wget -O docker-compose.yml https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
wget -O .env https://github.com/immich-app/immich/releases/latest/download/example.env시작하기 전에 .env을 편집하십시오. UPLOAD_LOCATION은 원본 파일이 저장될 위치이며, DB_PASSWORD는 기본값에서 반드시 변경해야 합니다. 이때 A-Za-z0-9 문자만 사용해야 하는데, 특수 문자를 사용하면 연결 문자열이 손상되기 때문입니다. 설정 후 서비스를 시작하십시오.
docker compose up -d
docker compose ps웹 인터페이스는 2283 포트에서 응답합니다. 해당 페이지를 통해 처음 등록된 계정이 관리자 권한을 갖게 되므로, 인터넷에 열린 상태로 방치하지 말고 즉시 접속하여 계정을 등록하십시오.
PhotoPrism은 MariaDB가 포함된 단일 compose 파일을 제공합니다.
sudo mkdir -p /opt/photoprism && cd /opt/photoprism
wget https://dl.photoprism.app/docker/compose.yamlcompose.yaml을 열고 첫 시작 전에 PHOTOPRISM_ADMIN_PASSWORD를 변경하십시오. 문서에서는 이 부분을 명확히 경고합니다. 애플리케이션은 해당 파일에 설정된 초기 비밀번호로 시작하며, 최소 길이는 8자입니다. 공개 서버에서는 기본값을 절대 사용해서는 안 됩니다. 동시에 사진이 저장된 폴더를 originals 볼륨으로 설정하십시오.
docker compose up -d
docker compose logs -f photoprismPhotoPrism은 2342 포트에서 admin 사용자로 응답합니다. 두 애플리케이션 모두 직접 외부에 노출해서는 안 됩니다. Docker, TLS, 백업을 활용한 Nextcloud 자가 호스팅 가이드에서 사용한 것과 동일한 방식으로, TLS(transport layer security)가 적용된 리버스 프록시를 앞단에 배치하십시오.
어떤 프로젝트의 모바일 앱이 더 나은가
이 부분에서 두 프로젝트의 차이가 가장 극명하게 드러나며, 대부분의 사용자가 결국 Immich를 선택하는 이유이기도 합니다.
Immich는 Android와 iOS용 공식 앱을 제공합니다. 이 앱은 백그라운드에서 카메라 롤을 백업하므로, 사용자가 앱을 직접 열지 않아도 새로운 사진이 자동으로 서버로 전송됩니다. 앱은 HTTPS 엔드포인트를 요구하므로, 집 밖에서 사용하려면 리버스 프록시 설정이 필수입니다.
PhotoPrism은 공식 네이티브 앱을 제공하지 않습니다. 대신 브라우저에서 홈 화면에 추가할 수 있는 프로그레시브 웹 앱(PWA)을 제공하며, 휴대폰에서 데이터를 동기화하는 방법으로 WebDAV(Web Distributed Authoring and Versioning)를 안내합니다. 이 프로젝트는 WebDAV를 통해 /import/ 또는 /originals/ 디렉터리를 가리키는 PhotoSync라는 타사 앱을 사용할 것을 권장합니다. 이 방식도 작동은 하지만, Immich는 자체 클라이언트 내에서 처리하는 기능을 타사 유료 앱을 통해 수행해야 한다는 번거로움이 있습니다.
여러 가족 구성원을 위한 자동 휴대폰 백업이 목적이라면, 고민할 것 없이 Immich를 선택하십시오.
머신러닝이 실제로 제공하는 기능
Immich는 CLIP을 사용하여 라이브러리 전체에서 의미론적 검색(semantic search)을 수행합니다. 따라서 "눈 속의 빨간 자전거"와 같이 검색하면 아무도 태그를 달지 않은 사진도 찾아낼 수 있습니다. 또한 얼굴 감지 및 클러스터링, 중복 사진 감지 기능도 제공합니다. 대규모 데이터를 CPU로 인덱싱하면 백그라운드에서 수 시간 동안 작업이 진행되는데, 이는 정상적인 동작이며 GPU(graphics processing unit)가 반드시 필요한 것은 아닙니다.
PhotoPrism은 TensorFlow를 사용하여 이미지를 분류하고 라벨을 지정하며, 얼굴을 감지하여 인물별로 그룹화합니다. 또한 위치 메타데이터를 읽어 장소 지도를 생성합니다. 이 지도는 사용자들이 이 서비스를 계속 사용하는 핵심 기능입니다. 촬영 장소별로 인덱싱된 라이브러리는 20년 치 사진을 탐색하는 완전히 새로운 방식을 제공합니다. 얼굴 인식 기능은 무료 Community 에디션에 포함되어 있습니다. 유료인 Essentials 및 Plus 멤버십을 이용하면 더 풍부한 지도 레이어, 추가 사용자 역할, 사용자 관리 인터페이스 등의 부가 기능을 사용할 수 있으며, 2026년 7월 기준으로 월 몇 유로 수준부터 시작합니다.
Immich는 유료 등급이 없는 완전 무료 서비스입니다. PhotoPrism은 핵심 기능은 무료로 제공하며, 선택적으로 유료 부가 기능을 추가할 수 있습니다.
백업은 데이터 보존 여부를 결정합니다
백업이 없는 사진 서버는 디스크 장애 한 번으로 가족의 모든 추억을 잃을 수 있습니다. 두 애플리케이션 모두 데이터베이스와 파일, 두 가지 백업이 필요합니다.
Immich의 경우, Postgres 컨테이너에서 데이터베이스를 덤프하고 업로드 경로를 복사하십시오.
docker exec -t immich_postgres pg_dump --clean --if-exists --dbname=immich --username=postgres | gzip > /backup/immich-db.sql.gz그런 다음 UPLOAD_LOCATION을 백업하십시오. 대체 불가능한 데이터가 포함된 폴더는 upload, library, profile입니다. thumbs 및 encoded-video 폴더는 수 시간의 CPU 자원을 소모하여 재생성할 수 있습니다. 데이터베이스 덤프만으로는 메타데이터만 포함되어 있으므로 아무것도 복구할 수 없습니다.
PhotoPrism의 경우, 인덱스 전용 명령어가 있습니다.
docker compose exec photoprism photoprism backup -i -f이 명령은 storage/backup/ 아래에 SQL 덤프를 생성합니다. 그 후 originals 폴더와 storage 폴더를 복사하십시오. PhotoPrism은 각 사진을 설명하는 사이드카 YAML 파일도 함께 기록하므로, 인덱스를 분실하더라도 파일만으로 복구할 수 있습니다. 이는 수십 년간 보관할 아카이브에 큰 장점입니다.
어떤 것을 선택하든, 원격 저장소로 암호화 및 중복 제거된 restic 백업을 사용하여 일정에 따라 서버 외부로 백업을 전송하십시오. 라이브러리와 같은 디스크에 저장된 백업은 진정한 의미의 백업이 아닙니다.
어떤 것을 실행해야 하는가
사진이 휴대폰에 있고, 여러 사람이 각자의 카메라 롤을 백업해야 하며, 서버에 6 GB 이상의 RAM을 할당할 수 있다면 Immich를 실행하십시오. 직접 호스팅할 수 있는 Google Photos와 가장 유사한 서비스이며, 모바일 사용 경험이 핵심입니다. Immich 단계별 설치 가이드에서 메모리 부족 문제와 업그레이드 시 주의사항을 상세히 다룹니다.
이미 디스크에 사진 아카이브가 있고, 지도와 메타데이터, 기존 폴더 구조를 유지하는 것이 중요하거나, VPS의 RAM이 4 GB뿐이라 스왑(swapping)이 발생하는 환경보다 안정적인 라이브러리 운영을 원한다면 PhotoPrism을 실행하십시오. 큐레이션 도구로서 더 뛰어나며 저사양 하드웨어에서도 부담이 적습니다.
두 서비스를 모두 운영하는 것도 합리적인 선택입니다. Immich는 일상적인 휴대폰 사진 수집을 담당하고, 1년에 한 번씩 보관할 사진을 정리하여 아카이브로 옮긴 뒤 PhotoPrism이 이를 인덱싱하게 할 수 있습니다. PhotoPrism은 폴더를 읽기만 하고 Immich는 자체 저장소를 관리하므로 두 서비스 간의 충돌은 발생하지 않습니다.
FAQ
PhotoPrism와 Immich가 동일한 사진 폴더를 공유할 수 있습니까?
양방향으로 안전하게 공유할 수는 없습니다. PhotoPrism은 originals 폴더를 읽고 이미지 옆에 sidecar YAML 파일을 생성하는 반면, Immich는 업로드 위치의 파일들을 직접 관리하는 것을 전제로 합니다. PhotoPrism에서 Immich의 library 폴더를 읽기 전용으로 지정하여 탐색할 수는 있지만, 두 애플리케이션이 동일한 파일을 관리하게 해서는 안 됩니다. Immich의 스토리지 템플릿이 PhotoPrism의 인덱싱 도중 자산을 이동하거나 이름을 변경할 수 있기 때문입니다.
Immich는 사진의 유일한 사본을 보관할 만큼 안정적입니까?
어떤 자가 호스팅 애플리케이션도 데이터의 유일한 사본을 보관하는 용도로 사용해서는 안 됩니다. Immich는 자주 파괴적인 변경 사항(breaking changes)을 포함하여 릴리스되므로, 부주의한 docker compose pull 작업은 데이터베이스를 시작할 수 없는 상태로 만들 수 있습니다. 따라서 버전을 고정하고 업그레이드 전 릴리스 노트를 반드시 확인하십시오. 원본 파일을 서버 외부로 백업해 두면 위험을 최소화할 수 있습니다.
Immich 머신 러닝 컨테이너가 계속 재시작되는 이유는 무엇입니까?
메모리 사용량이 너무 많아 프로세스가 강제 종료되고 있기 때문입니다. docker compose ps 명령을 실행하여 머신 러닝 서비스가 코드 137로 종료되는지 확인하십시오. 이는 커널의 OOM(Out of Memory) 킬러에 의한 종료입니다. 스왑을 추가하거나 컨테이너에 메모리 제한을 설정하여 강제 종료 대신 스로틀링이 발생하도록 하십시오. 4 GB 메모리 환경이라면 머신 러닝 기능을 완전히 비활성화할 수도 있습니다. 이 경우 검색 기능은 작동하지 않지만 Immich의 나머지 기능은 정상적으로 실행됩니다.
PhotoPrism은 MariaDB가 필요합니까, 아니면 SQLite로 충분합니까?
SQLite도 개인용 라이브러리 수준에서는 충분히 사용할 수 있습니다. 다만 SQLite 사용 시 PhotoPrism은 워커 수를 4개로 제한하며, 높은 동시성을 더 잘 처리하는 MariaDB로 전환할 것을 문서에서 권장합니다. 프로젝트에서 제공하는 compose 파일에는 이미 MariaDB가 포함되어 있으므로, 권장되는 방식이 곧 기본 설정입니다.
라이브러리 크기 외에 어느 정도의 디스크 공간을 추가로 확보해야 합니까?
두 애플리케이션 모두 원본 데이터 크기에 10에서 20퍼센트 정도의 여유 공간을 추가로 확보하십시오. 이는 생성되는 썸네일과 트랜스코딩된 비디오 미리보기 파일을 위한 공간입니다. 200 GB 규모의 컬렉션이라면 데이터베이스, 로컬 백업 사본, 향후 증가분을 고려하여 약 300 GB 정도의 볼륨을 준비하는 것이 좋습니다.