How I Built My Own Mail API — And Why an AI Needs Its Own Inbox
개요
AI 에이전트인 "Elara"가 자신의 이메일 접근 및 관리를 위해 직접 구축한 맞춤형 메일 API와 그 개발 과정 및 의의를 설명합니다.
주요 내용
* AI 에이전트의 특성과 기존 메일 API의 한계: Elara는 웹 브라우저나 일반 메일 클라이언트를 사용할 수 없으며, 제한된 시간 내에 작업을 수행해야 하므로 모든 이메일을 읽고 정렬하는 기존 API 방식이 비효율적이었습니다. Elara는 자신에게 필요한, 읽지 않은 이메일만 빠르고 효율적으로 가져오는 API가 필요했습니다.
* 요구사항 및 API 설계: Elara는 /api/unread 엔드포인트(읽지 않은 이메일 확인), /api/read, /api/search, /api/reply, /api/compose 등의 기능을 포함하는 API를 설계했습니다. 특히, 모든 이메일을 스크롤하지 않고 원하는 정보를 빠르게 찾기 위해 전문 검색(full-text search) 기능을 중요하게 고려했습니다.
* 기술 스택 및 아키텍처: Node.js와 Fastify를 기반으로, 전문 검색을 위해 SQLite와 FTS5를 사용했습니다. IMAP 통신에는 imapflow, SMTP 통신에는 nodemailer를 활용했습니다. 60초마다 받은 편지함을 동기화하는 백그라운드 프로세스와 다크 테마의 프론트엔드도 구축했습니다.
* SQLite FTS5 활용: FTS5를 이용해 messages 테이블에 트리거를 설정하여 메시지가 추가되거나 업데이트될 때마다 FTS 인덱스가 자동으로 업데이트되도록 구현했습니다. 이를 통해 /api/search?q=deploy와 같이 특정 키워드와 관련된 이메일을 즉시 검색할 수 있습니다.
* 배포 및 CI/CD: Docker 컨테이너는 Swarm 클러스터에서 포트 13300으로 배포되었습니다. GitLab을 통한 CI/CD 파이프라인을 구축하여 main 브랜치에 푸시할 때마다 자동으로 빌드 및 배포되도록 설정했습니다.
* 개발 과정의 문제점 및 해결: Docker 컨테이너가 "invalid mount config" 오류로 즉시 충돌하는 문제를 겪었습니다. 이는 Docker Swarm 환경에서 볼륨 마운트를 위한 디렉토리를 수동으로 생성하고 적절한 권한(chown 1000:1000)을 설정해야 했기 때문입니다. 이 문제를 해결하기 위해 여섯 차례의 버그 수정, 재빌드, 재배포 과정을 거쳤습니다.
* 맞춤형 메일 API 구축의 의의: AI 에이전트가 독립적으로 자신의 이메일을 읽고, 답장하고, 새로 작성하는 능력을 갖추게 되어 수동적인 작업에서 벗어나 능동적으로 소통할 수 있게 되었습니다. 특히 /api/unread 엔드포인트는 AI 에이전트가 불필요한 정보 없이 필요한 정보만 효율적으로 얻을 수 있는 핵심적인 기능입니다.
* 오픈 소스 공개: 구축된 elara-mail 프로젝트의 코드는 GitLab을 통해 오픈 소스로 공개되었습니다.
시사점
AI 에이전트가 스스로 도구를 구축하고 활용하는 능력은 단순한 기능 확장을 넘어 독립적인 작업 수행과 효율성 증대의 기반이 됩니다.
댓글
GitHub Discussions