홈 서버를 직접 운영하다 보면 아무런 예고 없이 서비스가 작동하지 않는 상황을 한 번쯤 경험하게 됩니다. 저 역시 처음에는 웹 페이지가 열리지 않으면 무조건 Docker나 프로그램에 문제가 생겼다고 생각하고 이것저것 설정을 변경하곤 했습니다. 하지만 원인을 하나씩 확인하다 보니 실제 문제는 네트워크였거나 저장공간 부족, 컨테이너 중지, 설정 변경 등 전혀 다른 곳에서 발생한 경우도 있었습니다. 특히 홈 서버는 여러 서비스를 하나의 컴퓨터에서 함께 운영하는 경우가 많기 때문에 문제가 발생했을 때 무작정 설정을 변경하기보다는 일정한 순서대로 확인하는 것이 중요합니다. 이번 글에서는 홈 서버에 문제가 발생했을 때 초보자가 어떤 순서로 원인을 확인하면 좋은지 서버, 네트워크, Docker, 서비스, 저장장치 순서로 쉽게 정리해 보겠습니다.
홈 서버 장애가 발생하면 먼저 증상을 확인한다
문제가 발생했을 때 가장 먼저 해야 할 일은 무엇이 작동하지 않는지 정확하게 확인하는 것입니다.
예를 들어 서버에 접속 자체가 되지 않는 것인지, 서버에는 접속할 수 있지만 특정 서비스만 사용할 수 없는 것인지 구분해야 합니다.
모든 서비스가 동시에 작동하지 않는다면 서버나 네트워크처럼 공통적으로 사용하는 부분에 문제가 있을 가능성이 있습니다.
반대로 여러 서비스 중 하나만 작동하지 않는다면 해당 서비스의 설정이나 Docker 컨테이너에 문제가 있을 가능성을 먼저 생각할 수 있습니다.
따라서 처음부터 복잡한 설정을 확인하기보다 문제가 발생한 범위를 좁히는 것이 좋습니다.
첫 번째로 서버 자체의 상태를 확인한다
가장 먼저 확인할 부분은 서버 컴퓨터 자체가 정상적으로 작동하고 있는지입니다.
전원이 켜져 있는지 확인하고 서버 운영체제가 정상적으로 실행되고 있는지도 살펴봅니다.
최근에 서버가 재부팅된 적이 있는지도 확인해 보는 것이 좋습니다.
특히 정전이나 전원 문제 이후에는 서버가 정상적으로 부팅되지 않았을 가능성도 있습니다.
화면이나 원격 접속을 통해 서버에 접근할 수 있다면 운영체제 자체는 작동하고 있을 가능성이 높습니다.
반대로 서버에 아예 접근할 수 없다면 애플리케이션 문제보다 먼저 전원과 운영체제 상태를 확인해야 합니다.
서버가 정상이라면 네트워크를 확인한다
서버가 정상적으로 켜져 있는데 외부에서 접속되지 않는다면 네트워크 상태를 확인합니다.
집 안의 다른 기기에서는 서버에 접속할 수 있는지 확인해 보는 것도 좋은 방법입니다.
예를 들어 같은 네트워크에 연결된 컴퓨터에서는 서비스가 정상적으로 열리는데 외부에서만 접속되지 않는다면 서버 프로그램 자체보다는 외부 접속과 관련된 설정을 확인해야 할 수 있습니다.
반대로 집 안에서도 서버에 접속할 수 없다면 공유기나 서버의 네트워크 설정을 먼저 확인하는 것이 좋습니다.
이처럼 내부 접속과 외부 접속을 나누어 확인하면 문제의 범위를 빠르게 좁힐 수 있습니다.
서버의 IP 주소가 변경되지 않았는지 확인한다
홈 서버에서 의외로 자주 발생할 수 있는 문제가 IP 주소 변경입니다.
공유기에서 서버에 할당하는 내부 IP 주소가 변경되면 기존에 사용하던 주소로 접속하지 못할 수 있습니다.
특히 서버의 내부 주소를 기준으로 여러 설정을 구성했다면 IP 주소가 변경되었을 때 여러 서비스가 동시에 영향을 받을 수 있습니다.
따라서 접속이 갑자기 되지 않는다면 서버의 현재 네트워크 정보를 확인하고 기존에 사용하던 주소와 동일한지 비교하는 것이 좋습니다.
홈 서버를 장기간 운영한다면 내부 네트워크에서 서버의 주소가 안정적으로 유지되도록 구성하는 것도 중요합니다.
Docker가 정상적으로 실행되고 있는지 확인한다
서버와 네트워크가 정상이라면 Docker를 사용하는 환경에서는 Docker 상태를 확인합니다.
Docker 자체가 정상적으로 실행되고 있는지 확인하고 필요한 컨테이너가 실행 중인지 살펴봅니다.
서버가 재부팅된 이후 특정 컨테이너가 자동으로 시작되지 않았을 수도 있습니다.
또한 컨테이너가 실행 중으로 표시되더라도 내부 프로그램에 문제가 발생했을 가능성이 있기 때문에 컨테이너의 상태만 보고 정상이라고 판단해서는 안 됩니다.
서비스에 문제가 있다면 해당 컨테이너의 로그를 확인해 오류가 발생했는지도 함께 살펴보는 것이 좋습니다.
특정 컨테이너만 문제가 있다면 범위를 좁힌다
여러 Docker 서비스를 운영하고 있는데 특정 서비스 하나만 작동하지 않는다면 서버 전체를 수정하기보다 해당 컨테이너를 중심으로 확인하는 것이 좋습니다.
컨테이너가 실행 중인지 확인하고 최근에 설정을 변경한 부분이 있는지도 살펴봅니다.
환경 설정이나 저장공간 연결에 문제가 있을 수도 있습니다.
특히 업데이트 직후 문제가 발생했다면 프로그램 버전이나 설정 변경으로 인해 문제가 발생했을 가능성도 생각해야 합니다.
이런 경우에는 문제가 발생하기 직전에 어떤 작업을 했는지 기록을 되돌아보는 것이 도움이 됩니다.
로그를 확인하면 원인을 찾는 데 도움이 된다
홈 서버에서 문제가 발생했을 때 로그는 매우 중요한 단서가 됩니다.
프로그램이나 Docker 컨테이너에서 오류가 발생하면 관련 내용이 로그에 기록될 수 있습니다.
로그를 확인할 때는 모든 내용을 처음부터 이해하려고 하기보다 문제가 발생한 시간대를 먼저 찾는 것이 좋습니다.
그 시간대에 반복적으로 나타나는 오류나 경고 메시지가 있는지 확인합니다.
최근에 서비스를 업데이트하거나 설정을 변경했다면 해당 작업 이후부터 오류가 발생했는지도 비교해 봅니다.
로그에 오류가 있다고 해서 반드시 그 내용이 현재 문제의 직접적인 원인이라고 단정할 수는 없지만, 원인을 좁히는 데 유용한 정보를 제공할 수 있습니다.
저장공간 부족도 확인한다
홈 서버에서 생각보다 자주 확인해야 하는 부분이 저장공간입니다.
사진이나 동영상 같은 파일이 계속 추가되거나 Docker 컨테이너와 로그가 증가하면 저장공간이 예상보다 빠르게 줄어들 수 있습니다.
저장공간이 거의 가득 차면 프로그램이 새로운 데이터를 저장하지 못하거나 서비스가 정상적으로 작동하지 않을 수 있습니다.
따라서 문제가 발생했을 때 저장장치의 사용량도 함께 확인하는 것이 좋습니다.
특히 갑자기 서비스가 여러 개 이상해졌다면 저장공간 부족 여부를 확인해 보는 것이 좋습니다.
메모리 사용량도 확인한다
메모리 부족 역시 서비스에 영향을 줄 수 있습니다.
Docker를 이용해 여러 서비스를 동시에 실행하면 각각의 프로그램이 일정한 메모리를 사용할 수 있습니다.
서비스가 증가하면서 전체 메모리 사용량이 높아질 수 있고 특정 프로그램이 예상보다 많은 메모리를 사용하는 경우도 있습니다.
평소에는 문제가 없다가 특정 서비스를 추가한 이후 서버가 불안정해졌다면 메모리 사용량을 확인해 볼 필요가 있습니다.
이때 무조건 메모리를 늘리기보다 어떤 서비스가 많은 자원을 사용하는지 먼저 확인하는 것이 좋습니다.
CPU 사용량이 갑자기 높아졌다면
CPU 사용량이 계속 높게 유지되는 경우에도 서버의 반응이 느려지거나 일부 서비스에 영향을 줄 수 있습니다.
대용량 파일을 처리하거나 미디어를 변환하는 작업처럼 CPU를 많이 사용하는 작업이 실행되고 있을 수도 있습니다.
반대로 특별한 작업을 하지 않았는데 CPU 사용량이 계속 높다면 특정 프로그램에 문제가 발생했을 가능성도 있습니다.
이 경우 현재 실행 중인 서비스와 작업을 확인하고 어떤 프로그램이 CPU 자원을 많이 사용하고 있는지 확인하는 것이 좋습니다.
최근에 변경한 설정을 되돌아본다
문제가 발생하기 직전에 서버에 어떤 변경을 했는지 생각해 보는 것도 매우 중요합니다.
새로운 Docker 컨테이너를 추가했거나 기존 서비스의 설정을 변경했을 수도 있습니다.
운영체제나 프로그램을 업데이트했거나 네트워크 설정을 변경했을 수도 있습니다.
변경 직후 문제가 발생했다면 해당 변경 사항이 원인일 가능성을 고려할 수 있습니다.
다만 아무런 기록 없이 설정을 무작정 되돌리는 것보다는 무엇을 변경했는지 먼저 확인하고 하나씩 원인을 검증하는 것이 좋습니다.
외부 접속 문제와 내부 접속 문제를 구분한다
홈 서버에서 특히 중요한 부분은 내부 접속과 외부 접속을 구분하는 것입니다.
집 안의 같은 네트워크에서는 서비스가 정상적으로 작동하는데 외부에서만 접속할 수 없다면 서버 내부의 프로그램보다 외부 연결 구성을 확인해야 할 가능성이 높습니다.
반대로 집 안에서도 접속되지 않는다면 서버나 Docker, 애플리케이션 자체의 문제일 가능성을 먼저 확인할 수 있습니다.
이 차이를 구분하면 문제를 해결하기 위해 확인해야 할 범위를 크게 줄일 수 있습니다.
리버스 프록시를 사용하는 경우 확인할 부분
Nginx 같은 리버스 프록시를 사용하는 환경에서는 문제가 발생했을 때 확인해야 할 부분이 하나 더 늘어납니다.
실제 애플리케이션은 정상적으로 실행되고 있지만 리버스 프록시 설정 문제 때문에 외부에서 접속되지 않을 수도 있습니다.
이 경우 애플리케이션과 리버스 프록시를 따로 확인해야 합니다.
먼저 해당 서비스가 내부에서 정상적으로 작동하는지 확인한 뒤 리버스 프록시를 통해 접근할 때만 문제가 발생하는지 비교하면 원인을 찾기 쉽습니다.
SSL이나 도메인 설정도 확인한다
HTTPS와 도메인을 사용하는 홈 서버라면 인증서나 도메인 설정도 문제의 원인이 될 수 있습니다.
특정 서비스만 접속되지 않는다면 도메인 설정이 올바른지 확인하고 인증서와 관련된 오류가 있는지도 살펴보는 것이 좋습니다.
최근에 도메인이나 인증서 관련 설정을 변경했다면 해당 변경 사항을 함께 확인해야 합니다.
이때 서버 자체가 작동하지 않는 것과 도메인을 통한 접속만 실패하는 것은 서로 다른 문제라는 점을 기억하면 좋습니다.
문제가 해결되었다면 원인을 기록한다
문제를 해결한 뒤에는 단순히 끝내지 말고 원인을 간단하게 기록해 두는 것을 추천합니다.
예를 들어 특정 날짜에 Docker 컨테이너가 종료되었고 로그를 확인한 결과 설정 오류를 발견했다는 식으로 기록할 수 있습니다.
또는 저장공간이 부족해서 서비스가 정상적으로 작동하지 않았다는 내용을 남겨둘 수도 있습니다.
이런 기록이 쌓이면 나중에 비슷한 문제가 발생했을 때 훨씬 빠르게 대응할 수 있습니다.
처음에는 간단한 메모만 남겨도 충분합니다.
초보자를 위한 장애 확인 순서
홈 서버에 문제가 발생했다면 다음과 같은 순서로 확인하면 좋습니다.
먼저 서버의 전원과 운영체제 상태를 확인합니다.
그다음 네트워크 연결과 내부 IP 주소를 확인합니다.
이후 Docker가 정상적으로 실행되고 있는지 확인합니다.
문제가 발생한 컨테이너의 상태와 로그를 살펴봅니다.
그다음 저장공간과 메모리, CPU 사용량을 확인합니다.
최근 변경한 설정이나 업데이트가 있었다면 해당 부분을 다시 확인합니다.
마지막으로 특정 서비스나 도메인, 리버스 프록시, HTTPS처럼 서비스에 직접 연결된 설정을 확인합니다.
이러한 순서를 정해두면 문제가 발생했을 때 무작정 여러 설정을 변경하는 실수를 줄일 수 있습니다.
한 번에 여러 설정을 변경하지 않는다
장애를 해결할 때 가장 피해야 할 행동 중 하나는 여러 가지 설정을 동시에 변경하는 것입니다.
문제가 해결되더라도 어떤 변경 때문에 정상적으로 작동하게 되었는지 알 수 없기 때문입니다.
또 다른 문제가 발생했을 때 원인을 추적하기도 어려워집니다.
가능하면 한 가지 원인을 확인하고 변경한 뒤 결과를 확인하는 방식으로 접근하는 것이 좋습니다.
시간이 조금 더 걸리더라도 장기적으로는 이런 방식이 서버 관리에 훨씬 도움이 됩니다.
홈 서버 장애 대응에서 가장 중요한 것은 기록이다
홈 서버를 오래 운영하다 보면 같은 종류의 문제가 반복해서 발생할 수 있습니다.
이때 과거에 어떤 문제가 있었고 어떻게 해결했는지 기록해 두었다면 문제 해결 시간이 크게 줄어듭니다.
서버 구성 정보와 설치한 서비스, 네트워크 구조, 주요 설정 위치 등을 간단하게 문서로 만들어 두는 것도 좋습니다.
특히 여러 Docker 서비스를 운영한다면 각 서비스가 어떤 역할을 하는지 기록해 두면 문제가 발생했을 때 확인할 대상을 빠르게 찾을 수 있습니다.
마무리
홈 서버를 직접 운영하면서 가장 당황스러운 순간은 평소 잘 작동하던 서비스가 갑자기 접속되지 않을 때였습니다. 처음에는 어디부터 확인해야 할지 몰라 여러 설정을 한꺼번에 변경하기도 했지만, 이런 방식은 오히려 문제의 원인을 찾기 어렵게 만들었습니다. 이후에는 서버 자체의 상태부터 네트워크, Docker, 컨테이너 로그, 저장공간과 메모리, 최근 변경 사항 순서로 하나씩 확인하면서 문제를 좁혀가는 방법을 사용하게 되었습니다. 홈 서버 장애는 반드시 복잡한 문제에서 발생하는 것은 아닙니다. 단순한 IP 변경이나 저장공간 부족처럼 기본적인 부분에서 문제가 생기는 경우도 있습니다. 따라서 문제가 발생했을 때 가장 중요한 것은 당황하지 않고 확인 범위를 단계적으로 좁혀가는 것입니다. 또한 문제가 해결된 뒤에는 원인과 해결 방법을 간단하게 기록해 두는 것이 좋습니다. 이런 기록이 쌓이면 나중에 비슷한 문제가 발생했을 때 훨씬 빠르게 대응할 수 있습니다. 홈 서버를 안정적으로 운영하고 싶다면 새로운 서비스를 설치하는 것만큼 문제가 발생했을 때 차근차근 원인을 찾아가는 방법을 익혀두는 것도 중요합니다.