SSD Nodes Learn Hosting plans →
가이드 Matt Connor작성자 Matt Connor · 업데이트됨 2026-10-19

2026년 꼭 구축해야 할 추천 셀프 호스팅 앱 25선

2026년 기준 개인 서버에서 운영하기 적합한 25가지 앱을 선정했습니다. 각 앱의 실제 RAM 및 디스크 점유율, 대체 서비스, 설치 시 주의해야 할 핵심 사항을 정리했습니다. Docker 환경에서 발생할 수 있는 권한 오류 해결법과 함께 실무적인 리소스 가이드를 제공합니다.

구축할 내용

단일 애플리케이션이 아니라 추천 목록입니다. 이 목록은 본 사이트의 모든 내용을 아우르는 중심축입니다. 2026년 기준, 개인 VPS에서 운영할 가치가 충분한 25가지 애플리케이션을 기능별로 분류했습니다. 각 항목마다 대체하는 서비스, 실제 RAM 및 디스크 사용량, 그리고 간과했을 때 문제가 될 수 있는 핵심 사항을 정리했습니다. 링크를 클릭하면 상세한 단계별 가이드로 이동합니다.

저는 15년 동안 VPS 호스트를 운영해 왔으며, 아래 나열된 대부분의 서비스를 제 서버에서 직접 실행하고 있습니다. 따라서 아래의 리소스 수치는 마케팅 페이지에 기재된 "최소 사양"이 아니라, 실제 소규모 워크로드 환경에서 애플리케이션이 사용하는 값입니다. 이 수치를 예산으로 간주하고, 운영에 필요한 여유 자원을 추가로 확보하십시오.

전제 조건과 솔직한 현실

이곳의 모든 애플리케이션은 root 또는 sudo 권한을 가진 최신 Ubuntu 24.04 KVM VPS에서 실행됩니다. 동일한 목록을 개인 서버에서 실행해도 무방하며, 매달 지불하는 임대료와 RAM 구매 비용을 비교 중이라면 가정용 Proxmox와 임대형 VPS 비교에서 하드웨어 및 전력 비용 계산을 다룹니다. 거의 모든 애플리케이션이 Docker 컨테이너 형태로 제공되므로 Docker를 한 번 설치하면 목록의 대부분을 바로 사용할 수 있습니다(Cloudron과 CasaOS라는 두 가지 예외는 자체 설치 스크립트를 통해 호스트에 직접 설치되므로 제어판 섹션을 참조하십시오).

curl -fsSL https://get.docker.com | sudo sh
sudo usermod -aG docker "$USER"
newgrp docker
docker run --rm hello-world

docker 명령이 permission denied while trying to connect to the Docker daemon socket 오류와 함께 실패한다면, 그룹 설정 단계를 건너뛰었거나 새 셸을 열지 않은 것이므로 로그아웃 후 다시 로그인하십시오. docker compose 명령이 docker: 'compose' is not a docker command를 반환한다면, 구형 독립형 바이너리를 사용 중인 것입니다. 위 스크립트는 최신 Compose 플러그인을 설치하며, 이를 호출할 때는 하이픈 대신 공백을 사용한 docker compose를 입력해야 합니다.

세 가지 현실이 아래 모든 내용의 기준이 됩니다. 첫째, 제약 사항은 디스크나 CPU가 아니라 RAM입니다. 1 GB VPS는 작은 앱 하나만 실행할 수 있습니다. 4 GB는 "여러 서비스를 직접 호스팅"하기에 가장 적합한 사양입니다. 2 GB는 초보자가 세 번째 서비스를 추가하다가 조용히 발생하는 Out-Of-Memory(OOM) 킬러를 경험하고 컨테이너가 왜 사라졌는지 영문도 모르게 되는 애매한 구간입니다. sudo dmesg 명령을 실행하면 데몬이 삼켜버린 Out of memory: Killed process 라인을 확인할 수 있습니다. 둘째, 공개 서비스는 도메인 이름과 인증서가 필요합니다. IP 주소만으로는 테스트는 가능하지만, 휴대폰 앱이나 브라우저가 신뢰해야 하는 순간 실패하게 됩니다. 셋째, 두 개의 포트가 선택의 절반을 결정합니다. 표준 HTTP-01 인증서 챌린지를 위해서는 인바운드 80번 포트가 서버에 도달해야 합니다(DNS-01 챌린지는 80번 포트가 닫혀 있을 때 DNS 레코드로 제어권을 증명하므로 유용합니다). 또한 대부분의 제공업체는 아웃바운드 25번 포트를 차단하므로, 이메일 서비스는 마지막의 "권장하지 않는 목록"에 포함되어 있습니다.

