Mac mini (M4)로 개인 서버 구축하기

Clapsheep·2025년 3월 8일
post-thumbnail

AWS에서 Mac mini 홈 서버로 마이그레이션하기

AWS비용

프론트엔드 개발자지만 CI/CD, Docker, 배포 등에 관심이 많아서 앞으로 개발자로 성장했을 때, MSA 환경을 만드는 것에 작은 목표가 있다. 그래서 기회가 될 때마다 프로젝트에서 인프라를 담당하고 있는데, 기존에 AWS를 사용해서 배포를 했었다. 근데 IP v4에 대한 비용 때문에 아무리 프리티어로 돌려도 계정 1개당 월 5,000원 정도는 발생했던 것 같다. 지속적인 비용 부담이 있어서 나의 홈서버를 가지고 싶다는 생각을 평소에 했었다.

Mac mini를 선택한 이유

macmini구매
최근 출시한 M4 Mac mini를 구매했는데, 기본 사양이 램 16기가를 제공하면서 굉장히 저렴한 가격과 작은 사이즈라는 장점이 있었다. 게다가 맥이 유닉스/리눅스 기반으로 만들어져서 ssh 원격으로 접속했을 때 별다른 설정이나 설치없이 aws와 환경이 매우 비슷하다고 판단했고 홈서버로 적당하다고 생각했다.

초기 설정

확실히 윈도우에 비해서 별 다른 설정이 없었다.
원격 접속 활성화 하기, docker 설치하기.
끝이다.

DDNS와 도메인 설정

iptimeDDNS

이제 서버의 네트워크 설정을 위한 과정이다.

해결해야할 과제는 두가지였다.
1. 가정용 네트워크는 유동 ip 이다.
2. 여러 서비스를 내 맥 미니 서버에 띄울건데 기존 DNS를 가져갈 방법은?
결론적으로는 두 문제사항 모두 해결했고, 아래에 그 기록을 남기려고 한다.

iptime 공유기를 사용하기 때문에 가정용 네트워크의 유동ip 문제를 극복하고자 여기서 제공하는 DDNS를 활성화 했다. 그리고 내가 기존에 배포를 위해 구매했던 도메인들을 그대로 연결하고 싶었는데, 이 때 문제가 생겼다.
내 서버에 원격으로 접속하는건 iptime이 제공하는 DDNS로 가능했지만 배포 주소 자체를 iptime이 제공한 DNS와 연결하기 위해선 CNAME으로 도메인을 연결해야했다.

cloudflare 이용하기

기존에 Route53을 사용하던 걸 그대로 사용하려 했더니 CNAME으로 연결할 수 있는 DNS 목록에 iptime에 대한 서비스를 제공하지 않았다.

그래서 Cloudflare로 갈아탔다.

cloudflare는 여러 DNS에 관한 설정을 모아서 할 수 있고, 그 외에 편리한 기능을 무료 플랜에서도 제공한다. 그중 내가 사용하게 된 결정적인 원인은 3가지가 있다.

1. 가정용 네트워크의 한계 : 유동 ip 문제 해결 DDNS

먼저 api를 제공해서 내 서버에서 5분마다 자동으로 ip 갱신을 해서 DDNS연결을 업데이트 해줄 수 있었다. 이로 인해 CNAME 방식이 아닌 레코드 A로 구매한 도메인과 나의 집 외부 ip의 연결을 cron명령어를 통해 5분마다 갱신해 유동ip 문제를 해결할 수 있었다. 이 부분이 내가 직접 DDNS를 구현해 낸 것과 같지 않을까?

2. 여러 도메인을 사서 연결 가능!

하나의 서버에서 포폴용 서비스 여러 개를 구동할 생각이라 각각 DNS전파하는 부분에 대한 관리가 필요했다. 이 부분이 가능하지 몰랐지만 cloudflare에서 쉽게 가능했다.

3. ssl 인증

기존에는 nginx에서 certbot을 이용해 ssl인증을 받아서 cron으로 30일 마다 인증서를 업데이트 해줬었는데, cloudflare에서 구매한 도메인에 대한 이 ssl인증과정을 알아서 해줬다. 진짜 편하다.

이 과정에서 자연스럽게 포트포워딩이나 DDNS같은 지식을 직접 경험할 수 있었고, 네트워크 지식이 늘어갔다.

CI/CD 설정

기존 배포는 docker로 진행했고 githubAction CI/CD를 사용했기 때문에 생각보다 수월했다. 다만 깃헙액션에서 파이프라인이 작동할 때 ssh로 내 서버에 접근할 때 자꾸 안되서 원인을 찾고 있었는데, 일단 key인증으로 접근 인가를 얻어야했기에 서버에서 Key를 발급해서 환경변수로 넣어줬다.

그리고 PATH에 도커가 등록이 되어있지 않은 문제가 있어서

export PATH="/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:$PATH"

이 부분을 추가해줬는데 홈브류로 설치하지 않아서 자동으로 할당이 안된건지, 그렇다면 내가 서버에서 이부분 패스 등록을 했더라면 알아서 잡았을지 모르겠다.

Nginx 설정

이제 전파된 DNS로 들어오는 요청을 Nginx 리버스 프록시로 각각의 포트에 할당해주면 된다. 여러 서비스를 등록할 거기 때문에 기본적으로 서버내의 도커에서 항상 Nginx가 돌아가게 했다. 몰랐는데 이번에 알아보니까 nginx proxy manager라는 것도 있더라. 그걸 통해 편하게 리버스 프록시 설정을 할 수 있었던 것 같다.

마무리

꿈에 그리던 개인 서버를 얻었고 설정까지 잘해서 서버가 돌아가는걸 확인하니까 굉장히 뿌듯했다. 그간 진행했던 모든 프로젝트를 아직 마이그레이션 하지는 못했지만 앞으로 차차 하면서 새로운 프로젝트들은 이제 바로바로 내 서버에 연결하면 포폴 관리나 운영 측면에서 굉장히 편할 것 같다.

비용적으로도 AWS의 IP v4 비용을 하나씩 줄이고 있어서 장기적인 관점으로 볼 때 굉장히 경제적인 선택지였고, 학습자료로도 훌륭한 선택이었던 것 같다.

profile
왜 사용하는지 적어보려고 블로그를 합니다.

1개의 댓글

comment-user-thumbnail
2025년 11월 4일

집에 인텔데스크탑/노트북 보여중이지만, 아이폰 앱 개발 및 서버용으로 M4 맥미니 구매 고민중인 개발자입니다. 지금까지도 서버로 잘 사용중이신가요?

답글 달기