Google Calendar API - extendedProperties

worldclasscitizen·2026년 3월 5일

SSAFY

목록 보기
6/9

문제 상황 발견

서비스 기획 단계에서, 로직 내에 결함을 발견했다.

우리 서비스에서는 사용자가 Google 계정을 연동해서 에이전트가 Google Calendar를 활용해 일정을 관리해 주는 기능을 제공한다.

이때, 사용자가 우리가 생성해 준 일정의 제목이나 날짜를 임의로 수정해 버리면, 바뀐 일정이 어떻게 바뀌었는지 추적해야 하는데, 그 로직이 비어 있었다.


브레인스토밍

이를 해결하기 위한 아이디어까지 고안해서 팀원들에게 공유해 보았다.

아래는 내가 작성한 대화 내용의 전문이다.


해결책 제안

아이디어1: 우리 서비스에서 추적을 놓친 커리큘럼 옆에 경고 표시를 띄운다.

1. 경고문 표시

⚠️ "추적하던 커리큘럼이 Google Calendar에 존재하지 않습니다!" ⚠️

🟢 [ 제가 수정했어요 ]
🔵 [ Google Calendar에 다시 넣어주세요 ]

2. 바뀐 일정을 수기로 입력하도록 안내

{커리큘럼_이름} 커리큘럼을 어느 날짜로 변경하셨나요?

[ 일정 제목: 정보처리기사 ]
[ 시작일: 2026.   .   . ]
[ 종료일: 2026.   .   . ]

🔴 [ 커리큘럼을 삭제했어요 ]

3. 입력받은 일정 정보로 Google Calendar를 재확인

날짜만 옮겨져 있는 경우

커리큘럼을 발견했습니다!

OR

커리큘럼의 기간(+ 제목)이 바뀐 경우
ex. 7일짜리였는데 6일로 바뀜

커리큘럼을 발견했습니다!
수정된 기간에 알맞게 커리큘럼을 재생성할까요?

🟢 [ 네 ]
🟡 [ 다시 입력할게요 ]

↓

네 → 커리큘럼 재생성
다시 입력 → 2번으로 되돌아감

OR

잘못된 일정 제목을 입력한 경우
ex. Google Calendar에는 '정보처리기사'인데 입력창에는 '정처기'라고 입력해버림

커리큘럼을 발견하지 못했습니다.
커리큘럼을 삭제할까요?

🟢 [ 네 ]
🟡 [ 다시 입력할게요 ]

↓

네 → 커리큘럼 삭제
다시 입력 → 2번으로 되돌아감

피드백 1 from 팀원
Q. 사용자에게 직접 수정된 일정의 내용을 입력받도록 하는 것이 UX상 귀찮은 작업은 아닐까요?

우리 서비스가 에이전트라는 점을 고려했을 때, '귀찮은 UX'는 반드시 지양해야만 했다.

사용자가 Google Calendar에서 수정한 일정을 수기로 입력하지 않아도, 우리 서비스 측에서 자동으로 추적할 수 있는 방법을 생각했다.

얼마 전에 유튜브 '코딩애플' 님의 영상을 시청하던 도중, 투명 알파벳이 있다는 내용을 접한 적이 있었다.

이 문자는 사용자에게 시각적으로 제공되지 않는 '숨어 있는 문자'이기 때문에 컴퓨터만 읽을 수 있다.

이 기능을 활용해서 일정의 Description에 ID를 숨겨 놓는다면, 일정 제목이나 날짜가 변경되어도 우리가 추적할 수 있을 것이다.

하지만 또 다른 고민이 생겼다.


피드백 2 from Gemini
Q. 사용자가 Description을 우발적으로 훼손할 수도 있지 않나요?
Q. 일정을 복제하면 같은 ID를 가진 일정이 여러 개 존재하게 되는 문제가 있는 거 같은데요?
Q. 추적 중인 일정을 찾기 위해 캘린더의 모든 일정 데이터를 가져와서 일일이 비교해야 하는 건가요?

제미나이가 이것저것 우려되는 점을 짚어줬다.

그런데 동시에 새로운 해결책을 추천 받았다!


1. eventID를 이미 제공하고 있다.

이 방법은 단순하게 Event ID로 추적하는 방식이다.

하지만 eventId를 사용할 경우, API 호출량이 많아질 수 있다.

예를 들어 30일짜리 커리큘럼을 생성해서 30개의 일정이 캘린더에 등록되었다고 가정하면, 서비스 DB에서 30개의 eventId를 꺼내서 일정에 변동이 없는지 확인하기 위해 API를 30번 호출하거나, 복잡하게 조회해야 한다.

그래서 더 좋은 방법이 있다.


2. Google Calendar API의 extendedProperties를 활용할 수 있다.

이미 서드파티 앱에서 일정 정보가 바뀌어도 추적할 수 있도록 Google Calendar API에서 extendedProperties 기능을 제공하고 있었다.

30개의 일정 모두에 curriculum_id=react_basic_01처럼 속성을 부여해 두면, 단 한 번의 API 호출만으로도 해당 ID를 가진 모든 일정을 불러올 수 있다.

뿐만 아니라, 아래처럼 우리 서비스 로직에 필요한 다양한 정보를 함께 담아둘 수도 있다.

"extendedProperties": {
	"private": {
    	"curriculum_id": "c_123",
        "chapter": "chapter_3",
        "is_mandatory": "true"
    }
}

결론

Google Calendar API의 extendedProperties 기능을 사용하면 생성된 일정을 서드파티 앱에서 추적 · 관리할 수 있다.

0개의 댓글