#같은 메모를 다른 곳에서 찾고 싶었다
아이폰에서 쓴 메모를 Mac으로 가져와 검색하고, Codex에서도 읽는 개인 파일럿을 만들었다. Mac의 창과 앱 실행은 Electron이 맡고, Capture Bridge가 메모 가져오기와 새 Markdown 전송을 맡았다. 창을 여는 일과 메모를 주고받는 일을 나눠 같은 Bridge를 앱과 CLI에서 사용했다.
양쪽에 제목이 나타나는 것만으로는 부족했다. 본문과 출처가 같은지, 다시 가져왔을 때 중복이 생기지 않는지 확인했다. 계정이나 권한이 바뀌었을 때 이전 자료가 다른 계정의 화면에 남는지도 살폈다.
자동 양방향 동기화를 구현한 작업은 아니었다. 새 메모 전송과 가져오기, 로컬 검색·조회의 경로를 먼저 연결했다. 기존 Markdown 파일을 고친 내용까지 서버에 자동으로 반영하는 일은 범위에 넣지 않았다.
#가져온 자료를 MCP로 읽었다
MCP는 AI 클라이언트가 외부 도구를 정해진 형식으로 부르는 프로토콜이다. 이 파일럿에서는 등록한 로컬 MCP 프로세스와 표준 입력·출력인 STDIO로 통신했다. 메모 검색을 위해 새 웹 서버를 공개하는 대신, Mac에 가져온 자료를 검색·조회하는 경로를 연결했다. 기본 구조는 로컬 MCP 연결 문서, 데스크톱 앱 기반은 공개 상위 프로젝트인 Electron에서 볼 수 있다. Memo 자체 구현의 공개 저장소 링크는 아니다.
당시 기록에 남은 입출력 흐름을 줄이면 다음과 같다. 자동 실행 스크립트가 아니라 각 단계의 역할을 적은 것이다.
아이폰 저장 → Bridge pull → 계정·대상별 로컬 자료
search_memos → 검색 결과의 citation → get_memo → 본문·출처
새 Markdown → preview → 명시적 send → 아이폰 조회
검색과 본문 조회에는 가져온 자료를 사용했고, 새 메모 전송은 별도 확인을 거쳤다. 계정과 대상 환경별로 자료 폴더와 인증 연결을 나눠 이전 계정의 캐시를 그대로 재사용하지 않도록 했다. 이 글에서는 당시 실행 근거가 있는 Electron·Bridge·STDIO까지만 설명한다. 이후 코드에서 확인되는 저장소 구현이나 SDK 이름을 당시 파일럿에 소급하지 않았다.
#로그인 성공 다음에도 막힐 수 있었다
초기 확인에서는 아이폰에서 메모를 작성했지만 Mac으로 가져오는 단계에서 권한 오류가 났다. 로그인됐다는 사실만으로 PC 기능의 이용 조건까지 충족한 것은 아니었다.
승인된 시험 권한 안에서 같은 계정으로 다시 연결해 가져오기와 본문 대조를 확인했다. 재시도했을 때 새 항목이 더 생기지 않는지도 봤다. 시험 권한을 회수한 뒤에는 새 가져오기를 거절하면서 기존 로컬 검색과 캐시, 마지막 성공 시각을 보존했다.
오류 안내도 이 구분을 따라야 했다. 권한 문제를 일반 실패 한 줄로 줄이면 사용자는 파일이 사라진 것인지, 다시 로그인해야 하는지 알기 어렵다. 무엇을 할 수 없고 무엇은 그대로 남아 있는지 알려주는 쪽으로 보완했다.
#별도 승인 운영 왕복도 남아 있었다
10월 11일에는 로컬 검증과 별도로 승인받은 운영 파일럿을 진행했다. iOS·Android OTA 수신을 확인하고, 검증용 메모 2건으로 아이폰 작성 → 동일 Mac 패키지의 pull → 등록된 운영 MCP의 직접 STDIO 검색·본문 조회 → 새 PC Markdown 전송 → 아이폰 본문 대조를 통과했다. 같은 파일의 재전송은 already_sent였고 추가 생성은 0건이었다.
다만 최종 Mac GUI 가져오기 버튼은 잠금 때문에 조작하지 못했다. 성공 근거는 동일 패키지의 pull 함수와 실제 등록 MCP 호출이다. 당시 Codex 대화에 새 도구 namespace가 자동 로딩됐다는 결과도 아니었다. 이 기록은 개인 운영 기능 파일럿의 시작 근거이며 공개 배포 준비나 장기 사용의 증거는 아니다.
#글자는 커졌는데, 글자를 담은 영역은 그대로였다
계정 안내를 확인하다가 다른 문제도 발견했다. 아이폰에서 모달을 연 채 시스템 글자 크기를 바꾸고 돌아오면, 글자는 커졌는데 일부 영역의 측정값은 이전 크기에 머물렀다. 설명이 잘리거나 제목이 생략됐다.
모달을 닫았다 여는 방법으로 지나가지 않고 같은 조건에서 다시 재현했다. 관련 Text와 View가 글자 크기 변화를 받아 다시 측정되도록 수정했다. 화면 스택과 열린 모달 상태는 유지했다.
한국어와 긴 영어 설명을 확대해 보고, 취소한 뒤 원래 설정 화면과 로그인 상태가 남는지 확인했다. 실제 Google 계정 선택 페이지에서도 계정을 선택하지 않고 취소해 돌아오는 경로를 봤다. 이 결과를 실제 계정 변경이나 최종 로그아웃 성공으로 넓혀 적지는 않았다.
수정 후 전체 190개 테스트와 타입 검사가 통과했다. 당시 로컬 화면 평가도 변경한 범위에서는 통과했다. 테스트 수와 평가 결과가 메모의 장기 무손실이나 앱 전체 접근성을 보장하는 것은 아니다.
#로컬에서 확인한 것과 출시할 것은 달랐다
10월 11일의 승인 운영 왕복과 10월 13일까지의 계정 안내·글자 확대 수정은 같은 배포 결과로 묶지 않았다. 이후 인계에서는 Memo Desktop/Bridge 변경을 다른 작업과 함께 보관하고, 종료 오류 처리와 검증 환경을 보완한 뒤 선별 반영하도록 정리했다.
그래서 이 글의 후보가 모두 현재 main이나 운영에 들어갔다고 쓰지 않았다. 당시 테스트한 소스와 다음 배포 후보를 다시 맞추는 일이 남아 있다. 다른 Memo 기능의 배포 기록만으로 뒤의 PC 수정 후보까지 출시됐다고 판단할 수는 없다.
최종 글자 확대 수정의 Android 회귀, 장시간 사용에서의 누락·중복·재로그인 빈도, VoiceOver 검증도 남았다. 테스트 중 한 번 왕복한 메모와 매일 사용하며 쌓이는 메모는 확인해야 할 범위가 다르다.
이번 파일럿에서는 메모가 도착했는지에 더해, 도착하지 못했을 때 무엇이 남는지도 확인했다. 다음에는 검증된 후보를 정하고 실제로 쓰면서 그 경계가 계속 지켜지는지 봐야 한다.