파일 및 사진

  • Nextcloud는 Google Drive, Dropbox, Google Calendar를 하나의 제품군으로 대체합니다. RAM은 1~2 GB와 파일 용량만큼의 여유 공간을 확보하십시오. 주의할 점은 SQLite는 데모용으로는 적합하지만 운영 환경에서는 위험하다는 것입니다. 처음 설치할 때부터 PostgreSQL을 사용하십시오. 데이터가 쌓인 뒤에 데이터베이스를 마이그레이션하는 과정에서 Nextcloud를 망치는 경우가 가장 많기 때문입니다. Docker, TLS, 백업을 활용한 VPS에서의 Nextcloud 가이드를 따르면 처음부터 올바르게 설정할 수 있습니다.
  • Immich는 카메라 롤을 자동 업로드하고 얼굴 및 사물을 검색하는 휴대폰 앱을 포함하여 Google Photos를 대체합니다. RAM은 최소 6 GB가 필요하며 8 GB 정도면 원활합니다. 머신러닝 컨테이너가 리소스를 많이 소모하며, 디스크 용량은 라이브러리 크기에 썸네일용으로 약 20%를 추가로 확보해야 합니다. 주의할 점은 Immich가 2025년 10월 v2.0.0 정식 출시 이후 시맨틱 버전을 따르고 있다는 것입니다. 메이저 버전 업데이트 시 호환성이 깨질 수 있으며 이미 v3로 넘어갔으므로, latest을 무작정 실행하지 마십시오. 다음 메이저 버전으로 바로 넘어갈 수 있기 때문입니다. 특정 버전을 고정하고 업그레이드 전마다 릴리스 노트를 확인하십시오. 셀프 호스팅 Immich 사진 라이브러리 가이드에서 안전한 업그레이드 경로를 다룹니다. 만약 서버의 RAM이 6 GB 미만이라면 PhotoPrism과 Immich 비교를 통해 실제 메모리 사용량, 휴대폰 앱, 라이브러리 도입 전 필요한 백업 명령어를 확인하십시오.
  • Seafile은 세 가지 서비스 중 가장 빠른 동기화 엔진을 제공하며 Dropbox를 대체합니다. RAM은 약 1 GB를 할당하십시오. 주의할 점은 Seafile이 파일을 일반적인 디스크 파일 형태가 아닌 콘텐츠 주소 지정 블록(content-addressed blocks)으로 저장한다는 것입니다. 따라서 ls으로 데이터를 직접 탐색할 수 없으며, 폴더를 복사하는 방식이 아닌 Seafile 자체 도구를 통해서만 백업해야 합니다.

비밀번호

  • Vaultwarden은 Bitwarden의 유료 플랜, LastPass, 1Password를 대체하는 가벼운 Rust 서버입니다. Bitwarden 프로토콜을 지원하므로 공식 Bitwarden 앱과 브라우저 확장 프로그램을 그대로 사용할 수 있습니다. RAM은 100–200 MB 정도면 충분하며 디스크 사용량은 거의 없습니다. 주의할 점은 이 서버가 사용자의 모든 비밀번호를 보관한다는 것입니다. 따라서 TLS와 백업은 선택 사항이 아니라 필수이며, 이 서비스의 핵심입니다. ADMIN_TOKEN은 Argon2 해시로 설정하십시오. compose 파일에 평문 토큰을 그대로 두면 서버 관리자 패널의 비밀번호가 노출되기 때문입니다. 관리자 패널은 모든 사용자를 나열하고 서버 설정을 변경할 수 있는 권한을 가지므로, 파일을 읽을 수 있는 사람이라면 누구든 평문으로 된 비밀번호를 볼 수 있습니다. Vaultwarden 비밀번호 관리자 가이드는 처음으로 직접 호스팅을 시작하기에 가장 좋은 지침서입니다.

