약 9분 읽기
기존에는 상상도 못 했던 일들이 제 손 안에서 현실이 되었습니다. 맞벌이 부부로 서울에서 정신없이 살아가면서도, 개인 서버를 직접 구축하고 운영하는 건 제게 큰 즐거움이자 도전이었습니다. 특히 Docker라는 강력한 도구를 활용해 10개 이상의 서비스를 띄우고 1년이라는 시간을 보낸 지금, 그 경험을 여러분과 나누고자 합니다.
왜 개인 서버인가? 그리고 Docker인가?
처음에는 단순히 ‘나만의 공간’을 갖고 싶다는 막연한 생각에서 시작했습니다. IT 분야에서 RPA 엔지니어로 일하면서 자동화와 프로세스 효율화에 대한 깊은 이해를 쌓았지만, 제 개인적인 영역에서는 직접 무언가를 만들어보고 싶다는 욕구가 강했습니다. 퇴근 후, 혹은 주말에 틈틈이 제 손으로 서버를 구축하고 서비스를 올리는 과정 자체가 저에게는 큰 성취감을 안겨주었습니다.
수많은 선택지 중에서 Docker를 선택한 이유는 명확했습니다. RPA 엔지니어로서 다양한 환경에서 솔루션을 배포하고 운영하는 경험을 해왔기에, 컨테이너화의 이점을 누구보다 잘 알고 있었습니다. 각 서비스가 독립적인 환경에서 실행되므로 의존성 충돌 걱정 없이 여러 서비스를 한 서버에 올릴 수 있다는 점, 그리고 설정 파일 몇 줄로 언제든 동일한 환경을 재구축할 수 있다는 점은 제게 매력적이었습니다. 특히 집에서 개인 서버를 운영하는 만큼, 리소스 관리와 배포의 용이성은 필수적이었습니다.
10개 이상의 서비스, 무엇을 돌리고 있었나?
1년이라는 시간 동안 제 개인 서버 위에는 꽤 많은 서비스들이 자리 잡았습니다. 처음에는 WordPress 블로그와 개인 NAS 용도로 시작했지만, 욕심이 생기면서 점차 늘어나 결국 10개를 훌쩍 넘겼습니다. 제가 주로 운영했던 서비스들은 다음과 같습니다:
- WordPress: 제 블로그를 운영하는 핵심 서비스입니다. 개인 서버에서 운영하면서 자유로운 커스터마이징과 데이터 소유권을 확보할 수 있었습니다.
- n8n: 워크플로우 자동화 툴입니다. 처음에는 제 개인적인 반복 작업을 자동화하는 데 사용했지만, 지금은 블로그 글 자동 발행 시스템 구축에도 활용하고 있습니다. Gemini API와 연동하여 콘텐츠를 생성하고 n8n으로 발행하는 시스템은 제가 직접 구축한 자랑거리 중 하나입니다.
- Home Assistant: 홈 IoT 구축의 중심입니다. 집안의 스마트 기기들을 통합 관리하고 자동화 규칙을 설정하는 데 사용합니다. 맞벌이 부부로서 집을 비울 때도 상황을 파악하고 제어할 수 있다는 점이 매력적입니다.
- MariaDB: 다양한 서비스들의 데이터베이스 역할을 합니다. WordPress, n8n 등 여러 애플리케이션이 이 데이터베이스를 공유하며 사용합니다.
- Portainer: Docker 컨테이너를 쉽게 관리할 수 있도록 도와주는 웹 UI입니다. 복잡한 Docker 명령어 없이 직관적인 인터페이스로 컨테이너를 관리할 수 있어 초보자에게도 유용합니다.
- Nextcloud: 개인 클라우드 스토리지입니다. 사진, 문서 등 중요한 파일들을 안전하게 보관하고 언제 어디서든 접근할 수 있도록 합니다. ISA 계좌로 ETF 자동 투자하는 데이터 백업 용도로도 사용합니다.
- Gitea: 개인 Git 서버입니다. 공개하기 부담스러운 개인 프로젝트 코드를 관리하는 데 사용합니다.
- Pi-hole: 네트워크 전체의 광고를 차단하는 DNS 서버입니다. 집안의 모든 기기에서 광고 없이 웹 서핑을 즐길 수 있습니다.
- Syncthing: 여러 기기 간 파일 동기화 툴입니다. PC와 모바일 기기 간의 파일 공유를 편리하게 만들어 줍니다.
- Vaultwarden: Bitwarden의 경량 구현체로, 개인 비밀번호 관리자 역할을 합니다.
이 외에도 몇 가지 테스트용 컨테이너와 유틸리티들이 더 있었지만, 이 정도면 제 서버가 꽤나 바쁘게 돌아가고 있음을 짐작하실 수 있을 겁니다.
1년 동안 겪었던 좌충우돌: 메모리 관리와 리버스 프록시
모든 것이 순탄했던 것은 아닙니다. 특히 10개 이상의 컨테이너가 동시에 실행되면서 가장 크게 부딪혔던 문제는 바로 메모리 관리였습니다. 처음에는 충분하다고 생각했던 서버의 RAM이 금세 부족해지는 현상을 겪었습니다. 특히 WordPress의 플러그인이 많아지거나, n8n에서 복잡한 워크플로우를 실행할 때, 혹은 Home Assistant에서 많은 기기들을 연결했을 때 메모리 사용량이 급증했습니다.
삽질의 시작이었습니다. 어떤 컨테이너가 메모리를 많이 잡아먹는지 파악하기 위해 `docker stats` 명령어를 수시로 확인하고, 각 서비스 설정을 튜닝하는 데 많은 시간을 보냈습니다. 불필요한 플러그인을 삭제하고, WordPress의 캐싱 설정을 최적화했으며, n8n의 워크플로우 실행 빈도를 조절하기도 했습니다. 결국에는 서버의 RAM을 증설하는 선택을 할 수밖에 없었습니다. 개인 서버 운영의 묘미는 이렇게 하나씩 문제를 해결해나가는 과정에 있다고 생각합니다.
또 다른 주요 과제는 nginx 리버스 프록시 설정이었습니다. 여러 웹 서비스를 운영하다 보니 각 서비스마다 다른 포트를 할당해야 했고, 외부에서 접속할 때는 이 포트 번호를 일일이 기억해야 하는 불편함이 있었습니다. 이를 해결하기 위해 nginx를 리버스 프록시로 설정하여, 하나의 도메인으로 여러 서브 도메인이나 경로를 통해 각기 다른 서비스에 접속할 수 있도록 구성했습니다. 예를 들어, `blog.mydomain.com`으로는 WordPress에, `automation.mydomain.com`으로는 n8n에, `home.mydomain.com`으로는 Home Assistant에 접속하는 식입니다. 이 과정에서 SSL 인증서 설정(Let’s Encrypt)까지 함께 진행하며 보안 문제까지 신경 써야 했습니다. 처음에는 설정 파일이 복잡하게 느껴졌지만, 몇 번의 시도 끝에 익숙해질 수 있었습니다.
안정적인 운영을 위한 백업 전략
개인 서버를 운영하면서 가장 중요하게 생각하는 것 중 하나는 바로 데이터의 안전입니다. 아무리 잘 구축한 서비스라도 데이터가 유실되면 큰 문제입니다. 그래서 저는 몇 가지 백업 전략을 수립하고 꾸준히 실행하고 있습니다.
- Docker 볼륨 백업: 각 서비스에서 사용하는 데이터는 Docker 볼륨에 저장됩니다. 저는 정기적으로 이 볼륨들을 압축하여 별도의 저장 공간(개인 NAS 또는 클라우드 스토리지)에 백업하고 있습니다.
- 데이터베이스 덤프: MariaDB와 같은 데이터베이스는 덤프(dump) 기능을 활용하여 주기적으로 백업 파일을 생성합니다. 이 백업 파일 역시 외부 저장소에 안전하게 보관합니다.
- VM 백업 (선택 사항): 만약 서버를 가상머신(VM)으로 운영하고 있다면, VM 자체를 주기적으로 스냅샷하거나 백업하는 것도 좋은 방법입니다. 저는 현재 베어메탈에 Docker를 직접 설치하여 사용하고 있지만, 필요에 따라 VM 환경을 고려할 수도 있습니다.
- 자동화된 백업 스크립트: 이 모든 백업 과정을 수동으로 하기에는 번거롭기 때문에, 간단한 쉘 스크립트를 작성하여 cron 작업을 통해 주기적으로 실행되도록 설정했습니다.
백업은 ‘혹시 모를’ 상황에 대비하는 가장 확실한 방법입니다. 저는 이 백업 파일들을 주기적으로 확인하고 복구 테스트까지 진행하며 만일의 사태에 대비하고 있습니다.
앞으로의 계획: 더 똑똑한 자동화와 효율적인 관리
1년이라는 시간 동안 Docker를 이용한 개인 서버 운영은 제게 많은 것을 가르쳐주었습니다. 기술적인 지식뿐만 아니라 문제 해결 능력, 끈기, 그리고 ‘나만의 것’을 만들어가는 즐거움까지 얻었습니다. 앞으로도 제 개인 서버는 계속 진화할 것입니다.
첫째, n8n과 Gemini를 활용한 자동화 시스템을 더욱 고도화할 계획입니다. 단순히 글을 발행하는 것을 넘어, 다양한 소스의 정보를 분석하고 요약하여 새로운 콘텐츠를 생성하는 등 더 복잡하고 창의적인 자동화 워크플로우를 구축해보고 싶습니다. ISA 계좌의 ETF 투자 현황을 분석하여 인사이트를 도출하는 시스템도 고려 중입니다.
둘째, 홈 IoT 시스템을 더욱 확장하고 싶습니다. 현재 Home Assistant를 중심으로 구축된 시스템에 새로운 스마트 기기들을 추가하고, 더 정교한 자동화 규칙을 만들어 우리 집을 더욱 스마트하고 편리하게 만들고 싶습니다. 맞벌이 부부로서 퇴근 후 집안일을 줄여주는 자동화는 정말 큰 도움이 됩니다.
셋째, 서버 운영의 효율성을 높이기 위한 노력을 계속할 것입니다. Docker Compose를 활용하여 서비스 배포 및 관리를 더욱 간결하게 만들고, Prometheus와 Grafana 같은 도구를 도입하여 서버 성능 모니터링을 강화할 계획입니다. 또한, 개인 서버 운영 비용 절감을 위해 더 효율적인 하드웨어 구성이나 클라우드 서비스 활용 방안도 꾸준히 탐색할 것입니다.
개인 서버 운영은 단순히 기술적인 취미를 넘어, 제 삶을 더욱 풍요롭게 만드는 도구입니다. 여러분도 혹시 나만의 공간에서 무언가를 만들어보고 싶다는 생각을 하고 있다면, Docker와 함께 시작해보는 것은 어떨까요? 처음에는 어렵게 느껴질 수 있지만, 그 과정에서 얻는 성취감과 즐거움은 분명 여러분을 만족시킬 것입니다.