구글 캘런더와 테스크 연결시 문제점 6편

“연결 성공”과 “제대로 작동”은 전혀 다른 이야기였다

Santiago Brain을 만들면서 꼭 넣고 싶었던 기능이 있었다.

바로 Google Calendar와 Google Tasks 연동이다.

이유는 단순했다.

나는 이미 Google Calendar에 일정을 기록하고 있었고, Google Tasks에도 할 일을 넣고 있었다.

그렇다면 Santiago Brain에서 별도로 다시 입력하기보다, 기존에 쓰던 정보를 그대로 불러오면 훨씬 편할 것이라고 생각했다.

처음에는 아주 쉽게 생각했다.

Google 계정을 연결하고,
일정을 불러오고,
오늘 화면에 보여주면 끝이라고 생각했다.

그런데 실제로 해보니 이 부분이 생각보다 훨씬 어려웠다.

첫 번째 문제는 “연결은 됐는데 아무것도 안 나오는 것”이었다

Google 계정 연결 자체는 성공했다.

로그인도 됐고, 권한도 허용했다.

그런데 Santiago Brain의 오늘 화면에는 일정이 보이지 않았다.

처음에는 연결이 실패한 줄 알았다.

하지만 다시 확인해보니 연결 자체는 되어 있었다.

문제는 연결과 데이터 조회가 다른 과정이라는 점이었다.

쉽게 말하면,

Google 계정과 악수는 했는데,
정작 그 안에 있는 일정 데이터를 제대로 가져오지 못하고 있었던 것이다.

이때 처음 알았다.

“로그인 성공”과 “데이터 연동 성공”은 같은 말이 아니다.

두 번째 문제는 어떤 캘린더를 읽을 것인가였다

Google Calendar에는 하나의 캘린더만 있는 것이 아니다.

기본 캘린더가 있고,
공휴일 캘린더가 있고,
다른 사람이 공유한 캘린더가 있을 수도 있다.

처음에는 단순히 Google Calendar를 읽으면 되는 줄 알았다.

하지만 실제로는 어떤 캘린더를 읽을지 정해야 했다.

기본 캘린더만 볼지,

공휴일까지 포함할지,

공유 캘린더도 읽을지,

여러 캘린더에 같은 일정이 있으면 어떻게 처리할지

기준이 필요했다.

결국 기술 문제라기보다 운영 규칙을 먼저 정해야 하는 문제였다.

세 번째는 날짜와 시간대 문제였다

일정 앱에서 가장 무서운 오류 중 하나는 시간이다.

사람 눈에는 10월 1일 오전 10시인데,

프로그램 내부에서는 다른 시간대로 계산될 수 있다.

한국은 UTC+9 시간대를 사용한다.

그런데 서버나 외부 API가 UTC 기준으로 데이터를 처리하면 날짜 경계가 어긋날 수 있다.

예를 들어 밤늦은 일정이 다음 날 일정으로 잡히거나,

내일 일정이 오늘 조회 범위에 들어오지 않는 문제가 생길 수 있다.

그래서 Santiago Brain에서는 Asia/Seoul 기준으로 날짜를 해석하는 것이 중요했다.

오늘은 어디까지인지,

내일은 몇 시부터 몇 시까지인지,

종일 일정은 어떻게 처리할지

정확하게 정해야 했다.

“오늘과 내일 일정”인데 오늘 것만 오는 문제도 생겼다

실제로 이런 일이 있었다.

오늘 일정 하나가 있고,
내일 일정도 하나 있었다.

그런데 아침에 온 문자에는 오늘 일정만 들어 있었다.

문자 제목은 분명히 **“오늘과 내일 일정”**이었다.

그런데 내용에는 오늘 것만 있었다.

이런 문제는 겉으로 보기에는 단순하다.

하지만 원인은 여러 가지일 수 있다.

조회 코드가 오늘만 보고 있을 수도 있고,

내일 종료 시각 계산이 잘못됐을 수도 있고,

