내 데이터 소유하기, 1부: 셀프 호스팅 캘린더 솔루션 통합
(emilygorcenski.com)소개
- 데이터와 기술을 직접 소유하고자 하는 시리즈의 첫 번째 부분으로, 자체 호스팅 캘린더 솔루션을 통합하는 방법에 대해 설명함.
- 여행이 잦아 일정 관리가 복잡해지고, 기존 캘린더 시스템의 불편함을 해결하기 위해 자체 솔루션을 구축하게 됨.
요구 사항
- 일정이 업무 캘린더에 차단 요소로 표시됨.
- 아내가 캘린더를 구독할 수 있음.
- 이벤트를 한 번만 입력할 수 있음.
- 여러 기기에서 편집 가능.
- 데이터를 완전히 제어할 수 있음.
- 업무 캘린더를 아내와 공유하는 방식으로 문제를 해결할 수 없음.
이전 솔루션
- 기존 캘린더 공유 솔루션은 공통 플랫폼을 요구하거나 제한된 기능을 제공함.
- 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가 다른 피어에 복제됨