미디어

  • Jellyfin은 Plex와 (개인 라이브러리의 경우) Netflix를 대체합니다. 완전히 오픈 소스이며, 계정 생성이나 원격 스트리밍 유료화가 없습니다. 유휴 상태에서 1–2 GB의 RAM을 점유하지만, 트랜스코딩 시 CPU 사용량이 급증합니다. 주의할 점은 4K 스트림을 소프트웨어로 트랜스코딩하면 소형 VPS는 과부하가 걸린다는 것입니다. 하드웨어 가속을 설정하거나, 클라이언트가 직접 재생(Direct Play)할 수 있는 형식으로 파일을 유지하여 서버가 데이터 전송만 담당하게 해야 합니다. VPS에서 Jellyfin 미디어 서버 운영하기 가이드에서 상세 내용을 확인할 수 있습니다. 서비스가 실행되면 Halcyon을 통해 브라우저에서 90년대 비디오 대여점처럼 라이브러리를 둘러볼 수 있습니다. 이는 가족 구성원이 단순히 목록을 넘기는 대신 직접 콘텐츠를 고르게 만드는 가장 재미있고 효과적인 방법입니다.
  • Navidrome은 개인 음악 라이브러리를 위한 Spotify 대체재이며, 모든 Subsonic 호환 앱으로 스트리밍할 수 있습니다. 150–300 MB의 RAM을 점유하며, Go 언어로 작성되어 리소스 소모가 거의 없습니다. 주의할 점은 첫 라이브러리 스캔 시 모든 파일의 태그를 읽기 때문에 대규모 컬렉션의 경우 한 시간 정도 소요될 수 있다는 것입니다. 또한 ID3 태그가 잘못되어 있으면 탐색 환경도 나빠집니다.
  • Audiobookshelf는 Audible과 팟캐스트 앱을 대체하며, 기기 간 재생 위치를 동기화합니다. 200–500 MB의 RAM을 점유합니다. 주의할 점은 도서별로 폴더를 엄격하게 구분하는 구조를 요구한다는 것입니다. 가져오기 폴더가 정리되어 있지 않으면 라이브러리가 제대로 인식되지 않으며, 나중에 수정하기가 매우 번거롭습니다.

자동화 및 AI

  • n8n은 Zapier나 Make를 대체하는 시각적 워크플로우 빌더로, 직접 호스팅하여 작업당 비용 없이 사용할 수 있습니다. 400 MB에서 1 GB 정도의 RAM을 할당하십시오. 주의할 점은 n8n이 처음 실행될 때 생성된 키로 저장된 자격 증명을 암호화한다는 것입니다. 이 키를 분실하거나 N8N_ENCRYPTION_KEY 설정을 잊어버려 키가 재생성되면, 기존에 저장된 모든 자격 증명을 읽을 수 없게 되어 다시 입력해야 합니다. HTTPS를 적용한 n8n 자가 호스팅 가이드를 참고하여 키를 고정하고 웹훅 URL 앞에 실제 인증서를 배치하십시오.
  • Ollama는 로컬에서 비공개로 LLM 추론을 수행하여 ChatGPT 구독을 대체합니다. 모델별로 필요한 자원을 고려하십시오. 7–8B 모델은 약 8 GB의 RAM이 필요하며, 디스크 사용량은 양자화 방식에 따라 다릅니다. 일반적인 4-bit 다운로드 시 약 4~5 GB, 전체 정밀도 fp16 빌드 시 13 GB 이상이 필요합니다. 주의할 점은 CPU 전용 VPS에서는 추론 속도가 정직하지만 느리다는 것입니다. 호스팅된 API처럼 즉각적인 응답을 기대하기 어려우므로 초당 단어 출력 수준으로 예상치를 조정하거나, GPU가 탑재된 서버를 임대하십시오. Ollama를 이용한 LLM 자가 호스팅 가이드에서 현실적인 수치를 확인할 수 있습니다.

