홈서버 구축 - 개요
개발자 혹은 IT 에 관심이 많은 사람이라면 한번쯤은 생각해보는 홈서버 구축에 대해서 포스팅 해보려고 한다.
우선 필자는 홈서버를 구축한지 거의 2년가까이 되었느데 이제서야 포스팅 하게되었다.
많은 블로그들을 보면 OS 설치, 각 통신사별 포트포워딩 정도만 포스팅이 많이 되어있는것 같다
해당 글에서는 자세한 설치 과정보다는 홈서버 구축시 하드웨어 선정, 아키텍처, 보안, 네트워크 구성 등 더 큰그림에서 포스팅할 예정이다.
생각보다 긴 글이 될것 같다,, 다만 홈서버 구축을 생각하는 사람들에게 대략적인 아키텍처 구상을 제공하고자 노력해보겠다.
하나의 칼럼처럼 가볍게 슥슥 읽으면 좋을것 같다.
홈서버 구축 시리즈
목차
1. 홈서버를 구축하게 된 이유
구축당시 사내에서 사용하던 서버가 가장큰 원인이었다. 고스펙 하드웨어가 아니었는데, 사내 메신저, 클라우드, 개발서버, DB, 터널링, Reverse Proxy 등등
굉장히 많은것들을 사용하고 있었고, 개발을 하는데 있어서 굉장히 편했고, 새로운 Tool 테스트를 하는게 너무 좋았기 때문이다(Kafka, Gitlab, Runner, Docker Swarm, ES Stack ....)
다만 중앙집중식인 만큼 사내서버가 다운되는날에는 업무에 지장이 생길만큼 상당한 부분을 차지하고 있었다.
이런환경에서 업무를 진행하다보니, 집에서도 나만의 서버를 사용하며 새로운 Tool 공부 및 도입테스트, 개발 테스트를 하고싶었다.
당시 쓰던 Mac Book Pro 는 Ram이 16GB 밖에 되지 않아서, Docker Container 여러개, Spring boot 서버 2개이상 돌리면 굉장히 버거워 했기 때문에 Spring boot 서버를 제외한 나머지 모든 (DB, Redis, Es, Kafka ...) Container 들을 서버에서 구동을 시키면 되겠다는 생각을 했다.
(글을 작성하는 현재는 M4 Pro 14core, ram 48gb 으로 굉장히 쾌적해 졌다.....)
클라우드를 사용하면 안될까?
홈서버를 직접 구축하는것보다, AWS, Oracle, Azure, GCP 같은 클라우드 서비스를 이용하는것이 편할것 같다는 생각이 있을것이다.
홈서버를 구축하는데 있어서 가장 중요한건 "금액", "성능" 이었다.
필자가 실제 사용했었던 Oracle, AWS 로 예시를 들어보겠다.
- Oracle Cloud 무료서버
Oralce Cloud 의 경우 1 core cpu, 1Gb Ram, 100Gb, 0.48Gbps 정도의 스펙을 제공해준다.
무료인만큼 성능을 기대하면 안되지만, MariaDB 하나만 실행시켜도 Ram 이 모자라 다운되는 상황이 많이 발생하였다.
그럼 DB 로 사용하기엔 적합하지 않으므로, 넘어가도록 하겠다(유료플랜은 고려하지 않았다.)
- AWS
전세계적으로 많이 사용하는 AWS 의 경우 무료티어는 진작에 종료되었고, 가장 많이 사용하는
t2.medium 2 core cpu, 4Gb Ram 의 경우 시간당 100원, 한달 대략 7~8만원 정도 부과되고 사용량에 따라
금액이 +a 가 되었기에 유료로 사용하기에는 좀 부담스러웠다.
(saving plan 으로 사용하더라도 3-4만원 이상 부과된다고 하니 그 금액조차 아까웠다....)
2. 하드웨어 선정
클라우드의 요금 계산 이후, 요금이 적게 나오게 된다는 홈서버 구축쪽으로 알아보게 되었다.
mini PC 의 경우 소비전력이 일반 데스크탑에 비해 엄청 낮기에 Mini PC 로 알아 보게 되었다.
- 하드웨어 성능
개인 서버를 구축하고자 했던 가장 큰 목적이었던, 클라우드, DB, 개발서버를 사용하기에 하드웨어의 최소 성능은 아래처럼 고려했다.
선택지 / 스펙 | CPU | RAM | 용량(HDD, SSD) | 가격 |
최소 | 2 core | 8GB | 256GB | 100,000₩ |
중간 | 4 core | 16GB | 500Gb ~ 1TB | 150,000₩ ~ 400,000₩ |
최대 | 4 core ~ 8 core | 32GB ~ 64GB | 1TB ~ 2TB | 500,000₩ ~ |
스펙과, 금액의 편차가 좀 크지만, 최대한 가성비가 높은것을 찾고자 했다. (그렇지만 욕심 가득가득 채웠다)
최종적으로 선택하게 된 하드웨어 스펙은 아래와 같다.
CPU: 12gen N100 3.4Ghz
RAM: 16GB
SSD: 1TB + 2.5inch SATA 최대 2TB 추가가능
Windows OS 기본 설치
WIFI + Bluetooth + Lan Port
가격은 대략,,,,, 30 이 조금 넘었던것 같다. 배보다 배꼽이 더 커보이지만(가성비는 진작 없습니다)
해당 Mini PC 의 스펙상 소비전력이 30W(0.03kW) 이며 대략적인 전기요금을 계산해보고
가격대가 저렴하진 않지만 구매하게 되었다.
전기요금 계산(1kWh 당 요금 = 최저 요금 기준)
주택용 저압 전기요금 기준으로 최저요금인 0 ~200 kWh 기준으로 계산해 보겠다.
소비전력 계산
하루 사용량 : 0.03kW * 24 시간 = 0.72kWh
한달 사용량: 0.72kWh * 30일 = 21.6kWh
1kWh 당 = 114.10 + 기본요금 910 원
기본요금(910) + (21.6kWh * 114.10원) = 3,375원
부가세 포함 최종요금 = 3,839원
1kWh 당 요금이 높다고 해도, 아무리 계산해도 한달기준 아무리 많이 나와봐야 2-3만원 미만으로 나올것 같아서
스펙 대비 요금이 클라우드를 사용하는것보다 훨씬 좋다고 생각 되어서 바로 구매를 진행했다.
3. 서버 기본 설정 및 요구사항
OS 의 경우 CentOS, Ubuntu, RedHat 등등 Linux 기반 CLI OS 를 리스트에 두었다.
서버용으로 사용할것이기에 GUI 는 필요가 없었기 때문이다.
당시에 CentOS, RedHat 은 실무에서 사용하면서 많이 익숙해졌지만, 단순하게 제일 익숙한 OS 인 Ubuntu 로 결정했다.
(RedHat의 경우 상업용 사용시 유료이기에 제외하였음.)
파티션의 경우 지금은 굉장히 후회중이지만, 가끔 Windows 가 필요할 경우를 대비하여(필자는 중학생 이후 mac OS 만 사용했다,,)
1TB 중 Windows(350Gb) + Ubuntu(650Gb) 로 분리해 뒀다. (용량 부족시 2.5inch SSD 를 추가로 장착할 예정이다.)
Ubuntu OS 를 Host OS 로 바로 올리지 않고 Proxmox 를 사용해서 GuestOS 를 여러개 올려서 Cloud 사용하는것처럼
구성해볼까도 고민을 했었다. Host OS 를 하드웨어에 바로 올리는것이 아닌 하이퍼바이저를 사용해서 여러개의 OS 를 올려서 관리할 수 있기 때문에, 추후 쿠버네티스나, 용도별로 서버를 분리하여 용이하게 사용할 수 있기 때문이다.
다만 guest OS 이더라도 그만큼 CPU, RAM 을 더 사용할것이기 때문에 낭비되는 자원이 존재하기 마련이다.
그래서 Proxmox 는 서버 스케일업을 하게 된다면 그때 적용하기로 결정하고 Ubuntu 를 설치했다.
- 네트워크
서버를 다 설치하고나서 고려해야될 가장 중요한 요소이고, 공부를 많이해야할 요소인 Network 구성이다.
당시 알고있던 얕은 네트워크 지식으로는 위의 구조로 생각했었다.
저 구조는 간단하고, 직관적인 구조로 쉽게 생각할 수 있었다. 다만 좀만더 생각을 해보니 Local Area 즉 내부망에서는
생각보다 많은 기기들이 연결되고 있다. (PC, Mobile, pad, 가전기기 등등)
대략적으로 위의 구조로 되어있다.
필자는 통신사 공유기 관리자 사이트에서 포트포워딩을 통해 특정 Port 로 들어오는것은 Home Server 로 모두 보내려고 한다.
그외에 사용하지 않는 포트들은 전부 닫아놓았다.
다만 중요한 점이 존재한다. 필자는 Oracle Cloud 서버를 운용하면서 얻은 교훈이 있다.
보안을 소홀히 하면 다 털린다......
나름의 보안설정을 한다고 했지만 무차별적으로 들어오는 공격은 많다...ㅋㅋㅋㅋㅋ
Nginx 로그 또한 확인해보면 BruteForce 공격이 엄청나게 들어온다....
나름 최대한의 보안관련 정보와, 서버내 Application 설계, 관리, 최종적으로 구성된 네트워크와 도메인 연결은 다음 글에서 이어서 포스팅 하도록 하겠다....
'CS' 카테고리의 다른 글
홈서버 구축 - 보안, 관리, 아키텍처(2) (1) | 2025.04.01 |
---|---|
AES-256 - Encrypt(암호화) For Java (0) | 2024.05.26 |
댓글