Google Calendar와 Google Tasks 중 한쪽만 읽고 있을 수도 있고,

중복 제거 과정에서 내일 일정이 빠졌을 수도 있다.

이런 경험을 하면서 다시 느꼈다.

문자 한 줄이 정확하게 오게 만드는 뒤에는 생각보다 많은 조건이 숨어 있다.

Google Calendar와 Google Tasks는 역할도 달랐다

Calendar와 Tasks는 비슷해 보이지만 성격이 다르다.

Calendar는 언제 무엇을 할 것인가를 기록하는 데 가깝다.

Tasks는 무엇을 해야 하는가를 기록하는 데 가깝다.

그래서 Santiago Brain에서는 둘을 똑같이 처리하면 안 됐다.

예를 들어,

오후 2시에 병원 예약이 있다면 Calendar 일정이다.

“여행 사전 연락하기”처럼 마감일만 있다면 Tasks에 더 가깝다.

오늘 화면에서는 둘을 함께 보여줄 수 있지만,

뒤에서는 서로 다른 출처라는 것을 구분해야 한다.

오래전에 끝난 일이 계속 오늘 우선순위에 올라오기도 했다

Google Tasks를 연결하면서 꽤 재미있는 문제가 하나 생겼다.

예전에 만들어둔 **“광주 귀향”**이라는 할 일이 있었다.

실제로는 이미 오래전에 끝난 일이었다.

그런데 Google Tasks 원본에서 완료 처리가 되어 있지 않았다.

그러다 보니 Santiago Brain은 이것을 이렇게 해석했다.

“마감일은 지났고, 아직 미완료다.”

그래서 오늘 우선순위에 계속 올려버렸다.

사람 입장에서는 이미 끝난 일인데,

AI와 프로그램 입장에서는 여전히 미완료 상태였던 것이다.

이 문제는 아주 중요한 교훈을 줬다.

프로그램은 내가 머릿속으로 알고 있는 사실을 모른다.

데이터에 남아 있는 상태만 보고 판단한다.

모든 오래된 할 일을 자동으로 숨기면 또 문제가 생긴다

처음에는 이렇게 생각할 수도 있다.

“그럼 오래된 할 일은 그냥 자동으로 다 숨기면 되지 않을까?”

하지만 그렇게 하면 진짜 중요한 미완료 일까지 사라질 수 있다.

예를 들어 세금 신고나 계약 갱신 같은 일이 마감일을 넘겼다고 해서 자동으로 숨기면 안 된다.

그래서 더 안전한 방법을 선택했다.

Google 원본을 무조건 바꾸는 대신,

Santiago Brain 안에서 특정 항목을
**“오늘 우선순위에서 제외”**할 수 있게 하는 방식이다.

이렇게 하면 사용자가 실제 상황을 가장 잘 알고 있으니,

끝난 일은 숨기고,

아직 중요한 일은 계속 남길 수 있다.

중복 문제도 있었다

같은 내용이 Google Calendar와 Google Tasks 양쪽에 들어 있는 경우도 있을 수 있다.

또 Brain 내부 할 일에도 비슷한 제목이 있을 수 있다.

이 경우 화면에 같은 일이 두세 번 보이면 불편하다.

그래서 중복을 제거하는 기준도 필요했다.

가능하면 고유 ID를 기준으로 보고,

ID를 비교할 수 없으면 제목과 날짜, 출처를 함께 보면서 조심스럽게 처리해야 했다.

이 부분도 자동화가 너무 공격적이면 오히려 다른 일을 하나로 합쳐버릴 수 있다.

그래서 중복 제거는 최대한 보수적으로 처리하는 편이 안전했다.

오늘 화면에서는 너무 먼 일정도 보여줄 필요가 없었다

Google Tasks를 모두 불러오다 보니 또 다른 문제가 생겼다.

몇 달 뒤 할 일까지 오늘 화면에 보이면 화면이 너무 복잡해진다.

그래서 예정된 할 일은 기준을 정했다.

