2P by GN⁺ 9일전 | ★ favorite | 댓글 1개

소개

  • 데이터와 기술을 직접 소유하고자 하는 시리즈의 첫 번째 부분으로, 자체 호스팅 캘린더 솔루션을 통합하는 방법에 대해 설명함.
  • 여행이 잦아 일정 관리가 복잡해지고, 기존 캘린더 시스템의 불편함을 해결하기 위해 자체 솔루션을 구축하게 됨.

요구 사항

  • 일정이 업무 캘린더에 차단 요소로 표시됨.
  • 아내가 캘린더를 구독할 수 있음.
  • 이벤트를 한 번만 입력할 수 있음.
  • 여러 기기에서 편집 가능.
  • 데이터를 완전히 제어할 수 있음.
  • 업무 캘린더를 아내와 공유하는 방식으로 문제를 해결할 수 없음.

이전 솔루션

  • 기존 캘린더 공유 솔루션은 공통 플랫폼을 요구하거나 제한된 기능을 제공함.
  • YAML 파일을 사용해 캘린더 이벤트를 작성하고, 이를 ICS 파일로 변환하여 공유하는 방식으로 시작했으나, 유지보수가 어려워짐.

아키텍처

  • CalDAV 서버를 사용하여 여러 기기에서 캘린더를 관리할 수 있는 솔루션을 구축함.
  • 다양한 데이터 소스와 연결하여 이벤트를 자동으로 업데이트하고, 이를 ICS 파일로 제공함.

Baïkal 설정

  • Baïkal을 사용해 CalDAV 서버를 설정하고, Docker Compose를 통해 쉽게 배포함.
  • nginx 리버스 프록시를 사용해 웹에서 접근 가능하도록 설정함.

이벤트 분류 체계 설정

  • iCalendar의 CATEGORIES 속성을 활용해 이벤트를 분류하고, Python enum을 사용해 데이터 모델을 작성함.
  • 이를 통해 이벤트를 쉽게 검색하거나 색상으로 구분할 수 있도록 함.

캘린더 컴파일 및 공유

  • IMAP, API, ICS 파일 등을 통해 이벤트를 자동으로 가져와 Baïkal에 추가하고, 이를 ICS 파일로 변환하여 웹에 공유함.
  • 크론 작업을 통해 15분마다 업데이트되도록 설정함.

업무 캘린더와의 공유

  • Google Script Engine을 사용해 이벤트를 업무 캘린더에 복사하고, CATEGORIES 속성을 기반으로 색상 코딩을 적용함.

결론

  • 6개월간의 테스트를 통해 시스템이 잘 작동하며, 여행 일정 관리에 큰 도움이 됨.
  • 월 $100의 서버 비용이 들지만, 일정 관리의 편리함으로 인해 충분한 가치가 있다고 판단함.
Hacker News 의견
  • CalDAV는 복잡하고 직관적이지 않음. Radicale을 사용해봤지만 만족스럽지 않았음. 개인적으로 CalDAV 서버를 구현하려 했지만 포기했음

    • 대신 iCal 파일을 S3 버킷에 호스팅하고 ICSx5를 사용하여 Android에서 동기화했음. CalDAV는 필요 없고 HTTPS만 사용함
    • FOSS 캘린더는 여전히 부족하고 GrapheneOS에서 ICSx5가 작동하지 않아 Proton Calendar로 전환했음. 완벽하지는 않지만 필요를 충족함
    • iCalendar 형식 사용은 좋은 접근법이지만 소프트웨어마다 지원 기능이 달라서 메타데이터를 설명 필드에 넣기로 결정했음
    • 소프트웨어를 사용하여 다양한 사이트에서 데이터를 수집하고, 관심 있는 사회적 이벤트만 필터링하여 단일 캘린더로 결합함
  • Radicale은 Python으로 작성된 모듈식 CalDAV 서버로 추천할 만함

    • 데이터는 텍스트 파일로 저장되고 git으로 추적 및 백업함
    • 인증은 호스트 시스템의 pam을 사용함
    • 캘린더 공유를 위해 주기적으로 스크립트를 실행하여 캘린더를 모든 권한 있는 사용자에게 심볼릭 링크함
    • 사용자 정의 CalDav 속성과 수정된 웹 플러그인을 사용하여 접근 제어 목록을 지원함
    • 공용 캘린더는 ACL을 통해 'public' 사용자에게 읽기 권한을 부여함
  • 개인 서버에서 Mailcow(SoGO)와 Fastmail을 사용 중임. 두 캘린더가 잘 동기화되지 않음

    • Mailcow의 캘린더를 다른 도구와 잘 작동시키지 못해 반자동으로 동기화함
    • Baïkal을 시도해보고 싶음. Mailcow를 다른 자체 호스팅 메일 서비스로 교체할 기회도 됨
  • 2000년대 초반 Mozilla Sunbird를 사용하여 Win2k 서버에서 캘린더를 호스팅했음. CardDAV는 없었던 것 같음

    • 모든 데이터를 Google Calendar로 가져왔고, 과거의 대학 과제 등을 볼 수 있음
  • Baikal을 몇 년간 사용 중이며 안정적임. Thunderbird와 DAVx5, Fossify Calendar를 사용하여 연결함

    • Fossify Calendar는 Simple Mobile Tools의 캘린더 앱에서 포크된 앱으로, 가장 기능이 풍부함
    • 간단하게 모든 옵션을 제공하여 사용하기 편리함
  • 사진을 위한 기능을 만들고 싶음. Dropbox와 Google에서 벗어나고 싶음

    • 사진을 기념일, 활동, 가족 등으로 그룹화하여 휴대폰으로 전송하는 기능을 원함
    • 장치에서 찍은 사진을 서버에 저장할 수 있기를 원함
    • 2TB 공간의 true-nas 기계를 세 곳에 설치하고 기능을 구축 중임
  • Outlook과 Google Calendar를 HTTP로 동기화하는 것이 신뢰할 수 없음

    • 시간대 문제로 인해 회의 시간이 항상 잘못됨
    • 자체 시스템을 사용하면 해결될 것 같지만, 두 시간 차이로 회의가 생성될까 봐 걱정됨
  • Baikal이 흥미로워 보임. 과거에 DAViCal을 사용했지만 iOS 버전이 변경되면서 신뢰할 수 없게 됨

    • 다시 시도할 때 DAViCal, Radicale, Baikal을 고려할 것임
  • 최근 클라우드에서 벗어나려는 시도를 하고 있음. 데이터 마이그레이션은 2주 걸렸고 기대 이상으로 잘 작동함

    • 이메일을 제외한 모든 서비스를 자체적으로 처리하며, Asus PN40이 큰 도움이 됨
    • CalDAV는 불안정하지만 Nextcloud가 대부분의 필요를 충족함
    • 여러 오픈 소스 솔루션과 결합하여 모든 필요를 충족함
  • 서버리스로 DecSync를 사용하는 방법도 있음. Thunderbird 또는 Evolution이 Android 앱과 동기화됨

    • Cal, Cards, 작업, RSS가 다른 피어에 복제됨