커뮤니케이션

  • Rocket.Chat은 팀을 위한 Slack의 대체재로, 스레드, 통화, 통합 기능을 제공합니다. MongoDB 위에서 구동되며 MongoDB가 리소스를 많이 점유하므로 최소 2 GB 이상의 RAM을 할당하십시오. 주의 사항: 각 Rocket.Chat 메이저 릴리스는 특정 버전 범위의 MongoDB만 지원합니다(8.x는 MongoDB 8.0 이상이 필요하며, 7.x는 6.0 또는 7.0에서 구동됨). 또한 Rocket.Chat 자체 업그레이드 가이드라인은 메이저 버전을 순차적으로 올릴 것을 권장하므로, 단계를 건너뛰면 데이터베이스가 손상될 수 있습니다. 반드시 한 단계씩 업그레이드하십시오. Rocket.Chat with Docker Compose 가이드에서 버전 업그레이드 절차를 확인할 수 있습니다.
  • Matrix (Synapse)는 사용자가 직접 홈 서버를 소유하는 연합형 종단간 암호화 네트워크로, Slack과 Discord를 대체합니다. 1–2 GB의 RAM을 할당하되, 대규모 공개 방에 참여할수록 메모리 사용량이 증가합니다. 주의 사항: Synapse는 대규모 연합 방에서 메모리 사용량이 급증하므로 반드시 PostgreSQL 위에서 구동해야 합니다. 기본값인 SQLite는 단일 사용자 테스트용으로만 적합하며, 연합을 시작하는 순간 서비스가 중단됩니다. Synapse가 무겁게 느껴진다면 동일한 프로토콜을 사용하는 더 가벼운 Conduit이나 Dendrite 서버를 고려하십시오.

네트워킹 및 접근 제어

  • WireGuard는 상용 VPN을 대체하여 본인의 IP와 다른 서비스로 연결되는 개인 터널을 제공합니다. 거의 비용이 들지 않으며, 50 MB 미만의 메모리를 사용하고 암호화 처리는 커널에서 수행됩니다. 주의할 점은 컨테이너 기반 가상화(OpenVZ, 일부 LXC) 환경에서는 RTNETLINK answers: Operation not supported 오류로 모듈이 작동하지 않으므로 KVM 환경이 필요합니다. 자체 호스팅 WireGuard VPN 가이드가 표준 참고 자료이며, 터널에 바인딩된 서비스와 함께 사용하면 공용 인터넷에서 서비스를 완전히 격리할 수 있습니다. 새로운 기기를 추가할 때마다 피어 설정을 직접 수정하고 싶지 않다면, VPS에서 Tailscale 서브넷 라우터 실행하기를 통해 경로를 승인하고 재부팅 후에도 IP 포워딩이 유지되도록 설정하여 전체 사설 대역을 다른 기기들에 광고할 수 있습니다.
  • Traefik은 직접 작성하는 nginx 가상 호스트와 수동 인증서 갱신을 대체합니다. Docker 레이블을 통해 컨테이너를 자동으로 탐색하고 Let's Encrypt 인증서를 자동으로 가져옵니다. 약 100 MB의 RAM을 할당하십시오. 주의할 점은 레이블 기반 설정 모델이 처음에는 매우 혼란스러울 수 있으며, 레이블 하나만 잘못 설정해도 별도의 오류 메시지 없이 애플리케이션으로 연결되지 않는다는 것입니다. 여러 Docker 앱을 위한 Traefik 리버스 프록시 가이드는 이 페이지에 나열된 여러 앱을 하나의 진입점 뒤에서 실행하도록 구성되어 있습니다.
  • AdGuard Home은 Pi-hole이나 유료 DNS 필터링 서비스를 대체하여 네트워크 내 모든 기기의 광고와 추적기를 DNS 계층에서 차단합니다. 100–150 MB의 RAM을 할당하십시오. 주의할 점은 이 서비스가 53번 포트 점유를 시도한다는 것입니다. 이는 Ubuntu의 systemd-resolved와 충돌하며, 포트를 먼저 비우지 않으면 listen udp 0.0.0.0:53: bind: address already in use 오류로 인해 서비스가 시작되지 않습니다.

