현재 지원 상태
- Google - 정식 지원 별도 문서
- Microsoft - 정식 지원 Graph API, OAuth 2.0
- Naver - 정식 지원 CalDAV (RFC 4791)
- Kakao - 지원 예정 톡캘린더 API 정책 확정 후 활성화 예정
Sudapapa Diary는 Google 외에도 Microsoft, Naver, Kakao 캘린더와 연동할 수 있도록 설계되어 있습니다. 한 앱에서 여러 계정을 동시에 사용할 수 있고, 각 계정은 독립된 토큰/자격증명, 동기화 엔진, 색상 그룹을 가집니다.
현재 지원 상태
캘린더 관리 페이지(accounts.html)에서 모든 외부 계정을 한 화면에서 관리할 수 있습니다.

| 영역 | 설명 |
|---|---|
| 로컬 계정 | 앱 내부 SQLite에 저장된 기본 캘린더 |
| 외부 계정 | 연결된 Google/Microsoft/Naver/Kakao 카드 목록 |
| 추가 타일 | 미연결 제공자 4종 - 클릭 시 해당 인증 흐름 시작 |
| 프리미엄 잠금 | 무료 플랜에서는 외부 계정 영역이 잠금 처리됨 |
Microsoft Graph API를 통해 Outlook.com, Live, Hotmail, Microsoft 365 계정의 캘린더를 양방향 동기화합니다.
offline_access user.read Calendars.ReadWrite (microsoftAuth.js)
| Scope | 용도 |
|---|---|
offline_access | 리프레시 토큰 발급 (자동 토큰 갱신용) |
user.read | 로그인 사용자 이름/이메일 표시 |
Calendars.ReadWrite | 캘린더 읽기·생성·수정·삭제 |
https://login.microsoftonline.com 동의 화면 이동http://localhost:8888/microsoft/callback으로 인증 코드 콜백Microsoft Graph /me에서 사용자 정보 조회MicrosoftSyncEngine.pull은 Microsoft Graph의 Delta Link를 사용해 변경분만 받아옵니다.
deltaLink를 저장410 syncStateNotFound) 자동으로 초기화 후 전체 동기화 재실행만료 5분 전 버퍼를 두고 자동으로 갱신합니다(ensureValidToken). Microsoft가 새 RefreshToken을 항상 반환하지는 않으므로, 기존 토큰을 보존하며 access_token만 갱신하는 머지 정책을 사용합니다.
Naver 캘린더는 OAuth 대신 CalDAV(RFC 4791) 표준을 사용합니다. 따라서 인증 방식이 다른 제공자와 다릅니다.
https://caldav.calendar.naver.com에 PROPFIND를 보내 자격증명 검증current-user-principal → calendar-home-set을 자동 탐색NaverSyncEngine.pull은 sync-collection REPORT로 변경분만 가져오는 것을 우선 시도하고, 서버가 미지원이거나 토큰이 만료되면 1년 전 ~ 1년 후 범위의 전체 조회로 fallback 합니다.ical.js로 파싱해 내부 형식으로 변환됩니다.| 제약 | 영향 |
|---|---|
| 1년 ± 범위만 전체 조회 | 매우 오래된 일정은 자동으로 가져오지 않음(sync-token으로는 모두 추적) |
| 네이버 캘린더 API 변경 가능성 | 네이버 정책 변경 시 동기화가 일시적으로 실패할 수 있음 |
| 일부 사용자 정의 필드 무시 | CalDAV 표준 필드만 보존됨 |
Kakao 톡캘린더 연동은 코드 수준에서 준비되어 있으나(kakaoAuth.js, kakaoSyncEngine.js) Kakao Developers 정책 확정에 맞춰 단계적으로 활성화될 예정입니다.
talk_calendar 스코프)https://kauth.kakao.com/oauth/authorize 동의 후 localhost:8888/kakao/callback 콜백kapi.kakao.com/v2/user/me)와 캘린더 목록 조회추가 정보는 별도 공지로 안내됩니다.
서로 다른 제공자를 동시에 연결할 수 있으며, 각 캘린더는 다음과 같이 분리됩니다.
독립된 토큰
ConnectionStoreDB가 제공자별로 토큰을 분리 저장합니다. 한 계정의 만료가 다른 계정에 영향을 주지 않습니다.
독립된 SyncEngine
Google/Microsoft/Naver/Kakao 각각 자체 SyncEngine 인스턴스를 보유합니다. 한 제공자의 장애가 다른 동기화를 중단시키지 않습니다.
색상 분리
각 캘린더는 제공자에서 가져온 색상으로 표시되어 시각적으로 구분됩니다.
QuickAdd 그룹화
일정 추가 팝업의 캘린더 드롭다운이 제공자별로 그룹화되어 표시됩니다.
| 작업 | 동작 |
|---|---|
| 캘린더 토글 OFF | 위젯에 표시 중단, push 중단 (토큰은 유지) |
| 계정 일시 비활성화 | 자동 동기화 일시 정지, 토큰 유지 (다시 활성화 시 즉시 재개) |
| 계정 제거(로그아웃) | 토큰/자격증명/사용자 정보/로컬 일정 사본 삭제, 외부 서버에는 영향 없음 |
| 증상 | 가능한 원인 | 해결 |
|---|---|---|
| Microsoft 인증 후 무한 로딩 | localhost 8888 포트 점유 | 다른 OAuth 흐름이 진행 중인지 확인 후 재시도 |
Microsoft interaction_required | 회사/학교 계정의 조건부 액세스 정책 | IT 관리자에게 사용 허용 요청 |
Naver Unauthorized | 일반 비밀번호 사용 시 차단됨 | 앱 전용 비밀번호 발급 후 재로그인 |
| Naver 캘린더 목록이 비어 있음 | CalDAV 자동 탐지 실패 | 네이버 캘린더 웹에서 한 번이라도 접속해 캘린더가 활성화되어 있는지 확인 |
| 일정 변경이 외부에 반영되지 않음 | 토큰 만료 또는 네트워크 오류 | 자동 재시도 후에도 실패하면 로그아웃·재로그인 |
| 동기화 시점이 늦음 | 자동 주기 대기 | 새로고침 버튼으로 즉시 동기화 |
연결 정보는 모두 SQLite에 저장됩니다.
%AppData%/../sudapapadiary/Configurations/Database/sudapapa.db└── ConnectionStore (제공자별 분리된 토큰/자격증명/사용자 정보)토큰과 자격증명은 디바이스에 묶인 키로 암호화되며, 다른 PC로 단순 복사해도 복호화되지 않습니다. 다른 PC로 옮기려면 내보내기/가져오기의 안전한 백업 절차를 사용하세요.
| 항목 | Microsoft | Naver | Kakao | |
|---|---|---|---|---|
| 인증 | OAuth 2.0 | OAuth 2.0 | CalDAV (ID + 비번) | OAuth 2.0 |
| 콜백 경로 | /callback | /microsoft/callback | (없음) | /kakao/callback |
| 증분 동기화 | 표준 풀 | Delta Query | sync-collection | 표준 풀 |
| 자동 동기화 주기 | 5분 | 5분 | 5분 | 5분 (예정) |
| 일정 범위(전체 풀) | -1년 ~ 현재 | 무제한 (Delta) | -1년 ~ +1년 | 정책 확정 후 |
| 음력 보존 | ❌ | ❌ | ❌ | ❌ |
| 알림 보존 | ✅ | ✅ | 부분 | 예정 |
| 색상 표시 | ✅ | ✅ | ✅ | 예정 |
| 현재 상태 | 정식 | 정식 | 정식 | 예정 |
Q. Google이랑 Microsoft를 동시에 켜도 되나요?
네. 각 제공자는 독립된 SyncEngine과 토큰을 갖고 있어 서로 영향을 주지 않습니다. 색상이 다른 두 제공자의 일정이 한 캘린더 위젯에 함께 표시됩니다.
Q. 회사 Microsoft 365 계정도 되나요?
대부분의 회사 계정에서 작동합니다. 다만 IT 관리자가 조건부 액세스 정책으로 외부 앱 접근을 제한한 경우 인증 단계에서 차단될 수 있으며, 이 경우 관리자에게 사용 허용 요청이 필요합니다.
Q. 네이버 일반 비밀번호로 로그인이 안 됩니다.
2단계 인증 사용자는 일반 비밀번호로 CalDAV 접근이 차단됩니다. 네이버 보안 설정에서 애플리케이션 비밀번호를 발급받아 사용하세요. 일반 비밀번호 대신 앱 비밀번호 사용은 보안상으로도 권장됩니다.