남는 기기로 홈서버 만들기 — 안드로이드 폰부터 구형 노트북까지
서랍에 잠든 갤럭시 S10으로 실제 웹서버를 돌리고 있다
이건 농담이 아니다. 2년 전 쓰던 갤럭시 S10이 서랍에서 잠을 자고 있었는데, 어느 날 생각해보니 이 기기도 프로세서가 있고 메모리가 있다. 왜 못 쓰지?
그렇게 시작한 실험이 지금까지 계속되고 있다. 남는 기기들로 홈서버 환경을 만드는 법을 정리했다.
안드로이드 폰 웹서버 — Termux 활용
Termux는 안드로이드 폰을 리눅스 환경으로 변신시키는 도구다. 구글 플레이에서 받을 수 있다.
설치 단계:
- Google Play에서 Termux 설치 (또는 F-Droid에서 받기)
- 앱 실행
- 기본 패키지 업데이트: apt update && apt upgrade
#!/bin/bash
# Node.js 설치
apt update
apt install -y nodejs npm
# 간단한 웹서버 만들기
npm init -y
npm install express
# app.js 생성
cat > app.js << 'EOF'
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('Hello from Galaxy S10! ' + new Date());
});
app.listen(3000, '0.0.0.0', () => {
console.log('Server running on port 3000');
});
EOF
# 실행
node app.js
이제 폰의 IP 주소를 확인하고, 같은 네트워크의 다른 기기에서 http://PHONE_IP:3000 으로 접속하면 웹서버에 도달한다.
갤럭시 S10 사양:
- Snapdragon 855 (8 코어)
- RAM: 8GB
- 저장소: 256GB
이것은 2019년 기준 하이엔드 폰이다. 지금도 웹서버로는 충분하다.
Termux의 장점과 단점
장점:
- 배터리로 충전하면 되므로 따로 전원이 필요 없음
- WiFi만 있으면 된다
- Linux 패키지를 거의 모두 설치 가능 (Python, Git, OpenSSL 등)
- SSH 접속도 가능
단점:
- 안드로이드 OS의 메모리 관리 때문에 프로세스가 종료될 수 있음
- 장시간 실행 시 배터리가 금방 닳음
- 항상 화면을 켜두기 싫으면 Tasker 등의 도구로 스크립트 자동화 필요
- 30분 정도 비활성화되면 앱이 종료될 수 있음
나는 이 문제를 해결하기 위해 S10을 거치대에 고정하고, 항상 WiFi와 충전에 연결되어 있게 했다. 그러면 꽤 안정적이다.
구형 노트북으로 홈서버 만들기
안드로이드 폰은 안정성 문제가 있지만, 구형 노트북은 진짜 홈서버가 될 수 있다.
내 경우 2015년 MacBook Pro를 홈서버로 쓰고 있다:
- i7 프로세서
- 16GB RAM
- SSD 512GB
설정 단계:
- Ubuntu 20.04 설치 (또는 기존 OS 사용)
- SSH 서버 설정
- Docker 설치
- PM2 또는 systemd로 자동 시작 설정
#!/bin/bash
# Ubuntu에서 홈서버 초기 설정
sudo apt-get update
sudo apt-get upgrade -y
# SSH 활성화
sudo apt-get install -y openssh-server
sudo systemctl start ssh
sudo systemctl enable ssh
# Docker 설치
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker $USER
# PM2 설치
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt-get install -y nodejs
sudo npm install -g pm2
# Node.js 애플리케이션 예제
mkdir -p ~/myapp
cd ~/myapp
npm init -y
npm install express
cat > app.js << 'EOF'
const express = require('express');
const os = require('os');
const app = express();
app.get('/', (req, res) => {
res.send(`
<h1>Welcome to Home Server</h1>
<p>Uptime: ${Math.floor(process.uptime())} seconds</p>
<p>Free Memory: ${Math.floor(os.freemem() / 1024 / 1024)} MB</p>
`);
});
app.listen(3000, () => console.log('Server running on 3000'));
EOF
# PM2로 시작
pm2 start app.js --name myapp
pm2 startup
pm2 save
전기요금 비용
홈서버를 24/7 돌리려면 전기요금이 얼마나 들까?
- 안드로이드 폰: 5W 정도. 월 약 500원
- 구형 노트북: 40W 정도. 월 약 4,000원
- 라즈베리파이: 10W. 월 약 1,000원
전기요금이 이 정도라면, 무료 호스팅(GitHub Pages, Vercel)도 좋지만 홈서버도 충분히 가능하다.
네트워크 설정 — 외부에서 접속하기
집 안에서만 사용한다면 문제없지만, 외부에서 접속하려면 어떻게 할까?
옵션 1: ngrok (간단하지만 느림)
npm install -g ngrok
ngrok http 3000
# https://random-string.ngrok.io 형식의 URL이 생성됨
ngrok은 터널링 서비스로, 자신의 로컬 서버를 인터넷에 노출시킨다. 설정이 간단하지만 무료 계정은 매번 URL이 바뀐다.
옵션 2: 공인 IP + 포트 포워딩 (더 안정적)
ISP에서 공인 IP를 받았다면:
- 공유기 설정에서 포트 포워딩 설정
- 예: 외부 포트 8080 → 내부 IP 192.168.1.100:3000
- 방화벽 규칙 확인
다만 가정용 인터넷은 공인 IP가 자주 바뀐다. DNS를 동적으로 업데이트해야 한다. (duckdns, noip 등 무료 DDNS 서비스 사용)
옵션 3: VPS 프록시 (가장 안정적)
작은 VPS를 빌려서 프록시로 사용한다. Oracle Cloud Always Free나 Linode 나노 인스턴스(월 $5)를 쓰면 된다.
# VPS에서 리버스 프록시 설정 (nginx)
server {
listen 80;
server_name myapp.com;
location / {
proxy_pass http://home-server-ip:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
보안 고려사항
홈서버를 인터넷에 노출하려면 보안이 중요하다:
- SSH는 키 기반 인증만 사용 (비밀번호 비활성화)
- 방화벽 설정으로 필요한 포트만 열기
- 정기적으로 패키지 업데이트
- HTTPS 인증서 (Let's Encrypt 무료)
- DDoS 방어 (Cloudflare Free 플랜 사용)
모니터링 및 유지보수
홈서버가 24/7 돌아야 하므로 모니터링이 필요하다:
#!/bin/bash
# healthcheck.sh - cron으로 매 5분마다 실행
#!/bin/bash
if ! curl -f http://localhost:3000 > /dev/null 2>>&1; then
# 서버가 다운되었으면 재시작
pm2 restart myapp
# 메일 발송 (선택사항)
echo "Server restarted at $(date)" | mail -s "Alert" your-email@example.com
fi
crontab에 추가:
*/5 * * * * /home/ubuntu/healthcheck.sh
나의 홈서버 구성
현재 내 홈서버 설정:
- 주 서버: 2015 MacBook Pro (Ubuntu)
- 백업: 갤럭시 S10 (Termux)
- 데이터베이스: 다른 노트북에서 MySQL 실행
- 외부 접속: Oracle Cloud VPS를 프록시로 사용
- 모니터링: PM2 + healthcheck 스크립트
총 전기요금: 월 약 6,000원
언제 홈서버, 언제 클라우드?
홈서버가 좋은 경우:
- 개인 프로젝트 (비용 절감)
- 높은 업타임 보장 가능 (회사 인프라)
- 데이터 프라이버시 중요 (자체 서버)
클라우드가 좋은 경우:
- 글로벌 사용자 대응 (CDN 필요)
- 높은 트래픽 (스케일링 필요)
- 업타임이 매우 중요 (SLA 필요)
결론: 남는 기기가 있다면, 꼭 새로 사지 말고 활용해보자. 예상보다 더 오래 사용할 수 있다.