모니터링

  • Uptime Kuma는 Pingdom, UptimeRobot, StatusPage를 대체하며 깔끔한 대시보드와 거의 모든 채널로의 알림 기능을 제공합니다. RAM은 150–300 MB 정도를 할당하십시오. 주의할 점은 많은 사용자가 간과하는 부분인데, 반드시 다른 서버에서 운영 중인 서버를 모니터링해야 한다는 것입니다. 모니터링 대상 서버에서 직접 실행되는 Uptime Kuma는 해당 서버가 다운되었을 때 이를 감지할 수 없습니다. Uptime Kuma 상태 모니터링 가이드에서 외부 배치 방법을 다룹니다.
  • Zabbix는 Datadog 및 엔터프라이즈 모니터링 제품군을 대체하며, 에이전트 기반의 상세 메트릭, 트리거, 이력 관리 기능을 제공합니다. RAM은 2 GB 이상과 별도의 데이터베이스가 필요합니다. 주의할 점은 Zabbix는 강력하지만 설정이 매우 복잡하다는 것입니다. 컨테이너 3개 정도를 관리하기에는 과하며, 서버 군을 운영할 때 적합한 도구입니다. 우선 Uptime Kuma로 시작하고, 실제로 모니터링할 인프라가 충분히 갖춰졌을 때 Zabbix 모니터링 서버로 전환하십시오.

Prometheus와 Grafana를 이 목록에서 제외한 이유는 의도적입니다. 이들은 대규모 인프라를 위한 훌륭한 도구이지만, 개인용 서버 2~3대 규모에서 운영하고 튜닝하기에는 부담이 큽니다. 현재 규모에서는 Uptime Kuma와 Zabbix 조합으로도 충분히 동일한 목적을 달성할 수 있으며 유지보수 부담도 적습니다.

대시보드 및 제어 패널

