제목, 장소, 날짜와 시간, 시간대, 반복, 참석자, 알림, 메모를 입력한 다음 .ics 파일을 내려받거나 캘린더에서 바로 여세요. 일정을 붙여 넣거나 문서 또는 사진을 첨부해 여러 일정을 한 번에 만들 수도 있습니다.
jCal이란 무엇이며, .ics 파일과 어떻게 다른가요?
jCal은 JSON으로 작성된 iCalendar로, 2014년 RFC 7265로 표준화되었습니다. .ics 파일과 정확히 동일한 데이터 — 동일한 속성(property), 매개변수(parameter), 구성요소(component) — 를 담고 있지만, 객체가 아니라 중첩된 배열로 표현합니다. 구성요소가 속성을 반복할 수 있고 순서가 의미를 가질 수 있기 때문입니다. 캘린더는 ["vcalendar", [properties], [components]] 형태이고, 각 속성은 [name, parameters, valueType, value] 형태이므로 SUMMARY:Standup은 ["summary", {}, "text", "Standup"]이 됩니다. 이는 검색 엔진을 위해 이벤트를 설명하며 훨씬 적은 정보만 담는 JSON-LD의 schema.org Event와는 다릅니다. ICS Maker는 .ics와 jCal을 서로 변환하는 대신 하나의 이벤트 모델로부터 각각 생성하므로, 두 형식이 이벤트의 내용에 대해 서로 어긋날 수 없습니다.
구조
RFC 7265는 iCalendar를 객체가 아닌 배열로 대응시킵니다. 캘린더에서는 순서와 반복이 중요한데, JSON 객체는 이 둘 중 어느 것도 제공하지 않기 때문입니다. 캘린더는 ["vcalendar", [properties], [components]]이며, 각 속성은 [name, parameters, valueType, value]입니다 — 이름은 소문자로, 매개변수는 객체로, 타입은 RFC 5545 값 타입 중 하나로 표현됩니다.
따라서 SUMMARY:Standup는 ["summary", {}, "text", "Standup"]이 되고, 시간대가 지정된 시작 시각은 ["dtstart", {"tzid":"Europe/London"}, "date-time", "2026-08-15T09:00:00"]이 됩니다. 여기서 날짜-시각은 iCalendar의 압축된 표기가 아니라 ISO 표기법을 따르며, 시간대는 매개변수로 이동합니다.
왜 가치가 있는가
iCalendar는 줄 접기, 이스케이프 규칙, CRLF 줄바꿈이 있는 텍스트 형식이며, 이를 올바르게 파싱하는 일은 보기보다 손이 많이 갑니다. jCal은 시간대, 반복 규칙, 알람, 참석자 같은 동일한 의미 정보를 이미 JSON을 다룰 줄 아는 모든 것에 별도의 파서 없이 전달합니다. 이는 이 페이지에서도 생성할 수 있는 schema.org의 Event와는 다른 역할입니다. JSON-LD는 검색 엔진을 위해 이벤트를 설명하며, 캘린더에 필요한 대부분의 정보를 생략합니다.
이 페이지가 이를 생성하는 방식
두 형식 모두 서로 변환되는 것이 아니라 동일한 이벤트로부터 작성됩니다. 변환기를 사용하면 텍스트 형식의 모든 이스케이프 처리 방식을 그대로 물려받게 되는데, jCal 값은 명시적으로 이스케이프가 해제되어 있습니다 — JSON은 자체적으로 따옴표 처리를 하기 때문입니다. 두 형식을 하나의 모델로부터 작성하면, 이벤트가 무엇인지에 대해서는 서로 어긋날 수 없고 오직 표기 방식만 다를 수 있습니다.
자주 묻는 질문
- jCal이란 무엇인가요?
- jCal은 iCalendar를 위한 JSON 형식으로, 2014년 RFC 7265로 표준화되었습니다. .ics 파일과 정확히 동일한 데이터 — 동일한 속성, 매개변수, 구성요소 — 를 중첩된 JSON 배열로 표현하므로, 의미를 잃지 않고 양방향으로 변환할 수 있습니다.
- jCal은 JSON-LD나 schema.org Event와 같은 것인가요?
- 아닙니다. jCal은 iCalendar를 완전하게 대응시킨 형식이므로 반복 규칙, 시간대, 알람, 참석자 참여 상태까지 담고 있습니다. JSON-LD의 schema.org Event는 검색 엔진 및 기타 리더를 위해 이벤트를 설명하는 형식으로, 의도적으로 훨씬 적은 정보만 담습니다. 이 빌더는 동일한 이벤트로부터 두 형식을 모두 생성합니다.
- jCal은 왜 객체 대신 배열을 사용하나요?
- 캘린더 구성요소는 참석자 여러 명, 예외 날짜 여러 개처럼 같은 속성을 여러 번 담을 수 있고, 그 순서가 의미를 가질 수 있기 때문입니다. 속성 이름을 키로 하는 JSON 객체로는 이 둘 중 어느 것도 표현할 수 없으므로, RFC 7265는 대신 위치 기반 배열을 사용합니다.
- jCal은 어디서 읽히나요?
- jCal은 틈새 형식이지만, ical.js 같은 JavaScript 캘린더 라이브러리에서 잘 지원되며 여러 서버 사이드 iCalendar 툴킷에서도 사용할 수 있습니다. 주요 캘린더 애플리케이션은 여전히 .ics를 기대하므로, 자체 시스템 간에는 jCal을 사용하고 사람들에게는 .ics 파일을 건네주세요.