FediMeteo: 4유로짜리 FreeBSD VPS가 전 세계 수천 명을 위한 기상 서비스가 되기까지
(it-notes.dragas.net)- FediMeteo는 4유로짜리 FreeBSD VPS에서 시작된 전 세계 기상 정보 서비스로, Fediverse를 통해 각 도시의 날씨를 자동 게시함
- 각 국가는 FreeBSD jail로 분리되어 관리되며, snac 소프트웨어와 Open-Meteo API를 이용해 데이터를 가져와 Markdown 형식으로 게시
- 시스템은 6시간마다 자동 업데이트, 39개의 jail, 38개국 2937개 도시를 지원하며, 팔로워 수는 7700명 이상으로 성장
- API 키 유출, 좌표 계산 오류, 언어 번역 문제 등 다양한 운영상의 문제를 겪었으나, 캐싱과 다국어 지원 개선으로 안정화
- 저비용 인프라에서도 효율적이고 자율적인 글로벌 서비스 구축이 가능함을 보여주는 사례로 평가됨
프로젝트 개요
- FediMeteo는 개인적 관심에서 출발한 Fediverse 기반 자동 기상 알림 서비스
- 창작자는 자신의 도시 날씨를 타임라인에서 직접 보고 싶다는 생각에서 시작
- 서비스는 도시별 계정(bot) 을 생성해 각 도시의 날씨를 주기적으로 게시
- 운영체제로 FreeBSD를 선택, 국가별로 jail을 분리해 관리 및 보안성 확보
- 초기 테스트는 독일 VPS에서 진행되었으며, 현재는 이탈리아 밀라노의 4유로 VPS에서 운영 중
설계 원칙
- 국가별 인스턴스 분리로 관리와 보안성 강화, 필요 시 개별 이동 가능
- 데이터 출처는 wttr.in과 Open-Meteo 중 선택, 오픈소스 친화성과 신뢰성 중시
- 접근성 강화: 현지 언어, 텍스트 브라우저 호환, 이모지 사용, JavaScript 비의존
- Unix 철학에 따라 작은 구성요소들이 협력하는 구조 유지
- snac을 핵심 소프트웨어로 채택, ActivityPub 지원, RSS 생성, 낮은 자원 사용, 빠른 컴파일 속도 보유
기술 구현
- 각 jail은 독립적으로 동작하며, Python 스크립트가 도시별 데이터를 가져와 Markdown으로 변환
- geopy로 좌표 계산 후 Open-Meteo API 호출
- snac의
note명령으로 게시물 전송, 외부 API 키 관리 불필요
-
post.sh 스크립트가 모든 도시를 순회하며 게시물 자동 생성 및 게시
- cron이 6시간마다 실행, Uptime-Kuma로 상태 모니터링
- 도시명은 파일(
cities.txt)로 관리되며, 새 도시 추가 시 자동 반영
성장과 반응
- 초기에는 이탈리아 중심으로 테스트 후, 유럽 각국으로 확장
- FediFollows가 프로젝트를 소개하면서 팔로워 급증, 각국 사용자 요청 증가
- 다국어 지원, 이모지 표현, 비공개 게시(unlisted) 기능 추가
- 개발자 커뮤니티의 빠른 피드백으로 기능 개선이 지속됨
확장과 기술적 도전
- 단위 변환(섭씨/화씨) , 시간대 차이, 동명이 도시 구분 등 글로벌 확장 시 문제 발생
-
미국·캐나다 진출 시 1200개 이상의 도시 추가, 주별 구분을 위해
__구분자 사용 - Open-Meteo 무료 API 한도 초과 문제 발생 후, 전용 API 키 제공받음
- FreeBSD와 snac의 효율성 덕분에 단일 VPS에서도 다수 국가 운영 가능
시스템 성능 및 인프라
- VPS 사양: FreeBSD 14.3-RELEASE, BastilleBSD로 jail 관리
- 총 39개 jail, ZFS 스냅샷 15분마다, 외부 백업 매시간 수행
- RAM 사용량 501MB, 업데이트 시 약간 증가
- CPU 부하 평균 10% 이하, 대규모 업데이트 시 70~75%까지 상승
- 미국 인스턴스는 도시 간 5초 간격으로 게시, 전체 처리 약 2시간 반 소요
문제 해결 사례
- API 키 유출: 디버그 코드로 인해 노출, 즉시 수정 및 새 키 발급
- geopy 오류: Nominatim 응답 실패 시 좌표 캐싱 도입으로 해결
- 언어 문제: 다국어 번역 누락 및 현지 언어 선택 오류 수정
현재 상태 (2025년 12월 기준)
- 지원 국가: 38개국, 도시 수 2937개
- Fediverse 팔로워 수 7707명 이상, RSS 구독자 수는 추정 불가
- 유럽, 북미, 아시아, 오세아니아 주요 도시 포함
- 시스템 안정적으로 운영 중이며, 추가 국가 확장 여력 존재
결론
- FediMeteo는 저비용 인프라에서도 글로벌 서비스를 구축할 수 있음을 입증
- 데이터 주권, 단순한 구조, 오픈소스 협력의 가치를 보여주는 사례
- 창작자는 프로젝트를 통해 날씨가 사람들을 연결하는 사회적 매개체가 되었음을 강조
Hacker News 의견들
-
이런 작은 프로젝트가 성공적으로 성장하는 걸 보는 게 정말 즐거움
FreeBSD가 Linux 배포판보다 불필요한 요소가 적고 지연이 낮은 느낌을 받음
Vultr에서 월 4달러짜리 FreeBSD VM(1GB RAM, 1vCPU)을 설정했는데, Caddy를 돌려도 RAM 사용량이 12%밖에 안 됨
4GB RAM, 4vCPU VM이면 꽤 많은 트래픽을 감당할 수 있을 것 같음
개인용 블로그를 레트로 BBS 스타일의 텍스트 기반 웹앱으로 만들고 싶음 — Nim 멀티스레드 서버 + sqlite 조합으로, 컨테이너나 JS 라이브러리 없이 4MB짜리 바이너리 하나로 FreeBSD에서 돌리는 식으로
이 글 덕분에 FreeBSD로 가는 길에 확신이 생김- Linux는 배포판과 설정에 따라 다름
오늘 mkosi(https://github.com/systemd/mkosi)로 테스트해보니, 최소 설치 기준 Fedora 43은 약 130MiB, Debian은 100MiB 정도 RAM을 사용함
예전에 FreeBSD 최소 설치를 해봤을 때도 비슷하거나 ZFS 설정에 따라 약간 더 썼던 기억이 있음 - 20년 전에는 Linux가 지금보다 자원 사용량이 절반이었던 걸로 기억함
아마 x64 전환이 원인 중 하나일 수도 있음
같은 일을 하는데 RAM을 두 배로 쓰게 된 게 신기했지만, 대신 이제는 사실상 무제한 RAM을 쓸 수 있게 되었음 -
Alpine 같은 가벼운 배포판도 존재함
SSH 로그인조차 Ubuntu보다 훨씬 빠르고, apk 패키지 매니저도 매우 신속함 - BSD 유틸리티는 내부 동작을 이해하기에 GNU 유틸보다 훨씬 읽기 쉬움
라이선스 모델은 GNU 쪽을 선호하지만, 코드 자체는 BSD 스타일이 더 마음에 듦 - “retro BBS-like web app”이라면, 옛날 다이얼업 BBS를 말하는 건지, 아니면 포럼형 게시판을 말하는 건지 궁금함
후자라면 FlaskBB를 참고해볼 만함
- Linux는 배포판과 설정에 따라 다름
-
나도 비슷하게 open-meteo를 이용해 개인용 서핑 예보 시스템을 만들고 있음
한 지역만 다루지만 확장도 쉬움
open-meteo의 해양 데이터를 단기·장기 기상예보와 결합하고, 그 결과를 LLM으로 정량 데이터를 정성적 설명으로 변환함
내가 머릿속으로 하던 일을 자동화한 셈임
아이디어가 있다면 알려주면 좋겠음
https://surfrash.xyz/- 멋짐. 어떤 해변에도 유용할 것 같음
데이터 벽 대신 설명 중심 인터페이스가 마음에 듦
Manly(NSW, Australia) 지역도 추가 요청함
- 멋짐. 어떤 해변에도 유용할 것 같음
-
재미있게 읽었음
젊을 때 *BSD에 더 관심을 가졌다면 좋았을 텐데, 지금은 Linux에 너무 익숙해져서 쉽게 바꾸기 어려움
ZFS와 jail 기능 덕분에 관리가 매끄럽게 된 것 같음
나는 podman을 쓰지만, Linux에서 ZFS는 아직 안 써봤음
개인용 아카이브를 만들 계획이라 ZFS의 deduplication 기능을 활용해볼 예정임- 나도 같은 생각임
Docker 같은 복잡한 스택을 줄이려 노력 중이고, systemd가 있긴 하지만 jail이나 sandbox 개념이 꽤 매력적임
기본 설정만으로도 잘 작동하는 도구를 선호함
- 나도 같은 생각임
-
“4유로 VPS” 스펙이 놀라움
예를 들어 Hetzner의 최저가 VPS는 2 vCPU, 4GB RAM, 40GB NVMe SSD인데, 1Gb/s 연결은 없음
내가 찾은 가장 저렴한 건 Contabo였음- LowEndBox가 이런 VPS 정보를 모아둔 인기 사이트임
- Netcup VPS 500 G11s도 참고할 만함
- VPS 제공업체 간 vCPU 성능 비교에 주의해야 함
저가형 서버는 세대가 오래됐거나 과도하게 공유된 경우가 많음
4 vCPU가 최신 서버의 2 vCPU보다 느릴 수도 있음
다만 RAM 중심의 앱이라면 좋은 선택일 수 있음 - Oracle Cloud는 무료로 4 oCPU(ARM), 24GB RAM, 200GB NVMe SSD, 4Gb/s 대역폭을 제공함
인스턴스 확보가 어렵다는 말도 있지만, 나는 2년 넘게 잘 쓰고 있음
무료 계정이 종료될 수 있으니 유료로 전환하는 게 안전함 - 예전에 buyvm에서 1년에 5달러짜리(256MB RAM) VPS를 썼었는데, 단순한 용도로는 꽤 유용했음
-
거대한 인프라(Kubernetes, AWS, DynamoDB 등) 없이 단순한 프로젝트를 직접 구축하는 모습이 보기 좋음
-
Hacker News 자체도 FreeBSD 기반 4코어 서버에서 돌아감
관련 링크- 실제로는 2개의 CPU 패키지 × 4코어 × 2스레드 구조라 총 16스레드임
- 그래도 전용 코어라서 다른 테넌트와 공유되지 않음
-
나도 비슷한 스펙의 서버를 5달러 정도에 구입했음
400~500GB 저장공간이 있고, 3개월간 8달러 프로모션으로 시작했음
이후 월 5달러로 전환될 예정인데, VPS를 직접 운영하는 재미와 몰입감이 큼
OVH는 가격이 저렴하고 무제한 egress 정책이 장점임
Upcloud도 지원팀이 훌륭했음
OVH 지원은 트위터나 Discord를 통해 문의하는 게 좋다는 팁도 들었음
서버 가격과 지원 품질을 비교하며 최적화하는 과정 자체가 즐거움 -
“freeofcharge.org”라는 도메인을 사서, RAM 안에 들어가는 무료 서비스들을 서브도메인으로 제공하는 아이디어를 생각한 적 있음
월 10달러 이하로 운영 가능한 유용한 서비스들을 모으는 개념이었음 -
나도 비슷하게, 특정 지역의 기상 특보를 HTML/Markdown 형태로 보기 쉽게 변환하는 도구를 만들고 싶음
fediverse용은 아니고, 단순히 접근성 좋은 날씨 알림용임 -
“현지 언어로 예보를 제공해야 한다”는 의견에 대해,
현지 언어를 모르는 사용자도 많으니 브라우저의 기본 언어 설정을 덮어쓰는 건 불필요하다고 생각함- 프로젝트는 다국어 지원이 아니라 사용자에게 직접 예보를 전달하는 게 목적임
대신 이모지로 직관적인 표현을 제공해 언어 장벽을 줄임
- 프로젝트는 다국어 지원이 아니라 사용자에게 직접 예보를 전달하는 게 목적임