피드로 돌아가기
Dev.toDatabase
원문 읽기
AppleScript 대신 SQLite 직접 쿼리로 메일 읽기 속도 1,400배 개선
How To Read Apple Mail Without AppleScript (It's 1000x Faster)
AI 요약
Context
AppleScript 기반의 인터페이스를 통한 메일 데이터 추출 방식 채택. 대량의 메시지 처리 시 과도한 IPC 호출과 UI 스레드 블로킹으로 인한 심각한 성능 저하 발생.
Technical Solution
- Apple Mail의 내부 저장소인 SQLite Envelope Index 파일을 직접 참조하는 Read-only 접근 방식 설계
- SQLite WAL(Write-Ahead Logging) 모드를 활용하여 앱 실행 중에도 데이터 잠금 없이 동시 읽기 구현
messages,subjects,addresses테이블 간의 Join 구조 분석을 통한 데이터 중복 제거 모델 파악- Unix Timestamp와 상이한 Apple Cocoa Epoch(2001-01-01) 기준의 시간 변환 로직 적용
mode=ro&immutable=1옵션을 통한 데이터 무결성 보장 및 쓰기 작업 원천 차단- 전체 본문 대신
summaries테이블의 Snippet 데이터를 활용하여 I/O 부하 최소화
Impact
- 처리 시간: 500개 메시지 기준 45초에서 32ms로 단축 (약 1,400배 성능 향상)
- 오버헤드 제거: 수천 건의 IPC 호출을 단일 SQL 쿼리로 대체하여 UI 스레드 간섭 제거
실천 포인트
- macOS 앱 자동화 시 AppleScript 전 단계로 ~/Library 내 SQLite 인덱스 파일 존재 여부 확인 - 외부 프로세스에서 DB 접근 시 반드시 Read-only 모드와 Immutable 옵션을 설정하여 데이터 오염 방지 - 플랫폼 전용 Timestamp(Apple Epoch 등) 사용 여부를 확인하여 시간 데이터 정합성 검증 - 전체 데이터가 아닌 메타데이터/스니펫 수준의 필요 정보만 추출하여 처리 효율 극대화