홈서버 운영 중 자주 발생하는 문제와 해결 방법 – 실전 Q&A 모음

홈서버 운영 중 자주 발생하는 문제와 해결 방법 – 실전 Q&A 모음

워드프레스를 도커로 설치하고, 도메인까지 연결해서 성공적으로 홈서버를 구축했더라도
운영 중에는 다양한 예상치 못한 문제들이 발생할 수 있다.

특히 비전문가 입장에서는 처음 보는 에러나 접속 실패
당황스럽고 해결하기 어려울 수 있다.

이번 글에서는 실제 홈서버 운영 중 자주 발생하는 문제들을
Q&A 형식으로 정리하고, 빠르게 대처할 수 있는 팁을 공유한다.

📊 홈서버 문제 발생 빈도 TOP 10

순위문제발생 빈도심각도
1외부 접속 안 됨⭐⭐⭐⭐⭐🔴 높음
2컨테이너 다운⭐⭐⭐⭐🔴 높음
3디스크 용량 부족⭐⭐⭐⭐🟡 중간
4내부 IP 변경⭐⭐⭐🟡 중간
5SSL 인증서 만료⭐⭐🔴 높음
6WordPress 느림⭐⭐⭐⭐⭐🟡 중간
7파일 업로드 실패⭐⭐⭐🟢 낮음
8포트 충돌⭐⭐🟡 중간
9DB 연결 오류⭐⭐🔴 높음
10플러그인 충돌⭐⭐⭐🟡 중간

🔌 Q1. 외부에서 도메인 접속이 안 돼요!

증상

  • 집 안(내부 네트워크)에서는 접속 가능
  • 모바일 데이터(외부 네트워크)에서는 접속 불가
  • “연결할 수 없음” 또는 “사이트에 연결할 수 없습니다” 오류

원인 체크리스트

원인확인 방법해결
포트포워딩 미설정공유기 관리 페이지 확인80, 443 포트포워딩 추가
내부 IP 변경ip addr 확인고정 IP 또는 DHCP 예약
ISP 포트 차단포트 스캔 사이트 테스트8080, 8443 대체 포트 사용
방화벽 차단sudo ufw statussudo ufw allow 80/443
DNS 전파 안 됨nslookup 도메인24~48시간 대기

단계별 진단

# Step 1: 내부 접속 테스트
curl http://localhost
curl http://192.168.0.100

# Step 2: 외부 IP 확인
curl ifconfig.me

# Step 3: 포트 오픈 확인
https://www.yougetsignal.com/tools/open-ports/
→ IP: 내 외부 IP
→ Port: 80, 443

# Step 4: DNS 확인
nslookup myblog.duckdns.org
→ 내 외부 IP와 일치하는지 확인

# Step 5: Traceroute
traceroute myblog.duckdns.org
→ 어디서 막히는지 확인

해결 방법

1. 포트포워딩 재설정

공유기 관리 페이지 (보통 192.168.0.1 or 192.168.1.1)
→ 고급 설정 → NAT/라우터 관리 → 포트포워딩

추가:
외부 포트: 80 → 내부 IP: 192.168.0.100, 포트: 80
외부 포트: 443 → 내부 IP: 192.168.0.100, 포트: 443

저장 → 공유기 재부팅

2. ISP 차단 시 대체 포트 사용

# docker-compose.yml 수정
services:
  npm:
    ports:
      - "8080:80"
      - "8443:443"

# 재시작
docker compose restart

# 공유기 포트포워딩도 변경
외부: 8080 → 내부: 192.168.0.100:8080
외부: 8443 → 내부: 192.168.0.100:8443

# 접속 테스트
https://myblog.duckdns.org:8443

🛑 Q2. Docker 컨테이너가 갑자기 꺼졌어요

증상

  • 사이트 접속 불가 (502 Bad Gateway)
  • docker ps에서 컨테이너 안 보임

진단

# 모든 컨테이너 상태 확인 (중지된 것 포함)
docker ps -a

# 출력 예시:
CONTAINER ID   STATUS
abc123def456   Exited (137) 2 minutes ago  # 강제 종료
def789ghi012   Exited (1) 5 minutes ago    # 오류로 종료

# 로그 확인
docker logs wordpress-app
docker logs wordpress-db

# 컨테이너 리소스 사용 이력
docker stats --no-stream

원인별 해결

원인 1: 메모리 부족 (OOM Killer)

# 로그에서 "OOM" 또는 "killed" 확인
docker logs wordpress-db | grep -i oom

