집에서 쓰지 않고 굴러다니던 라즈베리파이와 미니PC로 홈서버를 직접 만들어 봤습니다.
처음에는 "그냥 파일 몇 개 저장해 두는 용도인데 어려워 봐야 얼마나 어렵겠어" 하고 가볍게 생각했습니다.
그런데 막상 손을 대 보니 어떤 기기를 고를지부터 네트워크 설정, 백업을 어떻게 할지까지 생각보다 훨씬 넓은 부분을 건드려야 했습니다. 파일을 저장하는 기능 하나를 위해서도 전원, 저장장치, 권한, 공유기, 보안까지 줄줄이 신경 써야 한다는 걸 하나씩 겪으면서 알게 됐습니다.
이 글은 잘 정리된 설명서가 아닙니다. 제가 실제로 겪은 시행착오를 일어난 순서대로 적어 둔 기록에 가깝습니다.
홈서버를 처음 만들어 보려는 분들께 조금이나마 참고가 됐으면 합니다.
특히 저처럼 네트워크나 리눅스에 별로 익숙하지 않은 상태에서 시작하시는 분이라면, 여기 적은 시행착오 가운데 상당 부분이 그대로 겹칠 거라고 생각합니다. 어디서 막히는지 미리 알고 시작하는 것만으로도 시간을 꽤 아낄 수 있을 겁니다.

