처음 홈서버를 만들고 싶었던 이유는 거창하지 않았다.
사진이 점점 늘어나면서 iCloud 용량이 다 차기도 했고, 개발자로서 미니 PC 하나 정도는 장난감처럼 가지고 놀아도 괜찮을 것 같았다.
요즘 말하는 OpenClaw나 Hermes 같은 도구를 개인 노트북에 계속 띄워두는 것도 애매했다. 노트북으로 계속 서비스를 돌리면 배터리 사이클도 신경 쓰이고, 외부에 들고 나갈 때마다 켜둘지 말지도 애매해진다.
처음에는 단순히 이런 생각이었다.
집에 항상 켜둘 수 있는 작은 서버 하나 있으면 좋겠다.
그런데 미니 PC를 설정하고 여러 서비스를 하나씩 구축하다 보니 목적이 조금 더 분명해졌다.
단순히 파일을 저장하거나 서비스를 띄우는 것에서 끝나는 게 아니라, 서비스에서 나온 데이터들을 기반으로 내 일상의 흐름을 기록하고 대시보드로 보고 싶어졌다.
예를 들면 이런 것들이다.
추가로, 내가 필요한 기능과 서비스를 빠르게 만들고 필요하면 외부에 노출하거나, 반대로 접근을 제한하는 구조도 직접 가져가고 싶었다.
처음에는 단순한 미니 PC였지만, 어느 순간부터는 내 데이터를 직접 운영하는 작은 인프라에 가까워졌다.
이번 글에서는 내가 홈서버를 왜 만들었고, 어떤 기준으로 장비를 골랐고, 처음 어떻게 설정했는지 정리해보려고 한다.
첫 번째로 고민한 것은 미니 PC를 선택하는 기준이었다.
홈서버는 일반적인 데스크탑 PC와 중요한 기준이 조금 다르다. 순간적으로 높은 성능을 내는 것보다, 오랫동안 안정적으로 켜둘 수 있는지가 더 중요했다.
내가 봤던 기준은 다음과 같다.
처음에는 CPU 성능을 가장 먼저 봐야 할 것 같았는데, 실제로 찾아보고 운영해보니 홈서버는 CPU보다 전력, 소음, 메모리, 저장공간, 복구 가능성이 더 중요했다.
특히 홈서버는 한두 시간 쓰고 끄는 장비가 아니라 24시간 켜두는 장비다. 그래서 성능이 조금 더 좋은 것보다, 계속 켜두기 부담 없는 구성이 더 현실적이었다.
현재 사용 중인 미니 PC는 꽤 저사양에 가깝다.
처음부터 너무 좋은 사양을 사용하면 비용도 올라가고, 내가 운영하려는 서비스 기준에서는 불필요하다고 생각했다. 또 너무 거창하게 시작하면 오히려 흥미가 떨어질 수도 있다고 봤다.
내가 사용한 사양은 대략 이렇다.
| 항목 | 현재 사양 | 판단 |
|---|---|---|
| CPU | Intel Celeron N5095A, 4코어 / 4스레드 | 기본 Docker 서비스 운영에는 충분하나, 무거운 DB/인덱싱 작업에는 한계 |
| Memory | 16GB | 여러 서비스를 동시에 돌리기 위한 현실적 마지노선 |
| SSD | 1TB | OS, 문서, 서비스 데이터를 함께 저장하기에 적당 |
| 네트워크 | 유선 LAN 기준 | Wi-Fi보다 안정적 |
이 사양으로 Memos, Homepage, Uptime Kuma, HTML 공유 서비스 등 여러 Docker 기반 개인 서비스를 운영할 수 있었다.
물론 고성능 서버는 아니다. 하지만 개인 홈서버 입문용으로는 충분했고, 오히려 저전력 미니 PC의 장점이 더 크게 느껴졌다.
홈서버를 처음 만들 때는 CPU가 가장 중요할 것 같았다. 하지만 막상 운영해보니 CPU는 “적당히 충분하기만 하면 되는” 요소에 가까웠다.
Memos, Uptime Kuma, Homepage, Filebrowser 같은 일반적인 웹 서비스는 CPU를 계속 많이 쓰지 않는다. 대부분의 시간은 대기 상태에 가깝고, 사용자가 접속하거나 배치 작업이 돌 때만 CPU를 사용한다.
그래서 입문용 홈서버라면 Intel N100, N200, N305 같은 저전력 CPU도 충분히 좋은 선택이라고 생각한다.
다만 CPU를 볼 때 반드시 확인해야 할 것도 있다.
예를 들어 구형 CPU는 AVX를 지원하지 않을 수 있다. MongoDB 5.0 이상 공식 Docker 이미지는 AVX를 요구하기 때문에, 이런 CPU에서는 컨테이너가 정상적으로 실행되지 않을 수 있다.
실제로 이런 호환성 문제는 스펙표만 보고는 놓치기 쉽다. 그래서 미니 PC를 구매하기 전에는 CPU 모델명과 함께 Linux, Docker, Proxmox, MongoDB 같은 키워드로 검색해보는 것이 좋다.
CPU 모델명 Linux
CPU 모델명 Docker
CPU 모델명 Proxmox
CPU 모델명 MongoDB AVX홈서버는 한번 사면 오래 켜두는 장비이기 때문에, 단순 벤치마크 점수보다 이런 호환성 확인이 더 중요할 때가 있다.
홈서버는 CPU보다 Memory가 훨씬 중요하고 체감도 잘 된다.
서비스 하나하나는 가벼워 보여도 Docker 컨테이너가 늘어나면 메모리 사용량은 금방 쌓인다.
예를 들어 홈서버를 운영하다 보면 서비스 성격이 다양해진다.
처음에는 서비스 몇 개만 띄울 생각이었지만, 운영하다 보면 “이것도 올려볼까?” 하는 서비스가 계속 생긴다.
현재 내 홈서버도 이미 8.3GB~9GB 정도를 상시로 사용하고 있다.
| RAM | 추천도 | 설명 |
|---|---|---|
| 8GB | 가능은 함 | 서비스가 늘면 금방 답답해질 수 있음 |
| 16GB | 추천 기본값 | 개인 홈서버를 안정적으로 운영하기 위한 현실적인 시작점 |
| 32GB | 여유 있음 | 사진/미디어/자동화/AI 작업까지 고려하면 좋음 |
내 경우 16GB는 후회가 적은 선택이었다.
8GB로도 시작은 가능하지만, 조금만 서비스를 늘리면 메모리 부족을 의식하게 될 가능성이 높다. 그래서 처음부터 홈서버를 어느 정도 오래 운영할 생각이라면 16GB를 기본값으로 보는 것이 좋다고 느꼈다.
서비스를 운영하면 결국 데이터는 계속 쌓인다.
처음에는 OS와 Docker 이미지만 있으면 될 것 같지만, 시간이 지나면 로그, DB 데이터, 업로드 파일, 백업 파일, 사진, 문서 등이 계속 늘어난다.
그리고 내 경우 홈서버를 만든 목적 자체가 사진과 개인 데이터를 저장하는 것도 포함되어 있었기 때문에 SSD를 조금 넉넉하게 잡았다.
| SSD | 추천도 | 설명 |
|---|---|---|
| 256GB | 비추천에 가까움 | OS와 실험용 Docker 정도는 가능하지만 금방 부족 |
| 512GB | 최소 시작선 | 가벼운 서비스 위주라면 가능 |
| 1TB | 추천 기본값 | OS, Docker, 개인 서비스 데이터를 함께 두기에 적당 |
| 2TB 이상 | 장기 운영용 | 사진/영상 등을 많이 저장할 계획이면 고려 |
당장은 1TB로도 충분하다고 생각했다.
다만 사진이나 영상처럼 용량이 큰 데이터를 많이 저장할 계획이라면, 처음부터 2TB 이상을 고려하거나 외장 디스크/NAS/백업 디스크를 별도로 생각하는 것이 좋다.
미니 PC를 고를 때는 CPU, RAM, SSD만 볼 것이 아니라 나중에 운영하면서 불편할 수 있는 요소도 같이 봐야 한다.
일부 미니 PC는 RAM이 납땜되어 있거나 SSD 확장이 제한적인 경우가 있다.
가능하면 RAM 확장이 가능하고, SSD 교체나 추가 장착이 쉬운 모델이 좋다.
홈서버는 처음에는 작게 시작하더라도, 운영하다 보면 서비스와 데이터가 계속 늘어난다. 처음부터 확장성이 조금이라도 있는 모델을 고르면 나중에 선택지가 넓어진다.
홈서버는 가능하면 무조건 유선 LAN을 기준으로 잡는 것이 좋다.
Wi-Fi로도 접속은 가능하지만, 서버는 안정성이 더 중요하다. 네트워크가 불안정하면 서비스 접속, 파일 전송, SSH 연결, 외부 접근 모두 영향을 받는다.
가능하면 1GbE 이상을 기준으로 보고, 여유가 있다면 2.5GbE 모델도 괜찮다.
정전이나 전원 차단 후 다시 전기가 들어왔을 때 자동으로 켜지는 기능이 있으면 좋다.
보통 BIOS에서 다음과 비슷한 이름으로 제공된다.
홈서버는 모니터와 키보드 없이 운영하는 경우가 많다. 정전 후에 직접 전원 버튼을 눌러야만 켜진다면 생각보다 불편하다.
그래서 구매 전이나 설치 초기에 BIOS에서 이 옵션을 확인해두는 것이 좋다.
아무리 스펙이 좋아도 Linux에서 네트워크나 전원 관리가 불안정하면 운영이 피곤해진다.
구매 전에는 모델명과 함께 이런 키워드로 검색해보는 것이 좋다.
모델명 Linux
모델명 Ubuntu Server
모델명 Proxmox
모델명 Docker homelab특히 랜카드, Wi-Fi, 절전, 부팅 관련 이슈가 있는 모델은 후기가 남아 있는 경우가 많다.
미니 PC 브랜드나 CPU 라인을 먼저 정하고, 그 다음 RAM/SSD 용량에 따라 가격이 얼마나 차이 나는지 비교해서 결정하면 된다.
홈서버를 설치하려면 생각보다 준비물이 필요하다.
설치가 끝나면 SSH로 원격 관리하면 되지만, BIOS 설정과 OS 설치 단계에서는 키보드와 화면이 필요할 때가 많다.
특히 미니 PC에 Windows가 설치되어 있고, 이를 지우고 Linux를 설치하려면 초기 설치용 장비가 필요하다.
| 준비물 | 권장 | 왜 필요한가 |
|---|---|---|
| USB 메모리 | 16GB 이상 | Ubuntu Server 같은 OS 설치 USB를 만들 때 필요 |
| 키보드 | USB 유선 키보드 | 초기 BIOS 설정, 설치 중 필요. 블루투스 키보드는 설치 단계에서 안 잡힐 수 있음 |
| 모니터 / HDMI 케이블 | 초기 설치와 BIOS 확인용 | 설치 후에는 SSH로 headless 운영 가능 |
| LAN 케이블 | Cat5e 이상 | 유선 연결이 안정적 |
| 노트북 | SSH 접속용 | 설치 후 서버 관리와 문서 작업을 진행할 클라이언트로 사용 |
설치 이후에는 모니터와 키보드를 계속 연결해둘 필요는 없다.
오히려 홈서버는 한쪽에 켜두고, 노트북에서 SSH로 접속해 관리하는 방식이 훨씬 편하다.
내가 산 미니 PC에는 Windows가 설치되어 있었는데, 홈서버로 사용할 예정이었기 때문에 지우고 Linux를 설치했다.
GUI가 크게 필요하지 않았고, Windows 환경도 필요하지 않았다.
홈서버용 OS로는 여러 선택지가 있다.
Proxmox나 Unraid 같은 홈서버/NAS용 OS도 매력적이지만, 당장 내 목적에는 조금 과하다고 생각했다.
처음부터 가상머신이나 LXC를 나누고, 스토리지 구조까지 깊게 가져가기보다는 익숙한 Linux 환경에서 하나씩 서비스를 올려보는 방식이 더 좋다고 판단했다.
그래서 Linux 배포판 중 Ubuntu Server를 선택했다.
이유는 다음과 같다.
Ubuntu Server는 일반 PC처럼 화면을 띄워서 사용하는 OS라기보다, 터미널과 SSH 중심으로 관리하는 서버용 OS다.
처음에는 GUI가 없는 환경이 조금 어색할 수 있지만, 홈서버는 모니터를 계속 연결해두고 쓰는 장비가 아니기 때문에 오히려 이 방식이 더 잘 맞았다.
OS 설치 USB를 만드는 방법이나 BIOS 설정은 PC마다 조금씩 다르고, 이미 인터넷에 자료가 많기 때문에 이 글에서는 자세히 다루지 않는다.
Ubuntu Server 설치가 끝났다고 바로 서비스를 띄우지는 않았다.
먼저 서버로 계속 사용할 수 있도록 기본 설정부터 확인했다.
설치 직후에는 패키지를 최신 상태로 맞췄다.
sudo apt update
sudo apt upgrade -y서버는 한 번 설치하고 오래 켜두는 장비이기 때문에, 처음부터 기본 패키지를 최신 상태로 맞춰두는 것이 좋다.
운영하면서 자주 사용할 기본 도구들도 설치했다.
sudo apt install -y curl git vim htop ca-certificates각 도구는 대략 이런 용도로 사용한다.
curl: HTTP 요청 확인이나 설치 스크립트 실행git: 설정 파일이나 프로젝트 관리vim: 서버에서 간단한 파일 수정htop: CPU, Memory 사용량을 터미널에서 보기 쉽게 확인ca-certificates: HTTPS 사이트를 신뢰하고 접속하기 위한 인증서 목록ca-certificates는 평소에는 직접 신경 쓸 일이 거의 없지만, 이 패키지가 없거나 오래되면 certificate verify failed 같은 오류가 날 수 있다.
Docker 설치 스크립트나 GitHub, 외부 API처럼 https:// 주소에 안전하게 접속하려면 필요한 기본 패키지다.
시간대도 한국 시간으로 맞췄다.
sudo timedatectl set-timezone Asia/Seoul시간대가 맞지 않으면 로그를 볼 때 헷갈린다.
특히 나중에 cron, 배치 작업, 모니터링 도구를 붙이기 시작하면 시간 기준이 어긋나는 것이 꽤 불편해진다. 그래서 초기 설정 단계에서 시간대를 맞춰두는 것이 좋다.
서버 내부 IP가 바뀌면 귀찮은 일이 생긴다.
예를 들어 SSH 접속할 때마다 IP를 다시 확인해야 하거나, 내부 서비스 주소가 바뀌거나, 나중에 외부 접근 설정을 했을 때 연결이 깨질 수 있다.
그래서 공유기에서 DHCP 예약을 걸어두는 것이 좋다.
DHCP 예약은 서버의 MAC 주소를 기준으로, 재부팅 후에도 항상 같은 내부 IP를 받도록 해주는 설정이다.
서버의 IP 주소는 다음 명령어로 확인할 수 있다.
ip addr공유기 관리자 페이지에서 홈서버의 MAC 주소를 찾아 원하는 내부 IP를 고정해두면 된다.
이렇게 해두면 이후 SSH 접속이나 내부 서비스 접근이 훨씬 편해진다.
서버 설치와 기본 설정이 끝나면, 이제 노트북에서 SSH로 접속할 수 있게 준비하면 된다.
설치 단계에서는 모니터와 키보드가 필요하지만, 설치 이후에는 홈서버를 계속 직접 만질 필요가 없다.
노트북에서 SSH로 접속해 관리하면 된다.
가장 기본적인 접속 방법은 서버의 내부 IP로 접속하는 것이다.
ssh 사용자명@서버IP예를 들어 사용자명이 yeongsu이고 서버 IP가 192.168.0.10이라면 다음처럼 접속할 수 있다.
처음에는 설치할 때 설정한 비밀번호를 입력하면 접속할 수 있다.
이 방식은 가장 단순하지만 단점도 있다.
그래서 처음에는 이 방식으로 접속을 확인하고, 이후에는 SSH key 기반 접속으로 바꾸는 것이 좋다.
SSH key 방식은 비밀번호 대신, 노트북에 있는 개인키와 서버에 등록된 공개키를 통해 접속하는 방식이다.
구조는 단순하다.
내 노트북: private key 보관
홈서버: public key 등록중요한 점은 private key는 절대 공유하면 안 되고, public key만 서버에 등록한다는 것이다.
노트북에서 SSH key가 없다면 다음 명령어로 생성할 수 있다.
ssh-keygen -t ed25519 -C "homeserver"보통 기본 경로를 그대로 사용하면 아래 두 파일이 생긴다.
~/.ssh/id_ed25519
~/.ssh/id_ed25519.pub여기서 id_ed25519는 private key이고, id_ed25519.pub는 public key다.
public key를 홈서버에 등록하려면 ssh-copy-id를 사용할 수 있다.
ssh-copy-id -i ~/.ssh/id_ed25519.pub 사용자명@서버IP이 명령어는 public key를 홈서버의 아래 파일에 추가해준다.
~/.ssh/authorized_keys이후에는 서버 비밀번호를 매번 입력하지 않고 SSH key로 접속할 수 있다.
단, 개인키에 passphrase를 걸어두었다면 해당 passphrase는 입력해야 할 수 있다. 이건 서버 비밀번호가 아니라 내 개인키를 여는 암호다.
혹시 권한 문제로 SSH 접속이 거부된다면, 파일 권한도 확인해야 한다.
노트북에서는 다음처럼 맞춰둔다.
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub
chmod 600 ~/.ssh/config홈서버에서는 다음 권한을 확인한다.
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keysSSH는 key 파일 권한이 너무 열려 있으면 보안상 이유로 접속을 거부할 수 있다.
매번 아래처럼 입력하는 것은 번거롭다.
그래서 노트북의 SSH 설정 파일에 별칭을 등록할 수 있다.
파일 위치는 다음과 같다.
~/.ssh/config예를 들어 아래처럼 설정할 수 있다.
Host homeserver
HostName 192.168.0.10
User yeongsu
IdentityFile ~/.ssh/id_ed25519이렇게 설정하면 이후에는 다음 명령어만으로 홈서버에 접속할 수 있다.
ssh homeserver이 시점부터 홈서버는 모니터가 연결된 작은 PC라기보다, 노트북에서 원격으로 관리하는 서버처럼 느껴진다.
여기서 한 가지 주의할 점이 있다.
192.168.x.x 같은 내부 IP로 접속하는 방식은 기본적으로 같은 내부 네트워크에서만 동작한다.
집 안에서는 다음처럼 접속할 수 있다.
하지만 회사나 카페 같은 외부 네트워크에서는 이 IP로 그대로 접속할 수 없다. 192.168.x.x는 사설 IP이기 때문이다.
외부에서 홈서버에 접속하려면 별도의 경로가 필요하다.
대표적으로는 다음 방법들이 있다.
나는 이후 Cloudflare Tunnel과 Cloudflare Access를 이용해, 공유기에서 SSH 포트를 직접 열지 않고도 외부에서 홈서버에 접속할 수 있게 만들었다.
이렇게 하면 외부에서는 도메인을 통해 접속하고, Cloudflare Access 인증을 거친 뒤 홈서버의 SSH로 연결할 수 있다.
다만 이 부분은 외부 접근과 보안 설정에 해당하므로, Cloudflare 관련 글에서 따로 다루려고 한다.
여기까지 진행하면 홈서버를 운영하기 위한 가장 기본적인 준비는 끝난다.
미니 PC를 준비했고, Windows 대신 Ubuntu Server를 설치했고, 기본 패키지와 시간대를 설정했고, 공유기에서 내부 IP가 바뀌지 않도록 DHCP 예약을 걸었고, SSH와 SSH key를 통해 노트북에서 원격 접속할 수 있게 만들었다.
이 단계까지 오면 홈서버는 더 이상 모니터와 키보드를 연결해서 만지는 작은 PC가 아니라, 노트북에서 원격으로 접속해 관리하는 서버에 가까워진다.
물론 아직 실제 서비스가 올라간 것은 아니다.
Memos, Uptime Kuma, Homepage, Filebrowser 같은 서비스들을 운영하려면 Docker와 Docker Compose 기반 구성이 필요하다.
또 외부에서 접속하려면 도메인, Cloudflare Tunnel, Cloudflare Access 같은 접근 구조도 따로 잡아야 한다.
처음에는 단순히 미니 PC 하나를 사서 서비스를 몇 개 띄워보자는 생각이었다. 하지만 설정을 진행하다 보니 홈서버도 결국 작은 인프라라는 걸 느꼈다.
장비를 고르는 것, OS를 설치하는 것, 원격으로 접속하는 것, 서비스를 띄우는 것, 외부 접근을 제어하는 것, 상태를 모니터링하는 것까지 모두 연결되어 있었다.
그래서 이번 글에서는 홈서버의 출발점인 장비 선택, OS 설치, 기본 설정, SSH 접속까지만 정리했다.
다음 글에서는 이 서버 위에 Docker와 Docker Compose를 설치하고, 서비스별 디렉터리 구조를 잡은 뒤, 처음으로 개인 서비스를 하나씩 올려보는 과정을 정리해보려고 한다.