서론
그동안 개인 프로젝트나 해커톤에 참여하게 되면, AWS를 이용해서 배포를 해왔다. 특히 Elastic Beanstalk, lambda 등 관리형 서비스를 쓰면 서버 관리나 배포를 신경 쓰지 않아도 되고, 최초 세팅만 해주면 손쉽게 구성을 할 수 있어서 애용했다.
그런데 이게 서비스가 하나 일 때는 Freetier 지원도 받고, AWS 크레딧 받은 거를 쓰면 크게 문제 될 게 없었는데, 이것저것 개발하다 보니 살려놔야 할 서비스들도 늘어나고, 프리티어 기간이 끝날 때마다 계정을 갈아타는 것도 여간 귀찮은 일이 아니었다.
사실 유저가 항상 있는 서비스도 아니고, 당장 운영 안정성이 필요한 서비스들도 아니었기에 클라우드 환경은 낭비되는 비용이 많다.
처음에는 terraform 등 IaC로 환경 구성을 여러 프리티어 계정에 나눠볼까도 생각했는데, 계정 관리도 어렵고 AWS라는 환경에 종속된다는 점도 불편하게 느껴졌다. 특히 작년에 AWS가 IPv4 주소에 대해 가격을 부과하도록 정책을 변경한 것과 같은 가격 정책 변동에 노출되어 있기에 그럴 때마다 구성을 바꾸는 등 끌려다녀야 하는 점도 홈 서버 구축을 결심하게 된 주요 요인이었다.
최종 구성 목표 아키텍처
모든 서비스를 다 홈 서버로 마이그레이션 시킬 필요는 없을 것 같고, Route53이나 S3 등은 AWS 서비스를 일부 이용하면서, 서비스 수에 비례해서 가격이 나가는 EC2, RDS를 홈 서버로 마이그레이션해서 운영하려고 한다. 장기적으로 홈서버는 라즈베리파이 여러 대를 클러스터로 묶어서 쿠버로 관리하는 걸 목표로 하고 있다.
라즈베리파이 설치
라즈베리파이 본체
사용할 라즈베리파이는 Raspbrry Pi 4b 2GB 모델이다. 예전에 학습용으로 5만원 정도에 새 상품으로 구매했다. 소비전력은 15W로 전기 요금이 걱정될 정도는 아니었다. CPU는 쿼드코어이며 arm64 임에 유의해야 한다.(amd 계열에서 동작하는 프로그램/코드와 호환이 안될 수 있다)
방열 케이스
24시간 동작해야하기에 발열을 잡고, 이물질 방지를 위해 케이스도 준비했다. 나중에 여러대를 클러스터로 묶어 확장할 것까지 고려해서, 적층가능한 케이스를 선택했다. 쿠팡에서 15,000원 정도에 구매할 수 있었다. 전용 무소음 팬도 들어있다.
SD카드 대신 SSD
기본적으로 라즈베리파이는 MicroSD카드를 연결해서 사용하도록 설계되어있다. 하지만 파일 전송 속도가 100MB/s 에도 못 미치고, SSD와 비교했을 때, IOPS도 상대적으로 못 미치기에 서버 성능과 직결된다. 패키지 설치 속도 등에서 운영/배포에도 영향을 주고, DB를 운영할 때에도 쿼리속도에 영향을 주게 된다.
라즈베리파이 5부터는 NVMe SSD를 쓸 수 있다고 하던데, 더 좋은 성능으로 구성할 수 있다. 하지만 비용을 고려해야하기에 SATA3을 지원하는 WD Blue 3D NAND SSD를 중고로 2만 원에 구매했다. (과거에 생산된 3D NAND라고 적혀있는 블루만 DRAM이 포함되어 있다는 점을 유의하자, 최근에 생산된 WD Blue 제품에는 SATA/NVMe 모두 DRAM이 빠진 걸로 알고 있다.)
라즈베리파이에는 USB로 연결해야하기에 SATA to USB 컨버터도 쿠팡에서 7,000원에 구매했다. (다른 블로그에서 평이 좋은 MBF사 제품으로 구매) 참고로 라즈베리파이에 USB 3.0으로 연결하게되면 5Gbps가 최대이고, SATA3는 6Gbps여서 USB로 컨버트해서 연결하면 SATA3도 가능한 최고속도에 도달한다.
아래는 추후에 라즈베리파이에 SSD를 연결하고 벤치마크를 돌려본 결과이다.
타 블로그에서 MicroSD 카드에서 돌린 결과와 비교해보면(완벽한 변인통제가 이뤄지진 않았기에 참고용으로만!) 읽기 속도는 3배 정도, 쓰기 속도는 5배 정도 빠른 걸 확인할 수 있었다.
운영체제
OS는 데비안 기반 라즈베리파이 공식 OS인 Raspbian 64bit로 설치했다. 라즈베리파이 4b부터는 EEPROM안에 부트로더를 내장시킬 수 있다고 한다. 설치 과정을 간략히 만 요약하면 아래와 같다.
1. SD카드에 USB 부트로더 다운로드
2. 최초 1회 SD카드를 라즈베리파이에 연결 후 부팅해서 USB 부트로더를 설치
3. SD 카드 제거 후 Raspbian OS를 설치한 SSD를 연결하여 라즈베리파이 부팅
최종 구성된 모습
네트워크 구성
네트워크 구성은 아래와 같다. 공유기와 모뎀에서 포트포워딩을 통해 외부 IP로 접속했을 때 포트별로 어느 단말기로 붙을지 제어하게 된다. 지금은 RDP로 붙어서 쓰는 개발용 PC, 파일 저장용 NAS, 홈 서버로 쓸 라즈베리파이를 물려서 쓰고 있는데, 차차 라즈베리파이를 추가해서 쓰기 위해 스위치허브를 구매할 생각이다.
외부에서 라즈베리파이로 들어오는 http/https 요청은 Nginx 리버스 프록시를 이용해서 각 WAS 서버에 로드밸런싱을 하고, SSL 종점을 제공한다. MySQL DB의 경우 개발용 데스크톱과 Docker Network 내부의 WAS에서만 접속을 허용하여 보안성을 높였다.
이때 Nginx, WAS, MySQL은 모두 docker 위에서 실행되며, 코드로 관리해서 Github Actions에 의해 자동으로 인프라 배포가 되도록 구성할 것이다.
총비용
라즈베리파이 4B RAM 2GB 모델 본체 : 54,000원 (45$인데, 요즘엔 환율 때문에 7만원 대...)
라즈베리파이 4 전용 올인원 방열 케이스 : 15,000원
엠비에프 SATA to USB 컨버터 : 7,200원
WD Blue 3D NAND SSD 250GB (중고) : 20,000원
총 10만 원 정도로 홈 서버를 구성할 수 있었다.
클라우드 요금과 비교
AWS에서 EC2, RDS 요금을 계산해 보면 데이터 통신 제외하고, 프리티어가 아닐 때 단일 AZ 서울 리전 기준.
EC2 온디멘드 t3.micro : 약 9.5$ (13,300원)
RDS for MySQL 온디멘드 db.t3.micro : 약 18.7$ (26,180원)
Public IPv4 : 약 3.6$ (5,040원)
물론 1년 동안은 IPv4 요금만 내면 프리티어로 사용할 수 있겠지만 서버 스펙을 높이거나 프리티어 기간이 끝나게 되면 전기세를 고려하더라도 3달 만에 온프레미스로 홈 서버를 구축하는 것이 가격 측면에서 유리하다.
물론 클라우드에서 제공하는 편의성과 네트워크/전력 공급 측면의 안정성은 엄청난 장점이지만, 실사용자가 있는 프로덕션 환경이 아닌 개발 환경이나, 사이드 프로젝트에서는 충분히 구축해볼 만한 가치가 있다고 생각한다.
내가 구매한 제품은 아래 링크에서 구매할 수 있다.
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
'홈 네트워크 & 서버' 카테고리의 다른 글
[홈 서버] 라즈베리파이에 Docker로 Nginx, MySQL, NestJS 구성, Github Actions로 환경 구성 자동화 (0) | 2025.01.28 |
---|