CalDAV API 개발자 가이드
컬렉션을 사용해 정리하기
내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.
CalDAV는 클라이언트가 원격 서버의 캘린더 정보에 액세스할 수 있는 표준을 제공하는 WebDAV의 확장 프로그램입니다.
Google에서는 CalDAV 프로토콜을 사용하여 캘린더를 보고 관리할 수 있는 CalDAV 인터페이스를 제공합니다.
사양
관련 사양별로 Google의 CalDAV 지원은 다음과 같습니다.
- rfc4918: HTTP Extensions for Web Distributed Authoring and Versioning
(WebDAV)
- HTTP 메서드
GET
, PUT
, HEAD
, DELETE
, POST
, OPTIONS
, PROPFIND
, PROPPATCH
을 지원합니다.
- HTTP 메서드
LOCK
, UNLOCK
, COPY
, MOVE
또는 MKCOL
, If*
헤더 (If-Match
제외)를 지원하지 않습니다.
- 임의의 (사용자 정의) WebDAV 속성을 지원하지 않습니다.
- WebDAV 액세스 제어 (rfc3744)를 지원하지 않습니다.
- rfc4791: Calendaring Extensions to WebDAV (CalDAV)
- HTTP 메서드
REPORT
를 지원합니다. 모든 보고서가 구현됩니다(일정 확인 쿼리 제외).
- HTTP 메서드
MKCALENDAR
를 지원하지 않습니다.
AUDIO
작업을 지원하지 않습니다.
- rfc5545: iCalendar
- CalDAV 인터페이스에 노출된 데이터는 iCalendar 사양에 따라 형식이 지정됩니다.
- 현재
VTODO
또는 VJOURNAL
데이터를 지원하지 않습니다.
- 사용자가 설정할 수 있는 URL 속성을 허용하는 Apple iCal® 확장 프로그램을 지원하지 않습니다.
- rfc6578: WebDAV의 컬렉션 동기화
- 클라이언트 애플리케이션은 초기 동기화 후 이 작동 모드로 전환해야 합니다.
- rfc6638: Scheduling Extensions to CalDAV
- 항상 비어 있는 간단한 '받은편지함'을 지원합니다.
- 수신한 초대는 '받은편지함'에 배치되지 않고 '일정' 컬렉션에 자동으로 전송됩니다.
- 일정 확인을 지원하지 않습니다.
- caldav-ctag-02: CalDAV의 Calendar Collection Entity Tag (CTag)
- 캘린더
ctag
는 리소스 etag
와 같습니다. 캘린더의 항목이 변경되면 캘린더도 변경됩니다. 이를 통해 클라이언트 애플리케이션은 변경된 이벤트를 동기화할 필요가 없음을 빠르게 확인할 수 있습니다.
- calendar-proxy: CalDAV의 Calendar User Proxy 기능
- 위임을 지원하지 않는 iOS 기기에서 캘린더 동기화 성능을 개선하려면 iOS UserAgent와 함께
calendar-proxy-read-for
또는 calendar-proxy-write-for
속성을 사용해야 합니다.
아직 관련 사양을 모두 완전히 구현하지는 않았습니다. 하지만 Apple의 캘린더 앱과 같은 많은 클라이언트의 경우 CalDAV 프로토콜이 올바르게 상호 운용되어야 합니다.
참고: 계정 보안 및 악용 방지를 위해 Google에서는 CalDAV를 통해 데이터에 액세스하는 클라이언트 애플리케이션에 쿠키를 설정할 수 있습니다.
클라이언트 ID 만들기
CalDAV API를 사용하려면 Google 계정이 있어야 합니다.
사용할 수 있는 계정이 이미 있다면 별도의 조치를 취할 필요가 없습니다.
CalDAV API에 요청을 보내려면 먼저 프로젝트를 만들어 Google API 콘솔에 클라이언트를 등록해야 합니다.
Google API 콘솔로 이동합니다. 프로젝트 만들기를 클릭하고 이름을 입력한 다음 만들기를 클릭합니다.
다음 단계는
CalDAV API를 활성화하는 것입니다.
프로젝트에 API를 사용 설정하려면 다음 단계를 따르세요.
- Google API 콘솔에서 API 라이브러리를 엽니다. 메시지가 표시되면
프로젝트를 선택하거나 새 프로젝트를 만듭니다. API 라이브러리에는 사용 가능한 모든 API가 제품군과 인기도를 기준으로 분류되어 있습니다.
- 사용 설정하려는 API가 목록에 없는 경우 검색을 사용하여 찾습니다.
- 사용 설정하려는 API를 선택한 다음 사용 설정 버튼을 클릭합니다.
- 메시지가 표시되면 결제를 사용 설정합니다.
- 메시지가 표시되면 API의 서비스 약관에 동의합니다.
CalDAV API 요청을 실행하려면
클라이언트 ID와
클라이언트 보안 비밀번호가 필요합니다.
프로젝트의 클라이언트 ID와 클라이언트 비밀번호를 찾으려면 다음 단계를 따르세요.
- 기존 OAuth 2.0 사용자 인증 정보 선택 또는 사용자 인증 정보 페이지를 엽니다.
- 아직 만들지 않은 경우 사용자 인증 정보 만들기 > OAuth 클라이언트 ID를 클릭하고 사용자 인증 정보를 만드는 데 필요한 정보를 제공하여 프로젝트의 OAuth 2.0 사용자 인증 정보를 만듭니다.
- OAuth 2.0 클라이언트 ID 섹션에서 클라이언트 ID를 찾습니다.
자세한 내용을 보려면 클라이언트 ID를 클릭하세요.
Google의 CalDAV 서버에 연결
CalDAV 인터페이스를 사용하려면 클라이언트 프로그램이 두 시작점 중 하나에서 캘린더 서버에 처음 연결합니다. 어떤 경우든 연결은 HTTPS를 통해 이루어져야 하며 OAuth 2.0 인증 스키마를 사용해야 합니다. CalDAV 서버는 Google 계정의 OAuth 2.0 인증을 통해 HTTPS로 도착하지 않는 한 요청 인증을 거부합니다.
HTTP를 통해 연결을 시도하거나 기본 인증을 사용하면 HTTP 401 Unauthorized
상태 코드가 표시됩니다.
클라이언트 프로그램 (예: Apple의 Calendar 앱)에 시작점으로 사용할 주 구성원 컬렉션이 필요한 경우 연결할 URI는 다음과 같습니다.
https://apidata.googleusercontent.com/caldav/v2/calid/user
여기서 calid
는 액세스할 캘린더의 '캘린더 ID'로 대체해야 합니다. 이 정보는 Google Calendar 웹 인터페이스를 통해 확인할 수 있습니다. 캘린더 이름 옆의 풀다운 메뉴에서 캘린더 설정을 선택합니다. 결과 페이지에서 캘린더 ID는 캘린더 주소라는 섹션에 표시됩니다. 사용자의 기본 캘린더의 캘린더 ID는 해당 사용자의 이메일 주소와 동일합니다.
클라이언트 프로그램 (예: Mozilla Sunbird)에 캘린더 컬렉션이 시작점으로 필요한 경우 연결할 URI는 다음과 같습니다.
https://apidata.googleusercontent.com/caldav/v2/calid/events
이전 엔드포인트 https://www.google.com/calendar/dav는 지원이 중단되었으며 더 이상 지원되지 않습니다. 이 엔드포인트를 사용할 경우 위험은 본인이 부담하게 됩니다.
위에서 설명한 새 엔드포인트 형식으로 전환하는 것이 좋습니다.
iCal®은 Apple Inc.의 상표입니다.
달리 명시되지 않는 한 이 페이지의 콘텐츠에는 Creative Commons Attribution 4.0 라이선스에 따라 라이선스가 부여되며, 코드 샘플에는 Apache 2.0 라이선스에 따라 라이선스가 부여됩니다. 자세한 내용은 Google Developers 사이트 정책을 참조하세요. 자바는 Oracle 및/또는 Oracle 계열사의 등록 상표입니다.
최종 업데이트: 2025-08-29(UTC)
[null,null,["최종 업데이트: 2025-08-29(UTC)"],[],[],null,["# CalDAV API Developer's Guide\n\nCalDAV is an extension of WebDAV that provides a standard for clients to access\ncalendar information on a remote server.\n\nGoogle provides a CalDAV interface that you can use to view and manage calendars\nusing the CalDAV protocol.\n\nSpecifications\n--------------\n\nFor each of the relevant specifications, Google's CalDAV support is as follows:\n\n- [rfc4918: HTTP Extensions for Web Distributed Authoring and Versioning\n (WebDAV)](http://tools.ietf.org/html/rfc4918)\n - Supports the HTTP methods `GET`, `PUT`, `HEAD`, `DELETE`, `POST`, `OPTIONS`, `PROPFIND` and `PROPPATCH`.\n - Does not support the HTTP methods `LOCK`, `UNLOCK`, `COPY`, `MOVE`, or `MKCOL`, or the `If*` header (except for `If-Match`).\n - Does not support arbitrary (user-defined) WebDAV properties.\n - Does not support WebDAV Access Control (rfc3744).\n- [rfc4791: Calendaring Extensions to WebDAV (CalDAV)](http://tools.ietf.org/html/rfc4791)\n - Supports the HTTP method `REPORT`. All reports except free-busy-query are implemented.\n - Does not support the HTTP method `MKCALENDAR`.\n - Does not support the `AUDIO` action.\n- [rfc5545: iCalendar](http://tools.ietf.org/html/rfc5545)\n - Data exposed in the CalDAV interface is formatted according to the iCalendar specification.\n - Does not currently support `VTODO` or `VJOURNAL` data.\n - Does not support the Apple iCal® extension to allow user-settable URL properties.\n- [rfc6578: Collection Synchronization for WebDAV](http://tools.ietf.org/html/rfc6578)\n - Client applications must switch to this mode of operation after the initial sync.\n- [rfc6638: Scheduling Extensions to CalDAV](http://tools.ietf.org/html/rfc6638)\n - Supports a trivial \"inbox,\" which is always empty.\n - Invitations you receive are automatically delivered into your \"events\" collection rather than being placed into your \"inbox.\"\n - Does not support free-busy lookup.\n- [caldav-ctag-02: Calendar Collection Entity Tag (CTag) in CalDAV](https://trac.calendarserver.org/browser/CalendarServer/trunk/doc/Extensions/caldav-ctag.txt)\n - The calendar `ctag` is like a resource `etag`; it changes when anything in the calendar has changed. This allows the client application to quickly determine that it does not need to synchronize any changed events.\n- [calendar-proxy: Calendar User Proxy Functionality in CalDAV](https://github.com/apple/ccs-calendarserver/blob/master/doc/Extensions/caldav-proxy.txt)\n - To improve the performance of calendar synching from iOS devices, which don't support delegation, using the `calendar-proxy-read-for` or `calendar-proxy-write-for` properties with an iOS UserAgent will fail.\n\nWe have not yet provided a full implementation of all of the relevant\nspecifications. However, for many clients such as Apple's Calendar app\nthe CalDAV protocol should interoperate correctly.\n\nNote: For account security and to prevent abuse, Google\nmight set cookies on client applications that access data via CalDAV.\n\nCreating your client ID\n-----------------------\n\nTo use the CalDAV API you need to have\na [Google Account](https://www.google.com/accounts/NewAccount).\nIf you already have an account you can use, then you're all set.\n\nBefore you can send requests to the CalDAV API, you must register\nyour client with the [Google API Console](https://console.cloud.google.com/) by creating a project.\n\n\nGo to the [Google API Console](https://console.cloud.google.com/project). Click **Create project** ,\nenter a name, and click **Create**.\nThe next step is to activate **CalDAV API** .\n\nTo enable an API for your project, do the following:\n\n1. [Open the API Library](https://console.cloud.google.com/apis/library) in the Google API Console. If prompted, select a project or create a new one. The API Library lists all available APIs, grouped by product family and popularity.\n2. If the API you want to enable isn't visible in the list, use search to find it.\n3. Select the API you want to enable, then click the **Enable** button.\n4. If prompted, enable billing.\n5. If prompted, accept the API's Terms of Service.\n\nTo perform **CalDAV API** requests you will need **Client ID** and **Client Secret** .\n\nTo find your project's client ID and client secret, do the following:\n\n1. Select an existing OAuth 2.0 credential or open the [Credentials page](https://console.cloud.google.com/apis/credentials).\n2. If you haven't done so already, create your project's OAuth 2.0 credentials by clicking **Create credentials \\\u003e OAuth client ID**, and providing the information needed to create the credentials.\n3. Look for the **Client ID** in the **OAuth 2.0 client IDs** section. For details, click the client ID.\n\n\u003cbr /\u003e\n\nConnecting to Google's CalDAV server\n------------------------------------\n\nTo use the CalDAV interface, a client program initially connects with the\ncalendar server at one of two starting points. In either case, the connection\nmust be made over HTTPS and must use the [OAuth 2.0](/workspace/calendar/auth)\nauthentication scheme. The CalDAV server will refuse to authenticate a request\nunless it arrives over HTTPS with OAuth 2.0 authentication of a Google account.\nAttempting to connect over HTTP or using Basic Authentication results in an HTTP\n`401 Unauthorized` status code.\n\nIf the client program (such as Apple's Calendar app) requires a\nprincipal collection as the starting point, the URI to connect to is: \n\n```\nhttps://apidata.googleusercontent.com/caldav/v2/calid/user\n```\n\nWhere \u003cvar class=\"apiparam\" translate=\"no\"\u003ecalid\u003c/var\u003e should be replaced by the\n\"calendar ID\" of the calendar to be accessed. This can be found through the\nGoogle Calendar web interface as follows: in the pull-down menu next to the\ncalendar name, select **Calendar Settings** . On the resulting page\nthe calendar ID is shown in a section labeled **Calendar\nAddress**. The calendar ID for a user's primary calendar is the same as\nthat user's email address.\n\nIf a client program (such as\n[Mozilla Sunbird](http://www.mozilla.org/projects/calendar/sunbird/)) requires a\ncalendar collection as the starting point, the URI to connect to is: \n\n```\nhttps://apidata.googleusercontent.com/caldav/v2/calid/events\n```\n\n\nThe old endpoint **https://www.google.com/calendar/dav** is\ndeprecated and no longer supported; use it at your own risk.\nWe recommend you transition to the new endpoint format described above.\n\n\niCal® is a trademark of Apple Inc.\n\n\u003cbr /\u003e"]]