이 도구들은 전체 운영 모델을 변경합니다. compose 파일을 직접 실행하는 대신, 패널이 사용자를 대신하여 애플리케이션을 관리합니다.

  • Cloudron은 "원클릭으로 설치되면 좋겠다"는 바람을 세련된 앱 스토어, 자동 TLS, 내장 백업 기능으로 해결합니다. 최소 2 GB RAM이 필요하며, 4 GB 이상을 권장합니다. 주의할 점은 이 도구가 매우 독자적인 방식을 취한다는 것입니다. 서버 전체를 관리하려 하며, 컨테이너가 아닌 자체 cloudron-setup 스크립트를 통해 새로 설치된 Ubuntu 서버에 직접 설치됩니다. 문서상 ARM, LXC, Docker, OpenVZ 호스트는 지원하지 않습니다. 또한 앱 2개까지는 무료이나 그 이상은 유료 제품입니다.
  • CasaOS는 복잡한 홈랩 대시보드를 사용자 친화적인 앱 그리드로 대체하며, 무료이고 가볍습니다. 컨테이너가 아닌 자체 스크립트(curl -fsSL https://get.casaos.io | sudo bash)를 통해 호스트에 설치되며, 이후 애플리케이션을 Docker로 실행합니다. CasaOS 자체를 위해 약 150에서 300 MB의 RAM을 할당하십시오. 주의할 점은 이 도구가 신뢰할 수 있는 홈 네트워크용으로 설계되었으며 공용 인터넷 환경을 위한 보안 강화가 되어 있지 않다는 것입니다. 직접 노출하지 말고 WireGuard를 통해 접속하십시오.
  • Coolify는 Heroku, Vercel, Netlify를 대체하며, git-push 배포, 데이터베이스 관리, 프리뷰 기능을 자신의 서버에서 구현합니다. 최소 2 GB RAM이 필요합니다. 주의할 점은 프로젝트가 초기 단계이며 빠르게 변화하므로, 버전을 고정하고 업그레이드 전 릴리스 노트를 반드시 읽어야 합니다. Cloudron vs CasaOS vs Coolify 비교 문서를 통해 각 도구가 어떤 사용자에게 적합한지 확인할 수 있습니다.

개발 및 생산성 도구

  • Gitea (또는 Forgejo): 비공개 저장소, 이슈 관리, CI를 위해 GitHub를 대체합니다. RAM은 200–500 MB를 할당하십시오. 주의 사항: Forgejo는 Gitea에서 파생된 커뮤니티 주도 포크이며 현재 많은 사용자가 권장하는 버전입니다. 둘 다 훌륭하지만 하나를 선택하여 저장소와 데이터베이스를 함께 백업하십시오. 데이터베이스 없이 저장소만 백업하면 모든 이슈와 풀 리퀘스트 정보가 유실됩니다.
  • Paperless-ngx: 서류함과 유료 문서 스캐너를 대체하며, 모든 문서를 OCR 처리하여 검색 가능하게 만듭니다. RAM은 약 1 GB를 할당하고, OCR 작업 중에는 CPU 사용량이 급증합니다. 주의 사항: OCR 결과는 스캔 품질에 따라 달라지며, 대규모 아카이브를 재처리하는 과정은 느립니다. 10년 치 문서를 대량으로 가져오기 전에 설정을 최적화하십시오.
  • Actual Budget: YNAB과 서비스가 종료된 Mint를 대체하며, 빠르고 로컬에서 동작하는 개인용 봉투 예산 관리 도구입니다. RAM은 약 150 MB를 할당하십시오. 주의 사항: 자동 은행 연동 기능이 내장되어 있으나 선택 사항입니다. SimpleFIN Bridge나 Enable Banking 같은 지역별 제공업체에 가입하고 API 자격 증명을 직접 추가해야 작동하므로, 초기 상태에서는 거래 내역을 수동으로 가져와야 합니다.
  • FreshRSS: Feedly와 서비스가 종료된 Google Reader를 대체하며, 모바일 앱을 지원하는 빠르고 개인적인 피드 리더입니다. RAM은 약 150 MB를 할당하십시오. 주의 사항: cron 기반의 피드 새로고침 설정을 하지 않으면 페이지를 열 때만 피드가 업데이트됩니다.
  • BookStack: 문서화를 위해 Notion과 Confluence를 대체하며, 책장, 책, 페이지 구조로 정리됩니다. PHP와 MySQL 환경에서 RAM 약 500 MB를 할당하십시오. 주의 사항: 자유 형식의 메모가 아닌 고유한 구조로 콘텐츠를 관리합니다. 이 방식을 선호하는 사람도 있지만 경직되다고 느끼는 사람도 있으므로, 전체 위키를 이전하기 전에 먼저 테스트하십시오.
  • Home Assistant: SmartThings와 수많은 제조사 앱을 대체하여 스마트 홈을 로컬에서 통합 관리합니다. RAM은 약 1 GB를 할당하십시오. 주의 사항: 핵심 기능 대부분이 기기에 대한 로컬 네트워크 접근을 필요로 하므로, 원격 VPS보다는 가정 내 하드웨어에서 구동하는 것이 더 자연스럽습니다. 원격에서 대시보드를 사용해야 한다면 브리지 연결을 구성하십시오.

대표적인 설치 예시

구체적인 이해를 돕기 위해, self-host의 전체적인 구성을 예로 들겠습니다. 여기에는 compose 파일, 실제 인증서, 그리고 백업이 포함됩니다. 예시는 Uptime Kuma를 사용하지만, 목록에 있는 모든 애플리케이션은 동일한 패턴을 따릅니다.

services:
  uptime-kuma:
    image: louislam/uptime-kuma:2
    container_name: uptime-kuma
    volumes:
      - ./data:/app/data
    ports:
      - "127.0.0.1:3001:3001"
    restart: unless-stopped
docker compose up -d
docker compose logs -f

127.0.0.1:에 주목하십시오. 애플리케이션은 localhost에서만 수신 대기하며, Traefik이나 nginx와 같은 리버스 프록시가 그 앞단에서 TLS를 종료합니다. 0.0.0.0:3001에 직접 바인딩하는 것은 암호화되지 않은 관리자 패널을 실수로 전체 인터넷에 공개하게 되는 원인이 됩니다.

자가 호스팅을 피해야 할 서비스 (현재 시점)

  • 이메일. 솔직하게 말씀드립니다. 대부분의 VPS 제공업체는 아웃바운드 25번 포트를 차단합니다. 이 경우 Connection timed out에서 telnet aspmx.l.google.com 25로 가는 메일이 차단되며, 이는 제공업체의 정책이므로 사용자가 해결할 수 있는 방법이 없습니다. 일부 업체(예: AWS)는 요청 시 제한을 해제해주기도 하지만, 이는 보장된 기능이 아니라 승인 절차를 거쳐야 합니다. 25번 포트가 열려 있더라도, 평판이 없는 신규 IP 주소, PTR 레코드, SPF, DKIM, DMARC 설정이 없으면 메일은 스팸으로 분류되거나 즉시 거부됩니다. 이는 주말에 잠깐 해서 끝날 일이 아니라 지속적으로 관리해야 하는 업무입니다. 꼭 직접 운영하고 싶다면 Mailcow를 이용한 자가 호스팅 이메일 가이드를 참고하여 철저히 준비하시고, 수개월 동안 메일 전달 가능성을 직접 모니터링할 각오를 하셔야 합니다.
  • 안정적인 백업 및 복구가 불가능한 모든 것. 복구 테스트를 한 번도 해본 적이 없다면 그것은 백업이 아니라 희망 사항일 뿐입니다. 복구 절차가 검증되기 전까지는 대체 불가능한 데이터, 사진 원본, 계정 정보 등을 해당 서비스에 저장하지 마십시오.
  • 핵심 의존 서비스의 유일한 복사본. 서버가 다운되었을 때 네트워크 전체의 인터넷 연결이 끊기는 자가 호스팅 DNS 서버는 첫 프로젝트로 적합하지 않습니다. 상위 업스트림 서버를 예비용으로 유지하십시오.
  • 실시간 안전 시스템. 가정용 경보기, 의료 알림 등 5분간의 다운타임이 심각한 문제를 초래할 수 있는 시스템은 일요일 밤에 업데이트를 진행하는 취미용 서버에 두어서는 안 됩니다.

첫 번째 애플리케이션 선택 방법과 반드시 지켜야 할 두 가지 원칙

매달 나가는 비용이 아깝거나 개인정보 보호가 걱정되는 문제를 해결해 줄 애플리케이션을 선택하십시오. 실제로 처음 설치하기 가장 좋은 것은 Vaultwarden과 Uptime Kuma입니다. 두 서비스 모두 가볍고 즉시 유용하며, 설정 과정에서 실수를 하더라도 복구가 쉽습니다. 두 번째 애플리케이션을 추가하기 전에 설치, 인증서 적용, 백업, 복구 테스트까지 전체 과정을 한 번 완벽하게 수행해 보십시오. 여러분이 쌓아야 할 역량은 단순히 설치 버튼을 누르는 것이 아니라 운영 능력입니다.

위에서 언급한 모든 애플리케이션에 대해 예외 없이 반드시 지켜야 할 두 가지 원칙이 있습니다.

  1. 모든 공개 서비스에 TLS 적용. IP 주소로 직접 접속하는 평문(plaintext) 서비스는 운영 환경이 아니라 데모에 불과합니다. Certbot and Let's Encrypt on nginx를 사용하여 실제 인증서를 적용하거나, Traefik을 통해 자동으로 처리되도록 하십시오. 그 후 Fail2ban for SSH on Ubuntu 24.04를 사용하여 서비스 입구를 강화하십시오.
  2. 실제로 복구해 본 백업. 매일 밤 데이터베이스와 데이터 볼륨을 함께 덤프하여 서버 외부로 전송하는 작업을 자동화하십시오. 그리고 한 달에 한 번은 테스트용 VPS에 복구하여 백업이 정상적으로 작동하는지 확인하십시오. 디스크가 고장 난 날에 백업 파일이 비어 있다는 사실을 알게 되는 것은 최악의 상황입니다.

이 두 가지만 제대로 지키면 셀프 호스팅은 즐거운 경험이 될 것입니다. 이를 무시하면 재앙이 닥칠 시간을 기다리는 것과 다름없습니다.

선택지는 실용적인 것부터 터무니없는 것까지 다양합니다. 가족을 위한 Minecraft server on a VPS를 운영할 수도 있고, 반면교사로 삼을 만한 the world's least efficient datacenter 사례를 살펴볼 수도 있습니다.

FAQ

가장 먼저 무엇을 셀프 호스팅해야 합니까?

Vaultwarden을 추천합니다. 비밀번호 관리자는 매일 유용하게 사용할 수 있고, 구독 서비스를 대체하며, Docker, 리버스 프록시, TLS, 백업 등 전체 워크플로우를 학습하게 해줍니다. 또한 문제가 생겨도 10분 안에 다시 구축할 수 있을 만큼 가볍습니다. Uptime Kuma는 두 번째로 좋은 선택입니다. 사용자가 장애를 알기 전에 관리자가 먼저 문제를 파악할 수 있게 해줍니다.

실제로는 어느 정도 사양의 VPS가 필요합니까?

작은 애플리케이션 하나를 운영한다면 1 GB RAM으로 충분합니다. 여러 서비스를 여유 있게 운영하려면 4 GB를 권장합니다. 2 GB는 사용자들이 이유를 알 수 없는 컨테이너의 OOM(Out-Of-Memory) 종료를 자주 겪는 구간입니다. 보통 RAM이 가장 먼저 한계에 도달합니다. 디스크는 저장할 데이터 용량에 맞춰 추가하고, Immich, Ollama처럼 데이터베이스가 큰 서비스는 RAM과 디스크 모두 많이 필요하다는 점을 고려하십시오.

무엇을 셀프 호스팅하지 말아야 합니까?

가장 먼저 이메일입니다. 대부분의 제공업체에서 아웃바운드 25번 포트를 차단하며, 메일 수신율을 유지하는 것은 전업으로 매달려야 할 만큼 어렵습니다. 그다음으로는 안정적인 백업과 복구가 불가능한 서비스, 그리고 장애 발생 시 실질적인 피해를 주는 단일 장애점(예: 대체 수단이 없는 DNS 서버나 가정용 보안 시스템)입니다. 이 목록에 있는 다른 모든 것은 시도해 볼 만합니다.

이 모든 것을 위해 Docker가 꼭 필요합니까?

필수는 아니지만, 사용하는 것이 좋습니다. Cloudron과 CasaOS를 제외한 이 목록의 모든 앱은 Docker 이미지를 제공합니다. 이 두 서비스는 자체 설치 스크립트로 호스트에 직접 설치된 뒤, 내부적으로 컨테이너를 실행합니다. 그 외의 경우 Docker를 사용하면 깔끔한 설치와 삭제, 쉬운 버전 고정, 새로운 호스트로의 이식성이 보장됩니다. WireGuard나 Zabbix처럼 선호에 따라 apt로 직접 설치할 수 있는 앱도 있습니다. compose 파일 하나를 익히면 나머지도 모두 동일하게 적용할 수 있으므로, 전체 목록을 훨씬 쉽게 다룰 수 있게 됩니다.

어떻게 보안을 유지해야 합니까?

네 가지 습관으로 대부분의 보안을 확보할 수 있습니다. 모든 서비스 앞에 TLS를 적용하고, SSH는 키 기반 로그인과 Fail2ban을 통한 무차별 대입 공격 차단으로 잠그십시오. 외부 공개가 꼭 필요한 포트만 열고, 나머지는 WireGuard VPN을 통해 접속하십시오. 또한 업데이트 시 릴리스 노트를 확인하여 예기치 않은 문제가 발생하지 않도록 정기적으로 업데이트하십시오. 백업은 다섯 번째 습관입니다. 앞선 네 가지 보안 조치를 통과한 실수로부터 복구할 수 있는 유일한 방법입니다.