Outbox 아키텍처란
이 페이지는 일본어 원문을 기계 번역한 것입니다. 일본어 원문 보기
Outbox 아키텍처(Outbox 패턴)는 메시지를 로컬에 큐잉하고, 네트워크 연결이 복구된 시점에 자동으로 전송되는 설계 패턴입니다. SimpleMemo에서는 이 메커니즘에 따라 지하철이나 비행기 안 등 오프라인 환경에서도 메모를 단말기에 남겨 연결될 때 전송합니다.
Outbox 아키텍처는 분산 시스템에서의 메시지 전송 보증 패턴입니다. 송신자는 메시지를 먼저 로컬의 Outbox(전송함)에 영구화하고, 백그라운드 프로세스가 Outbox를 모니터링하여 네트워크 연결 시 순차적으로 전송합니다. 전송 성공을 확인한 후, Outbox에서 메시지를 삭제합니다. 이를 통해 “네트워크 장애 시 데이터 손실”을 방지합니다. 응답만 손실된 메시지는 다시 전송되므로, 동일한 메시지가 겹쳐서 전달되지 않도록 하려면 수신 측의 중복 방지(멱등키 등)와 결합합니다. SimpleMemo에서는 메모별 메시지 ID를 메일 전송 서비스에 대한 멱등키로 전달하여 24 시간 중 중복을 방지합니다. 모바일 앱에서는 오프라인 우선 설계의 기반 기술입니다.
Outbox 패턴의 3 하나의 요소
SimpleMemo의 Outbox 구현
SimpleMemo의 Outbox은 단순한 오프라인 큐가 아니라 보안과 UX를 동시에 구현한 설계입니다. 메모를 저장할 때 AES-256-GCM으로 암호화하고, 전송 시에만 복호화합니다. 전송이 완료된 메모는 Outbox에서 삭제합니다. 오프라인 상태에서 전송 버튼을 눌렀을 때는 “오프라인 - 연결 시 전송합니다”라고 표시하고, 메모를 Outbox에 남깁니다.
실제 예시: 지하철에서 메모 전송
1. 지하철 내부에서 아이디어를 메모에 입력하고, 전송 버튼을 탭합니다
2. 앱은 “오프라인 - 연결 시 전송합니다”라고 표시됩니다(메모는 전송 대기 중으로 단말기에 남습니다)
3. 뒷면에서는 메모를 AES-256-GCM으로 암호화하여 Outbox에 저장합니다
4. 지상에 나가서 LTE/Wi-Fi에 연결 → 앱이 실행 중이면 NWPath Monitor가 연결을 감지합니다(닫혀 있으면 iOS의 백그라운드 업데이트 또는 다음에 앱을 열었을 때)
5. Outbox에서 메모를 추출하고, 복호하여 Cloudflare Workers API에 전송
6. Resend API가 전송을 수락하고, 릴레이 API가 성공 응답을 반환합니다(받은 편지함에 도착했음을 확인하는 것이 아님)
7. 해당 메모를 Outbox에서 삭제합니다
자주 묻는 질문(Outbox 아키텍처)
Outbox 아키텍처란 무엇입니까?
메시지를 로컬 큐(송신함)에 저장하고, 네트워크 연결 시 자동으로 전송되는 설계 패턴입니다. 오프라인 상태에서도 전송 대기로 기기에 두고, 연결이 복구되면 전송을 재개합니다.
SimpleMemo의 Outbox은 어떻게 작동합니까?
메모 전송 시 네트워크를 사용할 수 없는 경우, AES-256-GCM으로 암호화하여 Outbox에 저장하십시오. 연결이 복구되면, 앱이 실행 중이면 즉시, 닫혀 있으면 iOS의 백그라운드 업데이트 또는 다음에 앱을 열 때, Cloudflare Workers를 통해 Resend API에 전송합니다. 전송이 완료되면 Outbox에서 삭제합니다.
Outbox의 메모는 안전합니까?
단말기에 저장하는 Outbox은 AES-256-GCM으로 암호화합니다. 암호키는 iOS의 키체인에 보관하고, 앱이 암호화·복호화할 때 읽어냅니다. 키는 다른 단말기로 이전되지 않도록 설정되어 있습니다. 메일 전송은 엔드투엔드 암호화가 아닙니다. 백업 및 키 관리 상세도 확인해 주세요.