왜 자가호스팅인가
한 해 동안 15개 서비스를 직접 운영하며 배운 것들. 비용, 통제, 그리고 한계.
목차
노트 하나를 열기까지 클라우드 서비스 4곳을 거친 어느 날, 그만하자고 정했습니다. 결국 서비스 15개를 직접 세워 올렸고, 이 글은 그동안의 기록입니다.
시작 이유#
작년 이 시기, 매일 사용하던 도구가 열 개를 넘었습니다. 그중 절반은 언젠가부터 로그인 창이 뜨고, 결제 페이지가 뜨고, 정책 변경 팝업이 떴습니다. 관리해야 할 계정이 곧 삶의 관리 대상이 되고 있었습니다.
세 가지 목표#
- 의존 최소화 — 특정 벤더가 사라져도 내 데이터가 남을 것
- 비용 상한 있음 — 트래픽/사용자에 따라 비용이 폭발하지 않을 것
- 한 곳에서 파악 — 로그, 백업, 인증서, 도메인. 한 명이 다 볼 수 있는 규모
첫 결정#
Cloudflare Tunnel 로 시작해 봤지만, 결국 벤더 락인이 남는다는 것을 깨달았습니다. Headscale + Tailscale 로 방향을 틀었습니다.
스택#
작게 시작해 조금씩 늘려온 결과입니다.
인프라#
- Headscale (자가 호스팅 컨트롤 서버) + Tailscale 클라이언트
- Caddy (자동 TLS + reverse proxy)
- Cloudflare DNS (도메인만, Tunnel 은 걷어냄)
- 백업: restic 로 로컬 HDD + iDrive e2 이중 복제
서비스#
노트 (Trilium), 비밀번호 (Vaultwarden), 파일 (Nextcloud), 캘린더 (Radicale), 채팅 (Matrix / Synapse), 문서 협업 (Docmost), 코드 저장소 (Forgejo), 시간 관리 (Kimai / Solidtime) 등. 필요할 때마다 하나씩.
CI/CD#
Forgejo Actions 의 자가 호스팅 runner. 이 블로그 자체도 그 파이프라인으로 배포됩니다.
배운 것#
숫자보다 태도의 문제였습니다.
자유는 무료가 아니다#
디스크가 넘치는 것은 내 책임입니다. 인증서 갱신도, 백업 검증도. 다만 그것이 무게가 되는 게 아니라, 오히려 통제감을 줍니다.
작게 유지하기#
거대한 관리자 대시보드는 없습니다. 서비스마다 로그인이 다르고, 취향에 맞는 도구를 골라 씁니다. 통일된 UX 를 포기하는 대신, 각각의 도구가 자기 세계 안에서 잘 만들어져 있습니다.
시간이 걸림#
한 서비스를 안정화하는 데 평균 이틀 정도 걸립니다. 총 몇 주 동안 저녁을 이 위에 썼습니다. 다만 한 번 세워두면 오래 갑니다.
한계와 타협#
솔직한 부분입니다.
협업은 여전히 클라우드#
혼자 쓰는 것은 만들 수 있지만, 다른 사람과 나누는 것은 여전히 SaaS 를 씁니다. GitHub, Notion 같은 것들. 자가호스팅 대체재가 있어도, 상대방이 따라오지 않기 때문입니다.
모바일 앱 품질#
데스크탑 웹은 정상이어도 모바일 앱 완성도는 편차가 큽니다. Element X (Matrix), Notesnook 은 좋고, 일부는 답답합니다.
정전과 인터넷#
집 서버는 인터넷과 전기가 나가면 멈춥니다. 그래서 실제 게시용 서비스는 VPS 로 옮겼습니다.
결론#
모든 사람에게 권하지 않습니다. 다만 한 번쯤 자기가 쓰는 도구가 어디에 있는지, 어떻게 굴러가는지 들여다보는 일은 해볼 만하다고 생각합니다.
다음 글에서는 실제로 세운 스택의 세부를 다루어 보겠습니다.