Google antigravity 사용해 보기 2 - 테스트 관리 프로그램 개발 하기
[개발일지] Aura Task: 기기간 완벽한 동기화를 위한 험난한 여정 (UUID부터 Docker까지)
안녕하세요, 가야태자 @talkit입니다.
최근 며칠간 Google Calendar API와 MySQL을 연동한 스마트 할 일 관리 앱, Aura Task를 개발하며 겪었던 수많은 시행착오와 그 해결 과정을 공유하고자 합니다. 특히 어제 저녁부터 오늘 새벽까지 집중적으로 다루었던 '기기간 데이터 동기화 불일치' 해결 과정은 기술적으로도 배울 점이 많았습니다.
1. 프로젝트 개요: 왜 동기화가 문제였나?
Aura Task는 음성으로 할 일을 등록하고, 구글 캘린더와 실시간으로 연동되는 강력한 메모 앱을 지향합니다. 하지만 초기 버전에서 다음과 같은 심각한 문제들이 발견되었습니다.
- 데이터 파편화: PC에서 등록한 할 일이 핸드폰에서 보이지 않거나, 양쪽 데이터가 합쳐질 때 중복이 발생하는 현상.
- 삭제 불일치: 한 쪽 기기에서 삭제했는데 다른 기기에는 여전히 남아있는 좀비 데이터 문제.
- 서버 에러(500/422): 간헐적으로 발생하는 데이터 저장 실패 및 검증 오류.
2. 핵심 해결책: UUID 기반의 동기화 알고리즘
단순히 ID값으로 데이터를 관리하던 방식에서 탈피하여, 전역 고유 식별자(UUID)를 도입했습니다.
- Client-Generated UUID: 태스크 생성 시 클라이언트가 즉시 UUID를 발급합니다. 이로 인해 서로 다른 기기에서 동시에 작업을 해도 서버에서는 하나의 고유한 객체로 인식됩니다.
- Last Write Wins (LWW) 전략: 동일한 태스크를 수정했을 때
updatedAt타임스탬프를 비교하여 가장 최신 버전을 서버와 클라이언트 모두가 따르도록 설계했습니다. - Reconciliation (상태 조정): 동기화 시 서버에 존재하지 않는(이미 삭제된) 태스크를 로컬 저장소에서도 자동으로 제거하는 로직을 추가하여 완벽한 양방향 삭제 동기화를 구현했습니다.
3. 기술적 장애물 돌파기
🚩 Docker 환경에서의 경로 문제 (500 에러)
백엔드 로직은 정상인데 서버에만 올리면 DB 연결 실패(500)가 발생했습니다. 원인은 Docker 컨테이너 내부 경로와 로컬 PC 경로의 불일치였습니다. .env 파일을 찾는 경로를 상대 경로로 수정하여 Docker 환경 최적화를 완료했습니다.
🚩 외래키 제약 조건과 사용자 자동 등록 (500 에러)
태스크가 특정 사용자에 귀속되어야 하는데, 로그인 직후 사용자 정보가 DB 테이블에 등록되지 않은 채 태스크를 저장하려다 보니 데이터베이스에서 거부당했습니다. 이를 해결하기 위해 모든 데이터 저장 시점에 사용자가 없으면 자동으로 생성(INSERT IGNORE)하는 안전장치를 백엔드에 심었습니다.
🚩 캘린더 연동 데이터 형식 오류 (422 에러)
구글 캘린더 전송 시 필수 필드인 start_time이 누락되어 발생하던 검증 오류를 잡아냈습니다. PC와 모바일 환경 어디서든 정확한 ISO 시간 형식이 전달되도록 프론트엔드 로직을 보강했습니다.
4. 사용자 경험(UX) 고도화: 최신순 정렬
데이터가 동기화되면 새로 들어온 항목이 목록의 맨 밑으로 가버려 사용자가 찾기 힘든 문제가 있었습니다. renderTasks() 함수에 생성/수정 시간 기준 내림차순 정렬을 적용하여, 항상 내가 방금 작업한 내용이 상단에 노출되도록 개선했습니다.
5. 결론 및 향후 계획
이번 고도화 작업을 통해 Aura Task는 단순한 메모 앱을 넘어, 다중 기기 환경에서 신뢰할 수 있는 데이터 정합성을 갖춘 앱으로 거듭났습니다.
앞으로도 더 스마트한 자동화 도구들을 개발하며 소식을 전하겠습니다. 긴 글 읽어주셔서 감사합니다!
음 안티그라비티 재미있네요.
일단 앱 기획부터 구글 연동 도커 배포까지는 4시간 정도 걸린것 같고
제가 원하는 품질의 제품이 나오기 까지는 조금 더 해봐야겠습니다.
제가 원하는 프로그램은 PC에서 일정 계획을 수집하고 수립한 일정 계획을 핸드폰으로 실행 관리 한다 인데
지금 자료 등록 동기화는 어제 해결 했고, 수정과 삭제 관련 동기화가 안되고 있습니다.
이것만 되면 그래도 쓸만 할 것 같습니다.
거기에 동기화를 실시간으로 해주는 기능도 추가할 계획입니다.
감사합니다.

험난하지만 늘 그러하였듯 잘 해결하시리라 여깁니다.
0.00 SBD,
1.62 STEEM,
1.62 SP
[booming-kr-auto]
보팅 완료했습니다 🙌
넵 늘 해결하려고 노력 중입니다.
오늘 밤에 핸드폰과 PC동기화를 해내려구요.
제가 코딩에 손을 대면 해결이 되겠지만
일단 손안대고 해결해 보려구요 ^^
Upvoted! Thank you for supporting witness @jswit.
🎉 Congratulations!
Your post has been upvoted by the SteemX Team! 🚀
SteemX is a modern, user-friendly and powerful platform built for the Steem community.
🔗 Visit us: www.steemx.org
✅ Support our work — Vote for our witness: bountyking5
PC와 핸드폰에서 각각의 로컬DB를 사용하는가 보죠?
잘은 모르지만... 혹시 전역 DB(?) 혹은 하나의 DB를 사용 할 수는 없을까요?
그렇게하면 최소한 PC와 핸드폰에서 수정/삭제 시 데이터 불일치 문제는 해결되지 않을까 싶습니다! ㅎ ^^;