# 해결: 메모리 제한 완화 또는 증설
# docker-compose.yml
services:
  db:
    deploy:
      resources:
        limits:
          memory: 1G  # 512M → 1G로 증가

# 재시작
docker compose up -d

원인 2: 디스크 용량 부족

# 디스크 확인
df -h

# Docker 정리
docker system prune -a
docker volume prune

# 로그 파일 정리
sudo journalctl --vacuum-size=100M

원인 3: MySQL 충돌

# 로그 확인
docker logs wordpress-db

# 일반적인 오류:
"InnoDB: The innodb_system data file 'ibdata1' must be writable"

# 해결: 권한 수정
docker exec wordpress-db chown -R mysql:mysql /var/lib/mysql

# 재시작
docker restart wordpress-db

원인 4: 포트 충돌

# 80 포트 사용 중인 프로세스 확인
sudo lsof -i :80

# 출력 예시:
apache2  1234  root   4u  IPv6  ...  TCP *:http (LISTEN)

# Apache 중지
sudo systemctl stop apache2
sudo systemctl disable apache2

# Docker 재시작
docker compose restart

자동 재시작 설정

# docker-compose.yml
services:
  wordpress:
    restart: unless-stopped  # 수동 중지 외 항상 재시작
  db:
    restart: unless-stopped

🌐 Q3. 홈서버의 내부 IP가 자꾸 바뀌어요

문제

서버 재부팅 시마다 192.168.0.100 → 192.168.0.105 등으로 변경

해결 방법 2가지

방법 1: 공유기에서 DHCP 예약 (권장)

공유기 관리 페이지
→ LAN 설정 → DHCP 서버 → 수동 할당 (또는 IP/MAC 바인딩)

MAC 주소 확인:
ip link show

MAC 주소: aa:bb:cc:dd:ee:ff
할당 IP: 192.168.0.100

저장 → 서버 재부팅

방법 2: Ubuntu에서 고정 IP 설정

# Netplan 설정 파일 편집
sudo nano /etc/netplan/00-installer-config.yaml

내용:

network:
  version: 2
  ethernets:
    enp0s3:  # 네트워크 인터페이스 이름 (ip a로 확인)
      dhcp4: no
      addresses:
        - 192.168.0.100/24
      routes:
        - to: default
          via: 192.168.0.1  # 공유기 IP (게이트웨이)
      nameservers:
        addresses:
          - 8.8.8.8
          - 1.1.1.1
# 적용
sudo netplan apply

# 확인
ip addr show

🔐 Q4. HTTPS 인증서가 갑자기 만료되었어요

증상

  • 브라우저에서 “연결이 비공개로 설정되어 있지 않습니다” 경고
  • “NET::ERR_CERT_DATE_INVALID” 오류

원인

Let’s Encrypt 인증서는 90일 유효, 자동 갱신 실패

갱신 실패 원인

원인확인해결
포트 80 닫힘포트포워딩 확인80 포트 재오픈
도메인 IP 불일치nslookup 도메인DDNS 업데이트
NPM 컨테이너 다운docker ps컨테이너 재시작
Rate Limit 초과NPM 로그 확인1주일 대기

수동 갱신

# NPM 관리 페이지 (http://서버IP:81)
SSL Certificates → 해당 인증서 클릭 → Renew Certificate

# 또는 CLI
docker exec nginx-proxy-manager certbot renew

# NPM 재시작
docker restart nginx-proxy-manager

자동 갱신 확인

# NPM 로그 확인
docker logs nginx-proxy-manager | grep -i renew

# Cron 작업 확인 (NPM 내장)
docker exec nginx-proxy-manager crontab -l

💾 Q5. 디스크 용량이 부족해요

진단

# 전체 디스크 사용량
df -h

# 큰 파일/폴더 찾기
du -h --max-depth=1 / | sort -hr | head -20

# Docker 사용량
docker system df

# 출력 예시:
Images      15      5.2GB
Containers  10      2.1GB
Local Volumes 8    12.3GB  # 여기가 큼!
Build Cache 0      0B

해결 방법

1. Docker 정리

# 사용하지 않는 이미지 삭제
docker image prune -a

# 중지된 컨테이너 삭제
docker container prune

# 사용하지 않는 볼륨 삭제 (주의!)
docker volume prune

# 전체 정리 (Build Cache 포함)
docker system prune -a --volumes

# 확인
docker system df

2. 로그 파일 정리

