FediMeteo: 4유로짜리 FreeBSD VPS가 전 세계 수천 명을 위한 기상 서비스가 되기까지

1 month ago 12

  • 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는 저비용 인프라에서도 글로벌 서비스를 구축할 수 있음을 입증
  • 데이터 주권, 단순한 구조, 오픈소스 협력의 가치를 보여주는 사례
  • 창작자는 프로젝트를 통해 날씨가 사람들을 연결하는 사회적 매개체가 되었음을 강조

Read Entire Article