왜 홈서버를 만들게 됐나
개인 블로그를 운영하면서 OCI(Oracle Cloud) 무료 인스턴스 하나를 쭉 써왔다. 1 vCPU, 1GB RAM짜리라 Hugo 정적 블로그 서빙에는 충분했는데, 문제는 점점 하고 싶은 게 늘어난다는 것이다.
- 사진 파일이 쌓이면서 개인 NAS가 필요해졌다
- 사이드 프로젝트 돌릴 서버가 필요했다
- 비밀번호 관리도 외부 서비스 말고 직접 하고 싶었다
클라우드로 커버하면 되지 않냐 싶지만, 스토리지가 좀 붙으면 요금이 눈에 띄게 올라간다. 마침 집에 안 쓰는 노트북이 하나 있었고, 거기서부터 홈서버 구축기가 시작됐다.
하드웨어 선택: 데스크탑 대신 노트북
처음엔 집에 있는 데스크탑을 홈서버로 쓸까 생각했다. 그런데 데스크탑을 24시간 켜두면 전기세가 만만치 않다.
마침 Ryzen 5 5600U, RAM 16GB짜리 ThinkPad E15 Gen3가 있었다. 노트북이라 전력 소비가 훨씬 낮고, 배터리가 있어서 정전 시 UPS 역할도 된다. 성능도 홈서버 용도로는 충분하다.
| 항목 | 사양 |
|---|---|
| CPU | Ryzen 5 5600U |
| RAM | 16GB |
| 저장장치 | 256GB SSD (OS/Docker) + 1TB SSD (/mnt/data) |
| OS | Ubuntu Server 24.04 LTS |
유선 랜 포트를 따로 뚫기가 애매해서 일단 와이파이로 연결해서 운영 중이다.
전체 아키텍처
핵심은 세 가지다.
Tailscale VPN — 홈서버는 공인 IP가 없어서 외부에서 직접 접근이 안 된다. Tailscale로 홈서버와 OCI 인스턴스를 같은 사설 네트워크로 묶었다. 이렇게 하면 어디서든 VPN으로 홈서버에 접근할 수 있다.
OCI Nginx 리버스 프록시 — 기존에 Hugo 블로그를 서빙하던 OCI 인스턴스의 Nginx를 리버스 프록시로 활용한다. 외부에서 photo.yourdomain.com으로 접근하면 Nginx가 Tailscale VPN을 통해 홈서버의 Immich로 연결해주는 구조다.
Cloudflare DNS — 도메인 관리는 Cloudflare에서 한다. 서브도메인 추가할 때마다 Cloudflare에서 레코드 하나 추가하고 Nginx 설정 추가하면 끝이다.

운영 중인 서비스
현재 홈서버에서 돌아가는 서비스 목록이다.
| 포트 | 서비스 | 접근 방식 |
|---|---|---|
| 2283 | Immich (사진 관리) | 도메인 (OCI 프록시) |
| 9090 | Filebrowser (파일 관리) | 도메인 (OCI 프록시) |
| 11000 | Vaultwarden (비밀번호) | 도메인 (OCI 프록시) |
| 13000 | Grafana (모니터링) | Tailscale VPN |
| 19000 | Portainer (Docker GUI) | Tailscale VPN |
| 19090 | Prometheus | Tailscale VPN |
| 19100 | Node Exporter | 내부 수집용 |
| 23000 | 컨테이너 대시보드 (React) | Tailscale VPN |
| 28080 | 컨테이너 대시보드 (Spring) | Tailscale VPN |
Grafana, Portainer처럼 민감한 도구는 VPN 안에서만 접근하고 외부에는 열지 않았다. Docker 소켓에 직접 접근하는 툴을 외부에 노출하면 보안상 위험하기 때문이다.
시리즈 구성
이 구축기는 총 12편으로 구성된다.
- 왜 홈서버인가? + 전체 아키텍처 ← 지금 여기
- Ubuntu Server 설치 + Tailscale VPN
- 외장 SSD 마운트 + Filebrowser 원격 파일 관리
- Immich로 구글 포토 대체하기
- Vaultwarden으로 비밀번호 자체 호스팅
- Portainer CE로 Docker GUI 관리
- Grafana + Prometheus로 홈서버 모니터링
- Fail2ban으로 SSH 브루트포스 차단
- certbot –expand로 SSL 서브도메인 추가
- PostgreSQL 자동 백업 (pg_dump + cron)
- TLP + thinkfan + Swap 튜닝으로 운영 최적화
- 직접 만든 컨테이너 대시보드 (Spring Boot + React + SSE)
다음 편에서는 Ubuntu Server 설치부터 Tailscale VPN 연결까지 다룬다.