# 시스템 로그 정리
sudo journalctl --vacuum-time=7d
sudo journalctl --vacuum-size=100M

# Docker 로그 제한 설정
sudo nano /etc/docker/daemon.json

내용:

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}
# Docker 재시작
sudo systemctl restart docker

3. WordPress 미디어 정리

# Media Cleaner 플러그인 설치
플러그인 → Media Cleaner 검색 → 설치

# 사용하지 않는 미디어 스캔 및 삭제

📂 Q6. WordPress 파일 업로드 실패

증상

  • “업로드: 실패. 잘못된 MIME 타입”
  • “파일 크기가 너무 큽니다”
  • “파일을 임시 디렉터리로 이동할 수 없습니다”

원인 1: 업로드 크기 제한

# 현재 제한 확인
워드프레스 관리자 → 미디어 → 새로 추가
"최대 업로드 크기: 2 MB" 확인

# php.ini 수정
docker exec -it wordpress-app bash
nano /usr/local/etc/php/conf.d/uploads.ini

내용:

upload_max_filesize = 64M
post_max_size = 64M
memory_limit = 256M
max_execution_time = 300
# 재시작
exit
docker restart wordpress-app

원인 2: 권한 문제

# wp-content/uploads 권한 확인
docker exec wordpress-app ls -la /var/www/html/wp-content/

# 권한 수정
docker exec wordpress-app chown -R www-data:www-data /var/www/html/wp-content/uploads
docker exec wordpress-app chmod -R 755 /var/www/html/wp-content/uploads

원인 3: 디스크 용량 부족

# 컨테이너 내부 디스크 확인
docker exec wordpress-app df -h

# 볼륨 정리 (위 Q5 참고)

🐌 Q7. WordPress가 너무 느려요

속도 진단

# PageSpeed Insights
https://pagespeed.web.dev/
→ 도메인 입력 → 분석

# GTmetrix
https://gtmetrix.com/
→ 상세 분석

# Query Monitor 플러그인
플러그인 → Query Monitor 설치
→ 느린 쿼리, 플러그인 확인

해결 체크리스트

항목확인해결
캐시LiteSpeed Cache 설치?캐시 플러그인 활성화
이미지이미지 크기 (MB 단위?)ShortPixel로 압축
플러그인20개 이상?불필요한 것 비활성화
테마Divi, Avada 등 무거운 테마?경량 테마로 교체
DB리비전 많음?WP-Optimize로 정리
PHP7.4 이하?8.2로 업그레이드

🔄 Q8. 컨테이너 재시작 시 데이터 사라짐

원인

볼륨 설정 안 함 → 컨테이너 내부에만 데이터 저장

확인

# docker-compose.yml 확인
cat ~/wordpress-project/docker-compose.yml | grep volumes

# 볼륨 목록
docker volume ls

해결

# docker-compose.yml에 볼륨 추가
services:
  wordpress:
    volumes:
      - wordpress_data:/var/www/html
  db:
    volumes:
      - db_data:/var/lib/mysql

volumes:
  wordpress_data:
  db_data:

# 재시작
docker compose down
docker compose up -d

📝 정리하며

문제 해결 일반 원칙

  1. 로그 확인: docker logs [컨테이너명]
  2. 상태 확인: docker ps -a
  3. 리소스 확인: docker stats, df -h
  4. 네트워크 확인: 포트포워딩, 방화벽, DNS
  5. 백업 확인: 문제 전 백업 있는지

필수 모니터링 명령어

# 매일 실행 권장
docker ps                    # 컨테이너 상태
docker stats --no-stream     # 리소스 사용량
df -h                        # 디스크 용량
docker system df             # Docker 디스크 사용
free -h                      # 메모리 사용량

다음 단계

다음 글에서는 워드프레스 설치와 최적화가 완료된 상태에서
블로그 초기 방문자를 확보하는 실전 유입 전략을 다룬다.

  • 검색 외 트래픽 소스 발굴
  • 커뮤니티 마케팅 전략
  • SNS 계정 브랜딩
  • 자동화 도구 활용
  • 유입 분석 및 최적화

서버 운영의 기술적 문제를 해결했다면,
이제 방문자를 모으는 마케팅 전략이 필요하다. 🚀

댓글 남기기

댓글 남기기

광고 차단 알림

광고 클릭 제한을 초과하여 광고가 차단되었습니다.

단시간에 반복적인 광고 클릭은 시스템에 의해 감지되며, IP가 수집되어 사이트 관리자가 확인 가능합니다.