오늘 이전은 마감 지난 할 일,

오늘은 오늘 할 일,

내일부터 앞으로 14일 이내는 예정된 할 일,

그보다 먼 일정은 오늘 화면에서는 숨기고 전체 할 일 화면에서 확인하도록 했다.

이런 기준 하나도 실제로 써보면서 정하게 됐다.

처음부터 책상 위에서 완벽하게 설계한 것이 아니다.

읽기 전용이라는 제약도 있었다

Google에서 가져온 할 일은 Santiago Brain 내부 할 일과 다르게 취급할 필요가 있었다.

Brain 내부 데이터는 직접 수정할 수 있지만,

Google 데이터를 함부로 바꾸면 예상하지 못한 결과가 생길 수 있다.

그래서 일부 화면에서는 Google 할 일을 읽기 전용으로 보여주기도 했다.

대신 Brain 쪽에서

우선순위 제외,

표시 여부,

추천 여부

같은 것을 조정하는 방식이 더 안전했다.

기술보다 중요한 것은 ‘규칙’을 정하는 일이었다

Google 연동을 하면서 가장 크게 배운 것은 이것이다.

처음에는 기술적으로 API만 연결하면 된다고 생각했다.

하지만 실제 어려움은 이런 것이었다.

오늘과 내일의 기준은 무엇인가.

어떤 캘린더를 읽을 것인가.

Google Tasks와 Calendar를 어떻게 구분할 것인가.

오래된 미완료 할 일은 어떻게 할 것인가.

같은 일정이 두 곳에 있으면 어떻게 할 것인가.

앞으로 몇 일까지 보여줄 것인가.

즉, 프로그램을 제대로 만들려면 기술보다 먼저 운영 규칙을 정해야 했다.

자동화는 편하지만 잘못되면 더 불편해진다

일정을 자동으로 불러오는 기능은 분명 편하다.

하지만 잘못된 일정이 계속 보이거나,

내일 일정이 빠지거나,

끝난 일이 계속 우선순위로 올라오면

오히려 직접 확인하는 것보다 더 불편해진다.

그래서 자동화에서 가장 중요한 것은 기능 수가 아니라 신뢰성이라고 생각하게 됐다.

아침에 오는 일정 문자를 믿을 수 있어야 한다.

오늘 화면에 나오는 우선순위를 믿을 수 있어야 한다.

자동화가 한번 틀리면 사용자는 전체 시스템을 의심하게 된다.

그래서 Santiago Brain에서는 앞으로도 이 부분을 계속 다듬어야 한다.

연결은 기술이고, 신뢰는 설계다

Google Calendar와 Google Tasks를 연결하는 것은 기술적인 작업이다.

하지만 그 데이터를 내 삶에 맞게 보여주는 것은 다른 문제다.

나는 이 과정에서 이렇게 느꼈다.

서비스를 연결하는 것은 기술이고,
그 연결을 믿고 사용할 수 있게 만드는 것은 설계다.

Santiago Brain은 아직 계속 수정 중이다.

하지만 이런 문제를 하나씩 해결하면서 단순한 일정 표시 앱에서 조금씩 실제로 사용할 수 있는 개인 AI 비서에 가까워지고 있다.

다음 글 예고

7편 — 아침마다 내 일정을 문자로 받게 만들기까지

다음 글에서는 Google Calendar와 Google Tasks의 일정을 불러온 다음,

매일 아침 오늘과 내일 일정을 정리해서 문자로 보내고,

오후에는 다시 한번 일정을 점검하도록 만들면서 겪었던 일을 이야기해보려고 한다.

문자 서비스 연결,

발신번호 승인,

API 인증,

예약 작업,

문자는 보내졌는데 일정 내용이 틀리는 문제,

ChatGPT 알림은 오는데 Santiago Brain 문자는 오지 않는 문제까지,

자동 알림 하나를 제대로 만드는 것이 왜 생각보다 어려웠는지 정리해보겠다.