① 왜 시작했는지, 그리고 기기를 고르면서부터 겪은 고민
시작한 이유는 단순했습니다.
휴대폰, 노트북, 회사 PC처럼 여러 기기에 흩어져 있는 사진과 문서를 한곳에 모아 두고 싶었습니다.
그리고 클라우드 서비스에 매달 구독료를 계속 내는 것도 아깝다는 생각이 들었습니다. 저장할 파일은 해마다 늘어나는데, 그만큼 요금제도 계속 올려야 한다는 게 부담스러웠습니다.
처음에는 라즈베리파이 하나면 충분할 줄 알았습니다. 그런데 막상 알아보니 라즈베리파이는 USB로 외장 저장장치를 연결했을 때 전송 속도에 한계가 있었습니다. 특히 여러 기기가 한꺼번에 접속해서 큰 파일을 주고받을 때는 속도가 막히는 게 눈에 띄게 느껴졌습니다.
그래서 결국 역할을 나누기로 했습니다. 파일 동기화나 간단한 웹훅 처리처럼 가벼운 일은 라즈베리파이에 맡기고, 실제로 큰 파일을 저장하는 일은 중고로 구한 미니PC에 SSD를 달아서 처리하는 구조로 방향을 바꿨습니다.
첫 번째 시행착오는 여기서부터 시작됐습니다. 미니PC에 리눅스를 새로 설치하려고 했는데, 오래된 기종이라 최신 버전 리눅스 설치 파일로는 부팅조차 되지 않았습니다. 원인을 찾아보니 컴퓨터가 켜지는 방식인 UEFI와 예전 방식인 레거시 바이오스의 차이 때문이었습니다. 설치용 USB를 다시 만들면서 부팅 방식을 직접 맞춰 주고 나서야 겨우 설치 화면까지 들어갈 수 있었습니다. 별것 아닌 것 같은 문제였지만, 이것 하나 때문에 반나절을 그냥 날렸습니다.
두 번째로 부딪힌 문제는 전원 관리였습니다. 홈서버는 하루 24시간 켜 두는 걸 전제로 하는 기기입니다. 그래서 정전이나 아주 짧은 순간의 전원 끊김이 파일시스템(디스크에 파일을 저장하고 관리하는 구조) 손상으로 이어질 수 있다는 걸 뒤늦게 알게 됐습니다.
실제로 설정하던 도중에 실수로 전원 케이블을 건드려서 기기가 갑자기 꺼진 적이 있었습니다. 다시 켰더니 파일시스템 오류 때문에 부팅이 되지 않았고, 그제야 이 문제가 얼마나 심각한지 몸으로 느꼈습니다. 파일시스템을 복구하는 명령어로 겨우 되살리긴 했지만, 그 과정에서 설정 파일 일부가 깨져서 처음부터 다시 설정해야 하는 부분도 있었습니다. 이 일을 겪은 뒤로는 저렴한 무정전 전원장치(UPS)를 하나 구해서, 갑자기 전기가 나가도 기기를 안전하게 끌 시간은 벌 수 있도록 구성을 바꿨습니다.
세 번째는 부품끼리 잘 맞지 않는 문제였습니다. 중고로 구한 미니PC와 새로 산 SSD를 같이 쓰니, 특정 절전 모드에서 SSD를 제대로 알아보지 못하는 오류가 가끔 생겼습니다. 처음에는 SSD가 불량인 줄 알고 교환까지 고민했습니다. 여러 커뮤니티 글을 뒤진 끝에 바이오스에서 특정 절전 옵션을 꺼야 한다는 정보를 찾았고, 그 설정을 바꾸고 나서야 문제가 완전히 사라졌습니다. 혼자 붙잡고 있을 때는 답이 안 보이다가도, 비슷한 일을 겪은 사람이 남긴 글 하나로 몇 시간 동안 막혀 있던 게 한 번에 풀리는 순간이었습니다. 제가 이렇게 시행착오를 기록으로 남기는 것도, 그때 도움을 받았던 경험 때문입니다.
② 실제로 설정하면서 부딪힌 문제들
기기 쪽이 정리되고 나니, 이번엔 소프트웨어 쪽에서 시행착오가 시작됐습니다.
첫 번째, 파일 공유 설정에서 한참을 헤맸습니다. 윈도우 PC에서 편하게 파일을 열어 보려면 SMB라는 파일 공유 방식을 설정해야 했습니다. 그런데 처음엔 권한 설정을 제대로 몰라서, 다른 기기에서 폴더는 보이는데 파일을 열거나 저장할 수는 없는 상황이 계속 반복됐습니다. 알고 보니 리눅스 사용자 권한과 SMB 자체 계정 권한이 따로 관리되는 거였는데, 그걸 모르고 계속 리눅스 파일 권한(chmod, chown)만 만지고 있었습니다. 나중에 SMB 설정 파일에서 사용자별 접근 권한을 따로 지정해야 한다는 걸 알고 나서야 문제가 풀렸습니다.
두 번째, 외장 저장장치가 재부팅할 때마다 연결되는 위치가 바뀌는 문제였습니다. 처음엔 그냥 되는 대로 연결해서 썼는데, 재부팅할 때마다 디스크 순서가 달라지면서 엉뚱한 디스크가 엉뚱한 폴더에 연결(마운트)되는 사고가 몇 번 있었습니다. 한 번은 이 문제 때문에 공유 폴더가 텅 비어 있는 것처럼 보여서, 몇 시간 동안 데이터가 다 날아간 줄 알고 식은땀을 흘린 적도 있습니다. 원인은 디스크 이름이 아니라, 디스크마다 붙어 있는 고유 번호인 UUID를 기준으로 연결 설정을 해야 한다는 걸 몰랐던 탓이었습니다. 그 뒤로는 반드시 UUID 기준으로 연결 위치를 고정해 두는 걸 기본 원칙으로 삼았습니다.
세 번째, 도커로 여러 서비스를 올리다 보니 포트 충돌이 자주 났습니다. 파일 공유 서비스, 사진 정리 서비스, 간단한 웹 대시보드까지 이것저것 올리다 보니 각 서비스가 쓰는 포트(외부에서 들어오는 통로 번호)가 계속 겹쳤습니다. 처음엔 충돌이 날 때마다 임시로 포트 번호만 바꿔서 넘어갔는데, 나중에는 어떤 서비스가 어떤 포트를 쓰는지조차 헷갈리는 상황이 됐습니다. 결국 서비스별 포트 목록을 따로 문서로 정리해 두고 나서야 이 혼란이 정리됐습니다.
네 번째, 공유기 포트포워딩과 외부 접속 설정에서도 애를 먹었습니다. 집 밖에서도 서버에 들어가고 싶어서 포트포워딩(외부에서 들어온 연결을 집 안 특정 기기로 넘겨주는 설정)을 했는데, 계속 실패했습니다. 알고 보니 통신사 공유기 뒤에 제 개인 공유기가 한 번 더 붙어 있는 이중 공유기 구조였습니다. 포트포워딩을 통신사 장비와 개인 공유기 양쪽에 각각 설정해야 한다는 걸 알기까지, 관련 설정 화면만 몇 시간을 들여다봤습니다.
다섯 번째, 인터넷 주소가 바뀌는 유동 IP 문제도 뒤늦게 알게 됐습니다. 며칠 동안 잘 되던 외부 접속이 어느 날 갑자기 안 되길래, 설정이 잘못됐나 싶어 한참을 뒤졌습니다. 알고 보니 통신사에서 나눠 주는 공인 IP가 주기적으로 바뀌는 유동 IP 방식이었습니다. 결국 IP가 바뀌어도 항상 같은 주소로 들어갈 수 있게 해 주는 DDNS(동적 도메인 네임) 서비스를 연결하고, 일정 시간마다 자동으로 주소를 갱신하는 스크립트를 등록하고 나서야 이 문제가 해결됐습니다.
여섯 번째, 시간대(타임존) 설정을 빠뜨려서 로그 시간이 전부 어긋난 적도 있었습니다. 기본 설치 파일의 시간대가 한국 시간과 달라서, 처음 며칠 동안 쌓인 로그의 시각이 실제 시각과 몇 시간씩 차이가 났습니다. 이걸 모른 채로 문제가 생긴 시점을 찾다가 엉뚱한 시간대의 로그만 계속 들여다본 적도 있었습니다. 그 뒤로는 새 기기를 설치하면 가장 먼저 시간대부터 맞추는 걸 습관으로 만들었습니다.
③ 시행착오 끝에 정리한 홈서버 운영 노하우
몇 달 동안 이것저것 겪고 나서 정리한 원칙들을 나눠 보겠습니다. 하나하나는 작은 습관이지만, 전부 실제로 한 번씩 문제를 겪고 나서 만든 것들입니다.
백업은 꼭 다른 저장장치에, 그리고 최소 두 군데 이상 해 둔다.
홈서버 자체가 백업의 마지막 보관 장소가 되면 안 된다는 걸 뒤늦게 깨달았습니다.
서버 디스크가 고장 나는 순간, 원본과 백업이 한꺼번에 사라지는 셈이기 때문입니다.
그 뒤로는 서버 안에서도 다른 디스크에 한 번 더 백업하고, 주기적으로 외장하드나 클라우드에 한 번 더 백업하는 이중 구조를 기본으로 삼았습니다. 클라우드 구독료를 아끼려고 시작한 일이었지만, 정말 잃어버리면 안 되는 파일만큼은 다른 곳에도 한 벌 더 두는 게 맞다고 생각이 바뀌었습니다.
열과 소음 관리는 처음 구성할 때부터 생각해 둔다.
처음엔 케이스 없이 그냥 선반 위에 올려 두고 썼습니다. 그런데 여름이 되자 온도가 계속 올라가서, 시스템이 갑자기 느려지거나 저절로 재부팅되는 문제가 생겼습니다. 간단한 팬 하나를 달고 바람이 잘 통하는 자리로 옮기는 것만으로도 안정성이 눈에 띄게 좋아졌습니다.
외부에서 들어오는 포트는 최소한으로만 열고, 꼭 따로 인증을 붙인다.
밖에서 들어올 수 있게 열어 둔 포트는 그 자체로 공격 대상이 될 수 있다는 걸 배웠습니다. 실제로 로그를 확인해 보니 모르는 IP에서 로그인을 반복해서 시도한 흔적이 남아 있었습니다. 그 뒤로는 필요 없는 포트는 모두 닫고, 꼭 필요한 서비스만 따로 인증 절차를 추가해서 열어 두는 방식으로 바꿨습니다.
설정을 바꾸면 그때그때 메모로 남긴다.
몇 달 전에 왜 이렇게 설정했는지 저조차 기억이 안 나서 당황한 적이 여러 번 있었습니다. 그 뒤로는 설정을 바꿀 때마다 날짜와 이유를 짧게라도 메모로 남기는 습관을 들였습니다. 이 습관 덕분에 나중에 문제가 생겼을 때 원인을 훨씬 빨리 찾을 수 있게 됐습니다.
소프트웨어 업데이트는 한 번에 몰아서 하지 않는다.
한동안 업데이트를 미뤄 두었다가 몇 달 치를 한꺼번에 적용한 적이 있었습니다. 그러다 특정 서비스의 설정 방식이 통째로 바뀌면서 여러 서비스가 동시에 멈추는 사고가 났습니다. 그 뒤로는 조금 귀찮더라도 작은 업데이트를 자주 적용하고, 업데이트한 직후에는 주요 서비스가 제대로 돌아가는지 바로 확인하는 절차를 만들었습니다.
중요한 서비스와 시험 삼아 돌리는 서비스는 기기를 나눠서 돌린다.
처음엔 새로운 프로그램을 이것저것 서버 하나에 다 몰아넣고 테스트했습니다. 그런데 시험 삼아 설치한 프로그램 때문에, 정작 중요한 파일 공유 서비스까지 같이 멈춰 버리는 일이 있었습니다. 그 뒤로는 안정성이 중요한 서비스는 최대한 손대지 않는 메인 서버에 두고, 새로운 걸 시험해 보고 싶을 때는 따로 둔 라즈베리파이나 가상 환경에서 먼저 테스트하는 방식으로 역할을 나눴습니다.
모니터링은 대단하지 않아도 되니, 최소한 "살아 있는지"는 확인한다.
처음엔 서버가 며칠째 멈춰 있는데도 알아채지 못한 적이 있었습니다. 거창한 모니터링 도구까지는 아니더라도, 일정 시간마다 서버 상태를 확인해서 문제가 생기면 알림을 보내 주는 간단한 스크립트 하나만 돌려 둬도 이런 사고를 크게 줄일 수 있었습니다.
④ 마치며
작은 서버 하나 돌리는 것뿐인데도, 실제로 직접 부딪혀 보니 배울 게 정말 많았습니다.
특히 평소 업무에서는 잘 다루지 않던 네트워크나 하드웨어 쪽을 직접 만져 보면서, 그동안 당연하게 여기던 것들이 사실은 얼마나 많은 설정과 신경 쓴 부분 위에서 돌아가고 있었는지 새삼 느끼게 됐습니다. 클라우드 서비스에서 버튼 몇 번이면 되던 일이, 직접 해 보면 전원·디스크·권한·네트워크·보안까지 하나하나 챙겨야 하는 일이었습니다.
앞으로도 서비스를 하나씩 늘려 가면서 겪는 시행착오를 계속 기록해 볼 생각입니다. 비슷한 길을 가시는 분들께 이 기록이 시행착오를 조금이라도 줄이는 데 도움이 됐으면 합니다.
다음 글에서는 도커 컨테이너별 포트와 볼륨 구성을 실제 설정 파일과 함께 더 자세히 정리해 보겠습니다.