Skip to content

다중 계정 연동 (Microsoft / Naver / Kakao)

Sudapapa Diary는 Google 외에도 Microsoft, Naver, Kakao 캘린더와 연동할 수 있도록 설계되어 있습니다. 한 앱에서 여러 계정을 동시에 사용할 수 있고, 각 계정은 독립된 토큰/자격증명, 동기화 엔진, 색상 그룹을 가집니다.

현재 지원 상태

  • Google - 정식 지원 별도 문서
  • Microsoft - 정식 지원 Graph API, OAuth 2.0
  • Naver - 정식 지원 CalDAV (RFC 4791)
  • Kakao - 지원 예정 톡캘린더 API 정책 확정 후 활성화 예정

캘린더 관리 페이지(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캘린더 읽기·생성·수정·삭제
  1. 캘린더 관리에서 Microsoft 타일 클릭
  2. 시스템 브라우저로 https://login.microsoftonline.com 동의 화면 이동
  3. 권한 동의 후 http://localhost:8888/microsoft/callback으로 인증 코드 콜백
  4. 코드를 토큰으로 교환하고 Microsoft Graph /me에서 사용자 정보 조회
  5. 캘린더 목록을 받아와 모두 활성화 상태로 등록
  6. Delta Query 기반 증분 동기화 시작

MicrosoftSyncEngine.pull은 Microsoft Graph의 Delta Link를 사용해 변경분만 받아옵니다.

  • 첫 호출에서 전체 동기화 후 deltaLink를 저장
  • 이후 호출은 deltaLink로 변경/삭제만 가져와 네트워크/배터리 사용을 최소화
  • deltaLink가 만료되면(410 syncStateNotFound) 자동으로 초기화 후 전체 동기화 재실행

만료 5분 전 버퍼를 두고 자동으로 갱신합니다(ensureValidToken). Microsoft가 새 RefreshToken을 항상 반환하지는 않으므로, 기존 토큰을 보존하며 access_token만 갱신하는 머지 정책을 사용합니다.

Naver 캘린더는 OAuth 대신 CalDAV(RFC 4791) 표준을 사용합니다. 따라서 인증 방식이 다른 제공자와 다릅니다.

  1. 캘린더 관리에서 Naver 타일 클릭
  2. 입력 다이얼로그에 네이버 ID와 (앱) 비밀번호 입력
  3. 앱이 https://caldav.calendar.naver.com에 PROPFIND를 보내 자격증명 검증
  4. RFC 4791 절차로 current-user-principalcalendar-home-set을 자동 탐색
  5. 캘린더 목록을 받아와 등록
  6. sync-token 기반 증분 동기화 시작 (미지원 시 전체 동기화로 fallback)
  • NaverSyncEngine.pullsync-collection REPORT로 변경분만 가져오는 것을 우선 시도하고, 서버가 미지원이거나 토큰이 만료되면 1년 전 ~ 1년 후 범위의 전체 조회로 fallback 합니다.
  • 일정 형식은 ICS(VEVENT)이며, ical.js로 파싱해 내부 형식으로 변환됩니다.
  • push도 마찬가지로 PUT/DELETE를 사용해 CalDAV 표준으로 처리됩니다.
제약영향
1년 ± 범위만 전체 조회매우 오래된 일정은 자동으로 가져오지 않음(sync-token으로는 모두 추적)
네이버 캘린더 API 변경 가능성네이버 정책 변경 시 동기화가 일시적으로 실패할 수 있음
일부 사용자 정의 필드 무시CalDAV 표준 필드만 보존됨

Kakao (톡캘린더) 지원 예정

Section titled “Kakao (톡캘린더) ”

Kakao 톡캘린더 연동은 코드 수준에서 준비되어 있으나(kakaoAuth.js, kakaoSyncEngine.js) Kakao Developers 정책 확정에 맞춰 단계적으로 활성화될 예정입니다.

  • OAuth 2.0 (talk_calendar 스코프)
  • https://kauth.kakao.com/oauth/authorize 동의 후 localhost:8888/kakao/callback 콜백
  • 사용자 정보(kapi.kakao.com/v2/user/me)와 캘린더 목록 조회
  • Pull/Push 양방향 동기화

추가 정보는 별도 공지로 안내됩니다.

서로 다른 제공자를 동시에 연결할 수 있으며, 각 캘린더는 다음과 같이 분리됩니다.

독립된 토큰

ConnectionStoreDB가 제공자별로 토큰을 분리 저장합니다. 한 계정의 만료가 다른 계정에 영향을 주지 않습니다.

독립된 SyncEngine

Google/Microsoft/Naver/Kakao 각각 자체 SyncEngine 인스턴스를 보유합니다. 한 제공자의 장애가 다른 동기화를 중단시키지 않습니다.

색상 분리

각 캘린더는 제공자에서 가져온 색상으로 표시되어 시각적으로 구분됩니다.

QuickAdd 그룹화

일정 추가 팝업의 캘린더 드롭다운이 제공자별로 그룹화되어 표시됩니다.

작업동작
캘린더 토글 OFF위젯에 표시 중단, push 중단 (토큰은 유지)
계정 일시 비활성화자동 동기화 일시 정지, 토큰 유지 (다시 활성화 시 즉시 재개)
계정 제거(로그아웃)토큰/자격증명/사용자 정보/로컬 일정 사본 삭제, 외부 서버에는 영향 없음
  • 모든 제공자는 일정의 시간대 정보(IANA TZID 또는 UTC offset)를 보존합니다.
  • Naver(CalDAV)에서 받은 일정은 UTC로 저장되어 있으며, 표시 시 Windows 시스템 시간대로 변환됩니다.
  • 외부 캘린더의 알림(reminder) 설정은 풀 시 함께 가져오지만, 앱 자체 알림 시스템은 로컬 일정과 통일된 정책을 따릅니다. 자세한 내용은 알림 문서를 참고하세요.
증상가능한 원인해결
Microsoft 인증 후 무한 로딩localhost 8888 포트 점유다른 OAuth 흐름이 진행 중인지 확인 후 재시도
Microsoft interaction_required회사/학교 계정의 조건부 액세스 정책IT 관리자에게 사용 허용 요청
Naver Unauthorized일반 비밀번호 사용 시 차단됨앱 전용 비밀번호 발급 후 재로그인
Naver 캘린더 목록이 비어 있음CalDAV 자동 탐지 실패네이버 캘린더 웹에서 한 번이라도 접속해 캘린더가 활성화되어 있는지 확인
일정 변경이 외부에 반영되지 않음토큰 만료 또는 네트워크 오류자동 재시도 후에도 실패하면 로그아웃·재로그인
동기화 시점이 늦음자동 주기 대기새로고침 버튼으로 즉시 동기화

연결 정보는 모두 SQLite에 저장됩니다.

%AppData%/../sudapapadiary/Configurations/Database/sudapapa.db
└── ConnectionStore (제공자별 분리된 토큰/자격증명/사용자 정보)

토큰과 자격증명은 디바이스에 묶인 키로 암호화되며, 다른 PC로 단순 복사해도 복호화되지 않습니다. 다른 PC로 옮기려면 내보내기/가져오기의 안전한 백업 절차를 사용하세요.

항목GoogleMicrosoftNaverKakao
인증OAuth 2.0OAuth 2.0CalDAV (ID + 비번)OAuth 2.0
콜백 경로/callback/microsoft/callback(없음)/kakao/callback
증분 동기화표준 풀Delta Querysync-collection표준 풀
자동 동기화 주기5분5분5분5분 (예정)
일정 범위(전체 풀)-1년 ~ 현재무제한 (Delta)-1년 ~ +1년정책 확정 후
음력 보존
알림 보존부분예정
색상 표시예정
현재 상태정식정식정식예정

Q. Google이랑 Microsoft를 동시에 켜도 되나요?

네. 각 제공자는 독립된 SyncEngine과 토큰을 갖고 있어 서로 영향을 주지 않습니다. 색상이 다른 두 제공자의 일정이 한 캘린더 위젯에 함께 표시됩니다.

Q. 회사 Microsoft 365 계정도 되나요?

대부분의 회사 계정에서 작동합니다. 다만 IT 관리자가 조건부 액세스 정책으로 외부 앱 접근을 제한한 경우 인증 단계에서 차단될 수 있으며, 이 경우 관리자에게 사용 허용 요청이 필요합니다.

Q. 네이버 일반 비밀번호로 로그인이 안 됩니다.

2단계 인증 사용자는 일반 비밀번호로 CalDAV 접근이 차단됩니다. 네이버 보안 설정에서 애플리케이션 비밀번호를 발급받아 사용하세요. 일반 비밀번호 대신 앱 비밀번호 사용은 보안상으로도 권장됩니다.