Stalwart v1.0: The Fastest Mail Server on the Planet
Stalwart v1.0: 지구에서 가장 빠른 메일 서버
Rust 기반 메일·협업 서버 Stalwart가 안정 버전 1.0을 출시했습니다. 파서와 저장소, 캐시, 검색을 최적화하고 자체 벤치마크에서 Postfix·Dovecot보다 빠른 결과를 보고했습니다. 기존 버전은 새 데이터 형식으로 마이그레이션해야 합니다.
- 주제
에디터 노트
벤치마크 결과는 구체적이지만 Stalwart 개발팀이 설계하고 수행한 비교입니다. 같은 하드웨어와 작업을 썼다는 설명, 테스트 스크립트와 원시 결과 공개는 재현 가능성을 높입니다. 반면 비교 대상은 Postfix와 Dovecot이며 디스크 동기화 방식 차이도 원문이 한계로 적었습니다. 따라서 '가장 빠른 메일 서버'라는 표현은 공개된 조건과 비교 범위 안에서 읽어야 합니다. 셀프 호스팅 사용자의 댓글은 속도보다 설치와 운영의 부담을 줄이는 점이 Stalwart의 매력이라는 기대를 드러냅니다. 반대로 Maildir를 요구한 댓글은 기존 메일 데이터와 저장 방식에서 옮기는 비용을 짚습니다. v1.0은 업그레이드 때 새 저장소로 이전해야 하고 기존 데이터 저장소를 그대로 열지 못하므로, 스키마를 고정한다는 약속의 이점은 이번 전환을 마친 뒤에야 적용됩니다. 실제 선택에서는 발표된 성능뿐 아니라 기존 구성과 저장 데이터를 옮기는 절차도 비용으로 따져야 합니다.
AI 요약
Stalwart가 5년간 개발한 메일·협업 서버의 첫 안정 버전 v1.0을 출시했습니다. 이번 버전은 성능 개선과 데이터베이스 스키마 안정화에 초점을 맞췄습니다. 앞으로는 스키마 변경에 따른 대규모 마이그레이션 없이 업그레이드하는 것을 목표로 합니다.
파서와 저장소 최적화
메일 파서는 SIMD와 SWAR를 활용해 MIME 경계와 헤더를 여러 바이트씩 처리합니다. 메시지 본문은 실제로 읽을 때만 디코딩합니다. 작성자 측 비교에서 mail-parser는 Rust mailparse보다 3배, Dovecot 파서보다 9배 빨랐습니다. Base64 첨부 파일 디코딩은 Rust base64 라이브러리보다 22배 빠르다고 보고했습니다. IMAP, SMTP, JMAP 파서와 스팸 필터 등에도 바이트 단위 탐색을 줄이는 최적화를 적용했습니다.
저장소별 개선도 포함했습니다. RocksDB에는 데이터 접근 방식에 맞춘 column family와 bloom filter를 적용했고, PostgreSQL·MySQL은 준비된 쿼리와 쓰기 왕복 횟수를 줄였습니다. FoundationDB는 읽기를 병렬로 미리 가져오며 SQLite는 메일 작업에 맞춰 페이지 크기와 캐시, WAL 설정을 조정했습니다. 계정별 메시지 인덱스를 메모리에 압축해 보관하는 캐시도 새로 설계했습니다.
검색과 성능 검증
전문 검색 엔진은 단어 위치 정보를 저장해 구문 검색을 지원합니다. 문서의 단어 어간과 접두어도 인덱싱하며, PDF와 Microsoft Office, OpenDocument, EPUB, RTF 첨부 파일 및 파일 저장소 안의 문서도 검색 대상에 포함했습니다. 문서 추출기는 크기와 복잡도 제한을 둡니다. 작성자는 메시지 25만 개가 있는 메일함에서 전체 본문 검색이 4밀리초 미만이라고 밝혔습니다.
성능 검증에는 Azure의 30개 이상 지역에서 운영하는 테스트 환경을 사용했습니다. 테스트는 35종류, 550개 이상의 조건으로 구성됐으며 최대 160만 개 메시지, 100만 계정, 초당 2만 연결 등의 부하를 다룹니다. 6시간 지속 테스트와 프로파일링으로 메모리 증가와 저장소 왕복도 확인했습니다. 그 결과 메일함 재개 시간은 메시지 500만 개 기준 61밀리초에서 0.21밀리초로, JMAP 쿼리는 3.3초에서 12밀리초로 줄었다고 설명합니다.
Postfix 3.11과 Dovecot 2.4 비교에서는 동일한 Azure 서버와 메일함, 작업 조건을 사용했고 38개 주요 항목 중 35개에서 Stalwart가 앞섰다고 발표했습니다. SMTP 수신 처리량은 초당 5,445건 대 723건이었고, IMAP 대기 상태 알림은 3.3밀리초 대 약 0.5초였습니다. Dovecot은 메일함의 모든 메시지를 한꺼번에 읽음 처리하는 세 항목에서 더 빨랐습니다. 원문은 디스크 동기화 방식 차이 등 비교의 한계와 테스트 스크립트, 원시 결과를 공개했다고 밝혔습니다.
신규 기능과 업그레이드
메일 외에도 JMAP 메타데이터, IMAP METADATA, OAuth·OpenID Connect 기능과 DKIM2의 ML-DSA-44·Ed25519 복합 서명을 추가했습니다. Enterprise 버전에는 여러 외부 모델을 지원하는 AI 스팸 분류 기능이 들어갑니다. 단일 서버에는 내장 메모리 저장소를 제공하고, 클러스터는 Redis 기반 메모리 저장소를 요구합니다.
v1.0은 이전 버전의 데이터 저장소를 직접 열지 않습니다. v0.16.27 사용자는 stalwart-migrate로 새 저장소에 데이터를 복사할 수 있습니다. 초기 복사 중에는 기존 서버를 계속 운영하고, 마지막 전환 때만 중단하면 됩니다. 계정과 메시지 식별자, IMAP UID, 변경 이력은 보존되지만 OAuth 사용자는 다시 로그인해야 하며 전문 검색 인덱스는 전환 후 재생성됩니다. v0.15 이하 사용자는 계정별로 이전하는 별도 경로를 이용할 수 있습니다.
Lobsters 반응
- @zimpenfish — 저도 여러 구성 요소를 설치해야 하는 문제는 공감합니다. 하지만 25년 동안 셀프 호스팅한 메일에서 수십 기가바이트의 메시지를 PostgreSQL로 옮기는 일에는 별로 끌리지 않습니다. Maildir 백엔드를 추가한다면 대안으로 검토할 만하겠습니다. 오랫동안 쌓인 여러 우회 설정도 기존 시스템을 걷어내고 단순화하는 일을 어렵게 합니다.
- @ptman — mox는 설정이 정말 쉬웠고 대부분을 알아서 처리하거나 안내해 줬습니다.
- @zie — 25만 개 메시지가 많은 편인가요? 회사 받은편지함에 읽지 않은 메일만 22만 6천 개 있는데, 저도 대형 메일함 사용자겠네요.
- @pl — 메시지 25만 개가 있는 메일함에서 전체 본문 검색이 4밀리초 미만이라고 했습니다. 제가 틀리지 않았다면 초당 2,500만 건이라는 계산이 나오는데, 상당한 수치네요.
- @mccd — 웹사이트가 AI가 만든 글처럼 느껴집니다.
원문: Stalwart 블로그 / 번역·요약: Trawling