Calendar의 반복 데이터를 분석해보자


캘린더의 이벤트 요소중 단순 키값으로 가져올 수 없는 것들이있다. 그 대표적인 예가 바로 reccurence, 반복에 대한 value이다. caly에서는 반복이벤트 처리를 예외적으로 관리하고있다. 반복이벤트를 어떻게 표현하는지 알아보자


Reccurence

유저가 반복을 선택한 이벤트가 있다면 Goolge의 경우 reccurence 라는 항목이 생기게된다. reccurence의 value에는 String으로 이루어진 여럿 정보들이 담겨있다. (이 글에서의 설명은 GOOGLE 캘린더 기준으로한다. caldav역시 담겨있는 모양만 다를뿐 key와 value는 모두 일치한다.)

1. FREQ

반복의 기간을 나타낸다.

위와 같은 value가 존재하고 각각 매년,매주,매일 반복을 의미한다.

2. BYDAY

반복할 요일을 나타낸다.

일,월,화,수,목,금,토 를 나타낸다.

위의 두가지 경우로 아래와 같이 반복이 표현될 수 있다.

   "recurrence": [
    "RRULE:FREQ=WEEKLY;BYDAY=FR"
   ]
3. count

몇 번 반복될것인가를 나타낸다.

35번의 이벤트가 반복될것이다.

4. INTERVAL

몇 주마다 반복될것인지를 나타낸다..

FREQ가 weekly일경우 2주마다 반복하게 된다는 의미를 지닌다.

위의 두가지를 포함시켜 아래와 같이 반복이 표현 될 수 있다.

//매주 2주씩 35번의 반복이 월,화,수,목,금,토,일 반복될예정이다. 
   "recurrence": [
    "RRULE:FREQ=WEEKLY;COUNT=35;INTERVAL=2;BYDAY=SU,MO,TU,WE,TH,FR,SA"
   ]
5. UNTIL

언제까지 반복할것인가를 나타낸다.

UNTIL까지 포함시킨예는 아래와 같다.

//매주 2주에 한번씩 2017년04월20일 21:00까지 월,화,수,목,금,토,일 반복될예정이다. 
   "recurrence": [
    "RRULE:FREQ=WEEKLY;UNTIL=20170420T210000Z;INTERVAL=2;BYDAY=SU,MO,TU,WE,TH,FR,SA"
   ]

마치며

위 와 같은 여러 경우가 존재함을 확인하였지만, 해당 값들이 단순 String이라 이를 분류하여 알맞게 디비에 넣는 작업을 진행할 예정이다. (키벨류로 분류하여 만들어줬으면 얼마나 편했을까….)

기술적으론 크게 어려운 작업은 아니지만, caly에서 반복이벤트를 매번 추천해줘야하는가에 대해서는 많은 고민이 필요할 것이다.

끝.