본문으로 건너뛰기

홈 서버 구축하기 (2)

· 약 8분
Austin Lee
DevOps Engineer @ Allganize

홈 서버 구축하기 1편에서 이어지는 글입니다.
앞에서 홈 서버 초기 세팅을 어느 정도 완료했고, 그동안 추가로 고민했던 것은 파일 처리와 모니터링이었습니다.
그 외에도 몇 가지 고민했던 주제들을 적어 보려 합니다.

파일을 어디에 저장할까?

사실 홈 서버를 만드는 김에 파일과 DB를 모두 맥미니에 세팅하고 싶었습니다. 모든 요소를 홈 서버에 세팅해 보고 싶다는 욕심이었는데요, 하지만 크게 걸리는 점이 2가지가 있었습니다.

  1. 장애 상황이나 데이터가 날아갔을 때 리스크가 크다고 생각했습니다. (특히 DB)
  2. 그래도 파일은 로컬에 저장해 보려고 시도했었는데, 맥미니로 서버를 구축하다 보니 VM과 컨테이너로 겹겹이 싸인 구조가 되어서 마운트 설정도 여러 단계에 걸쳐야 하고, 권한 문제 등 여러 공수도 생겼습니다.

그래서 DB와 파일 저장소는 클라우드 서비스를 사용하기로 하고, 코드도 모두 변경했습니다.
특히 파일 저장소의 경우 Oracle Cloud를 통해 20GB까지 무료로 사용할 수 있어 유용하게 사용하고 있습니다.

모니터링 시스템 만들기

모니터링은 홈 서버를 시작하게 된 첫 번째 계기이기도 합니다. 아주 간단하더라도, 관련 경험을 늘리기 위해 반드시 직접 구축해 보고 싶었습니다.

하지만 아쉽게도 맥미니는 그렇게 사양이 높지 않고, 특히나 VM을 통해 Kubernetes를 구성하기 때문에 무거운 모니터링 시스템을 채택할 수는 없었습니다.
ELK는 시도할 엄두도 나지 않았고, kube-prometheus-stack을 시도했다가 홈 서버가 다운되기도 했습니다.

최종적으로 채택한 것은 loki-stack 기반의 PLG 스택입니다. PLG 스택은 로그의 메타데이터를 인덱싱 하기 때문에 ELK에 비해 메모리와 저장 공간을 적게 사용하고, 실제로도 매우 가벼웠습니다. Grafana, Prometheus를 포함한 필수 도구들을 Helm chart 하나로 동시에 설정할 수 있어 배포도 신경 쓸 부분이 적었습니다.

배포 후 Grafana 서비스를 외부로 노출시키고, 외부 템플릿을 사용하여 클러스터 상태와 로그를 조회할 수 있도록 구성하였습니다. 아래는 제가 사용한 대시보드 템플릿입니다.

Grafana

Argo CD를 조금 더 똑똑하게 사용하기

사실 이 부분은 1편을 진행할 때도 있었는데, 조금 더 다듬으면서 이번에 정리하게 되었습니다.

개인적으로 Argo CD는 UI가 정말 잘 되어 있는 편이라 생각하고, 실제로 이전에 Argo CD를 사용했던 회사에서도 UI를 통해 설정을 하는 경우가 매우 많았습니다.
하지만 저는 조금 더 코드 중점적으로 리소스를 관리하고 싶었고, UI에서는 기능이 다소 제한되어 있다는 점도 아쉬웠습니다.

그래서 제가 선택한 방식은 App of Apps 패턴입니다. 배포할 Application 리소스들을 폴더에 따로 모아 두고, 해당 폴더만 동기화시키면 모든 하위 리소스들이 설정에 따라 배포됩니다.
이 과정에서 개별 리소스 설정을 코드를 통해 관리할 수 있고, UI에서 사용할 수 없는 Multi-source 설정 같은 것도 가능하기 때문에 유연성이 높아졌습니다.

Argo CD - App of Apps

그 외

  • 1편에서 언급했던 아키텍처에 따른 빌드 문제를 이후에도 경험했습니다. 그래도 다른 언어들의 경우 Rust보다 과정도 쉽고, 참고자료는 많아서 다행히 쉽게 넘어간 것 같네요.
  • 파일 업로드 과정에서 용량 제한 이슈가 있었는데, 백엔드뿐 아니라 Ingress에서도 추가적인 설정이 필요했습니다.
  • 백엔드를 띄우는 것은 큰 문제가 없었고 이제 배치 작업을 구성해야 하는데, 특성상 강제 수작업이 필요한 단계도 있고 주기도 1주 이상으로 긴 편이라서 아직 고민 중입니다.

마치며

이로서 홈 서버를 구매하면서 해 보고 싶었던 큰 그림은 구현해 보았다고 생각합니다. 현재 단계에 접어들고 나서는 확실히 배포가 간단하고 편해졌습니다. 오히려 최근에는 홈 서버에 띄울 백엔드 코드를 작성하고, 사이드 프로젝트를 개편하는 데 더 많은 시간을 들이고 있습니다.

최근 정신없이 하루하루를 보내고 있어 진행이 늦어질 것 같지만, 당분간은 이전에 언급한 대로 현재 운영 중인 사이드 프로젝트를 전부 이관하는 것이 목표입니다.
또한 올해부터 회사에서 DevOps 업무를 조금씩 하게 되면서 실무에서만 경험할 수 있는 것들도 보이고, 위에서 언급한 문제 중 회사에서 해결해야 할 과제도 있습니다. 최대한 주어진 환경을 성장의 기회로 잘 활용하고, 홈 서버에도 적용할 수 있는 점이 있다면 도입하면서 홈 서버를 가꾸어 나가려고 합니다.

참고 자료