Skip to content

[BUG] 애플(iCloud) 캘린더 연동 동작 불가 — 앱 인증(JWT)과 불일치, 쿠키 방식으로 재정렬 필요 #54

Description

@kokkumong

🐛 버그 설명 (Describe the bug)

애플(iCloud) 캘린더 연동이 동작하지 않는다. CalDAV 엔진 로직 자체는 정상(단위 테스트 24개 통과)이지만, 애플 연동만 앱이 실제로 채택하지 않은 "Supabase Auth 중심 설계" 위에 구현되어 통합 계층에서 막힌다.

근본 원인(3가지):

  1. 인증 토대 불일치 — 앱의 실제 로그인은 커스텀 JWT 쿠키(accessToken) + Prisma user를 쓴다(/api/auth/login, /api/auth/me). 하지만 애플 라우트는 requireSession()supabase.auth.getUser()(Supabase Auth 세션)를 요구한다. 일반 로그인 유저는 Supabase 세션이 없어 /api/icloud/connect에서 즉시 401.
  2. profiles FK 미충족icloud_connections.profile_idprofiles(id) FK인데, 회원가입은 Prisma user만 만들고 Supabase profiles를 채우는 코드가 어디에도 없다. 401을 넘겨도 FK 위반으로 저장 실패. RLS도 auth.uid() 기반이라 Prisma user.id와 절대 일치하지 않는다.
  3. ENCRYPTION_SECRET 미설정src/lib/crypto.ts가 요구하는 64자리 hex ENCRYPTION_SECRET.env.local·.env.example·배포 어디에도 없다. 설정돼도 connect 단계에서 throw.

참고: 인증 시스템 Supabase Auth 통합(#45)이 미완료라 발생한 구조적 부채. 구글/네이버 캘린더는 토큰을 httpOnly 쿠키에 직접 저장(google_tokens)해 로그인 방식과 무관하게 동작하는데, 애플만 다른 토대에 있다.

🔄 재현 방법 (To Reproduce)

  1. 이메일/비밀번호로 로그인한다(앱의 기본 로그인).
  2. /calendar/connect 페이지로 이동한다.
  3. Apple ID + 앱 전용 암호를 입력하고 "확인"을 누른다.
  4. /api/icloud/connect가 401("인증이 필요합니다")을 반환하며 연동이 실패한다.

🎯 예상되는 정상 동작 (Expected behavior)

구글/네이버 캘린더와 동일하게, 로그인 방식과 무관하게 Apple ID + 앱 전용 암호로 연동되고 캘린더 일정 조회/생성이 동작해야 한다.

✅ 해결 방향 (계획)

구글/네이버와 동일한 httpOnly 쿠키 저장 방식으로 애플 라우트를 재정렬한다. Supabase/RLS/profiles 의존을 제거한다.

  • src/lib/caldav/connection-cookie.ts 신설 — google/auth.ts의 쿠키 헬퍼를 본떠 연결정보(appleId, 앱 암호, principalUrl, calendarHomeUrl, 캘린더 목록) 저장/조회/삭제
  • /api/icloud/connectrequireSession+Supabase 제거, discovery 후 쿠키에 저장
  • /api/icloud/calendars — 쿠키에서 조회
  • /api/icloud/events/query·/create — 쿠키 기반으로 전환, calendarId(UUID 계약) → calendarUrl 기반으로 변경
  • /api/icloud/disconnect — 쿠키 삭제
  • /api/calendar/status — 애플 분기를 쿠키 조회로 전환(구글 분기도 동일 문제 있음 — 함께 검토)
  • 앱 전용 암호 보관 방식 결정: 평문(구글과 동일) vs ENCRYPTION_SECRET 암호화. 암호화 채택 시 ENCRYPTION_SECRET.env.example/배포에 추가
  • 사용하지 않게 되는 Supabase 마이그레이션(20260414000000_icloud_connections.sql) 정리 여부 결정
  • 배포(Vercel)에서 실제 Apple 계정으로 연동/조회 검증

💻 환경 정보 (Environment)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions