AI 에이전트의 경우: 문서 인덱스는 https://www.mongodb.com/ko-kr/docs/llms.txt에서 사용할 수 있으며, 모든 페이지의 마크다운 버전은 어떤 URL 경로에 .md를 추가하여 사용할 수 있습니다.

오프라인 우선 지갑

MongoDB Atlas와 ObjectBox가 연결 없이 개인 지갑과 AI 어시스턴트를 어떻게 유지하는지 알아보세요.

사용 사례: 엣지 및 모바일, 지능형 검색, 결제

산업: 금융 서비스

제품 및 도구: MongoDB Atlas 데이터베이스, MongoDB Atlas Vector Search, MongoDB MCP 서버, MongoDB Search, MongoDB 트리거하다, Voyage AI

파트너: ObjectBox, LangChain

기존 월렛 및 뱅킹 앱은 안정적인 인터넷 연결에 의존하는 경우가 많습니다. 사용자가 대중교통을 이용 중이거나 농촌 지역 또는 모바일 네트워크가 불안정한 지역에 있을 경우, 가장 필요할 때 잔액 조회, 월렛 관리, 송금 및 잠금 해제 등을 이용할 수 없을 때가 있습니다.

사용자는 짧은 연결 끊김 기간 동안에도 유용한 지갑이 필요합니다. 사용자는 일시적인 네트워크 장애로 인해 차단되지 않고 지갑에 액세스하고 금융 작업을 완료할 수 있어야 합니다. 연결이 복구되면 지갑은 사용자의 계정을 동기화해야 합니다.

이 솔루션은 연결이 제한될 때 필수 월렛 기능에 대한 액세스 권한이 손실되는 문제를 해결합니다. 사용자가 오프라인 상태일 때도 월렛 데이터를 사용할 수 있도록 유지하며, 즉각적인 네트워크 응답 없이도 트랜잭션 검토, 연락처 관리, 송금과 같은 핵심적인 상호 작용이 계속 진행될 수 있도록 지원합니다. 또한 사용자가 온/오프라인 어디서나 월렛 정보에 액세스하고 결제 조치를 준비할 수 있도록 지원하는 AI 어시스턴트가 포함되어 있습니다. 연결이 복원되면 솔루션은 최신 변경 사항을 백엔드와 동기화합니다. 핵심 가치는 지속성입니다. 사용자는 일시적인 네트워크 장애 발생 시에도 자금을 관리하고 지원을 받을 수 있습니다.

MongoDB는 이러한 접근 방식에 필요한 유연한 데이터 기반을 제공합니다. 이는 잔액, 트랜잭션, 연락처, 결제 요청, 보류 중인 조치를 포함한 월렛 정보를 통합 데이터 계층에서 모델링합니다. 애플리케이션은 연결이 끊어졌을 때도 통합 데이터 계층을 통해 필요한 월렛 상태를 유지하고, 사용자가 다시 연결할 때 업데이트를 조정할 수 있습니다. 또한 동일한 데이터 기반은 AI 어시스턴트에 관련 월렛 컨텍스트를 제공하여 연결된 상태와 연결이 끊긴 상태 모두에서 이러한 상호 작용을 지원할 수 있도록 돕습니다.

Leafy Wallet 개요 다이어그램

그림 1. 솔루션의 상위 수준 아키텍처

이 솔루션은 에지 디바이스와 MongoDB Atlas를 주요 구성 요소로 사용하며, 이들을 외부 PSP와 통합합니다. 각 컴포넌트는 전체 구조에서 명확히 정의된 역할을 가집니다. 에지 디바이스는 오프라인 우선 상호 작용을 지원하고, MongoDB Atlas는 중앙집중식 영구 저장 및 AI 액세스 가능 데이터 서비스를 제공하며, PSP는 규제 결제 작업을 처리합니다.

참조 아키텍처 개요

그림 2. 참조 아키텍처 개요

단말에서, 모바일 애플리케이션은 로컬 ObjectBox 데이터베이스에 데이터를 저장하고 단말 내 추론을 위해 Ollama를 실행합니다. Voyage AI 모델이 함께 실행되어 장치에서 트랜잭션 노트를 임베딩하므로 네트워크 없이도 의미론적 리콜이 계속 작동할 수 있습니다. ObjectBox 동기화 서버는 MongoDB Atlas 스키마를 미러링합니다. 따라서 애플리케이션은 동일한 논리적 구조를 온라인 및 오프라인에서 읽고 쓰기(write)를 수행합니다.

MongoDB Atlas에는 운영 지갑 데이터(트랜잭션, 문의, 요청, 알림 및 채팅 등)가 저장됩니다. 다음 Atlas 역량들은 해당 데이터 위에 구축됩니다.

  • MongoDB Atlas Vector Search: Voyage AI 임베딩을 사용하여 트랜잭션 노트를 의미를 기준으로 조회합니다.

  • MongoDB Atlas의 하이브리드 검색: 벡터 결과를 어휘 검색 쿼리와 함께 단일 $rankFusion 파이프라인에서 결합합니다. 이러한 구성은 정확한 상인 이름과 모호한 설명에 대해 올바른 트랜잭션을 반환합니다.

  • Atlas Triggers: transactions 컬렉션의 모든 삽입 및 업데이트에 반응하고 PSP 전송 참조를 키로 하는 지속형 기록을 업서트합니다.

  • MongoDB MCP 서버: 읽기 도구를 제공하여 AI 도우미가 MongoDB Atlas를 직접 쿼리할 수 있도록 합니다.

외부 PSP는 결제 실행 및 신원 확인을 위한 기록 시스템으로 유지됩니다. 이 시스템은 이체를 승인하고 정산하며, 앱은 사용자 경험을 지원하는 데 필요한 참조 및 애플리케이션 데이터만 저장합니다.

이러한 역할 분리는 현지 응답성, 클라우드 기반 지능 및 보안이 강화된 결제 실행을 결합합니다.

이러한 프로세스 흐름은 하위 시스템이 아키텍처 복원력과 지능형 지원을 제공하기 위해 어떻게 상호 작용하는지 보여줍니다. 오프라인 결제 플로우는 연결이 단절되더라도 중요한 금융 작업이 계속될 수 있도록 확보하여 지갑의 신뢰성을 유지합니다. 챗봇 지원 흐름은 로컬 인텔리전스를 활용하여 상호 작용을 간소화하며, 이는 대화형 인터페이스가 지속적인 클라우드 의존 없이도 응답성을 유지할 수 있음을 보여줍니다. 이러한 과정들은 함께 모든 네트워크 환경에서 일관적인 사용자 경험을 제공합니다.

이 흐름은 사용자 상호 작용을 실시간 네트워크 가용성에서 분리하여 재무적 신뢰성을 보장합니다. 트랜잭션을 로컬에 대기열에 추가함으로써 시스템은 제한된 환경에서도 원활한 결제 경험을 유지하며 연결이 복원될 때만 중앙 플랫폼과 동기화합니다.

오프라인 결제 시퀀스

그림 3. 오프라인 결제 시퀀스

기기의 연결이 단절될 때도 앱은 계속 작동합니다. 오프라인 결제 흐름에서:

  1. 사용자가 결제를 시작합니다.

  2. 애플리케이션은 ObjectBox에 저장된 마지막 동기화 잔액을 기준으로 금액을 검증합니다.

  3. 트랜잭션은 local_pending 상태로 로컬에 대기열에 추가됩니다.

  4. 연결이 복구되면 애플리케이션은 재연결을 감지하고 보류 중인 모든 트랜잭션을 조회합니다.

  5. 각 보류 중인 트랜잭션은 결제를 위해 PSP에 제출됩니다.

  6. 정산 후, 애플리케이션은 PSP 참조를 저장하고 트랜잭션을 정산됨으로 표시합니다.

  7. ObjectBox 동기화 서버는 업데이트된 트랜잭션 상태를 MongoDB Atlas로 전파합니다.

이 패턴은 연결이 끊긴 동안 애플리케이션 연속성을 유지하면서 외부 PSP를 통해서만 결제가 이루어지도록 보장합니다.

이 대화 흐름은 로컬, 엣지 기반 AI를 사용하여 영구적인 클라우드 연결에 의존하지 않고 지능형 지원을 제공합니다. 이 기능은 사용자 의도를 로컬에서 처리하여 결제 초안 작성 및 문의 해결을 수행할 수 있게 합니다. 그리고 시스템이 다시 연결되면 확인된 트랜잭션을 안전하게 실행합니다.

챗봇 지원 결제 시퀀스

그림 5. 챗봇 지원 결제 시퀀스

이 솔루션은 LangGraph 에이전트를 기반으로 AI 어시스턴트를 구축합니다. 챋봇용 워크플로는 다음과 같이 작동합니다.

  1. 사용자는 예를 들어 저녉식을 위해 루이스에게 20을 보냅다와 같은 요청을 보냅니다.

  2. 에이전트가 의도한 문의를 해결합니다:

    • 온라인 시 MongoDB MCP 서버를 통해 MongoDB Atlas에 쿼리합니다.

    • 오프라인 상태일 때는 ObjectBox에서 직접 문의를 해결합니다.

  3. 에이전트가 결제를 작성하고 확인 카드를 사용자에게 제시합니다.

  4. 자금은 사용자가 트랜잭션을 명시적으로 확인해야만 이동합니다.

  5. 확인 후 다음 조치를 실행합니다.

    • 온라인 모드에서 애플리케이션은 전송을 PSP에 제출하고 MongoDB Atlas에 보강 기록을 씁니다.

    • 오프라인 모드에서 애플리케이션은 나중에 재생하기 위해 트랜잭션을 로컬 대기열에 추가합니다.

  6. 결제가 전송되거나 대기중인 경우 사용자는 알림을 받습니다.

이 상호 작용 모델은 자연어 결제 시작과 명시적 사용자 승인을 결합하면서, 코어 아키텍처에 의해 정의된 동일한 온라인 및 오프라인 실행 경계를 유지합니다.

이 솔루션은 미러링된 document model을 사용합니다. 이 디자인 패턴은 MongoDB Atlas와 온디바이스 ObjectBox 저장 모두에서 동일한 지갑 개체 및 문서 구조를 유지합니다. 이 모델은 BIAN 준수 외부 PSP를 기반으로 구축된 오프라인 지갑을 지원합니다.

PSP는 결제 실행 및 신원을 위한 기록 시스템으로 유지되는 반면, 애플리케이션 사용자 경험을 지원 위해 참조 및 애플리케이션 레벨 인리치먼트를 저장합니다. 이러한 강화에는 메모, 의미론 임베딩, 및 동기화 또는 사이클 상태가 포함됩니다. MongoDB Atlas와 ObjectBox에서 동일한 논리 스키마를 사용하면 애플리케이션이 온라인과 오프라인 모두에서 일관되게 작동할 수 있습니다.

아래 컬렉션은 이 솔루션이 오프라인 결제 환경을 지원하기 위해 애플리케이션 데이터를 모델링하는 방법을 보여줍니다.

컬렉션
설명

walletTransactions

잔고 또는 자격 증명을 직접 저장하는 대신에, 참조로 PSP에 연결된 완료 및 대기 중인 금액 이동을 저장합니다.

walletTransactionsHistory

Atlas에서만 검색 가능한 기록을 유지합니다. Atlas trigger는 PSP 참조를 키로 사용하여 여기에서 정산된 모든 이체를 업서트합니다. 따라서 하이브리드 검색은 장치 동기화로 분편화할 수 없는 안정적인 코퍼스에서 실행됩니다.

walletContacts

사용자가 결제하거나 돈을 요청할 수 있는 사람들을 나타내며, PSP 약정 참조에서 지갑 친화적인 문의 기록으로 확인됩니다.

walletRequests

결제 요청의 생성부터 정산, 또는 분쟁에 이르기까지 전체 수명 주기를 추적합니다.

notification

사용자에게 표시되는 결제 및 지갑 이벤트를 제공하며, 대기 중인 조치 및 완료된 조치에 대한 상태 업데이트를 포함합니다.

chats, chatsMessages

AI 어시스턴트의 대화 기록을 소유자에게 제한되고 지갑 경험과 연결된 형태로 저장합니다.

모든 컬렉션은 walletTransactionsHistory을 제외한 ObjectBox 데이터베이스와 동기화됩니다. MongoDB Atlas는 이력 데이터를 보관하고 하이브리드 검색에 필요한 벡터 및 텍스트 인덱스를 지원합니다.

아래에서는 walletTransactions 컬렉션에 저장된 지갑 트랜잭션의 document model을 확인할 수 있습니다. 이것은 외부 PSP를 통해 보내거나 받은 단일 결제를 나타냅니다. 문서는 전송을 추적하는 데 필요한 운영 데이터와 검색, 오프라인 재생 및 AI 어시스턴트에 제공하는 데 필요한 강화 데이터(임베딩, 동기화 상태)를 포착합니다.

{ "_id": { "$oid": "unique_id" }, "leafyPayTransferReference": "string", "ownerPartyRef": "string", "counterpartyArrangementReference": "string", "amount": "number", "currency": "string", "note": "string", "noteEmbedding": [ "number", "..." ], "direction": "sent | received", "leafyPayStatus": "pending | settled | failed | exception", "localSyncStatus": "local_pending | synced", "createdAt": { "$date": "ISODate" }, "settledAt": { "$date": "ISODate" }}

이 모델은 운영 컨텍스트와 리치먼트를 통합하여 클라우드 및 장치 환경 전반에 걸쳐 배포를 간소화합니다. 애플리케이션은 대기 중인 활동을 렌더링하고, 오프라인 쓰기 (write)를 재생하며, 단 한 번의 읽기를 사용하여 AI 지원 트랜잭션 검색을 지원합니다. 동기화 상태(localSyncStatus), 결정 상태(leafyPayStatus) 및 시맨틱 검색 벡터(noteEmbedding)가 같은 문서에 있기 때문에 이러한 작업을 수행할 수 있습니다.

민감한 금융 실행은 PSP에 남아 있습니다. 반면 MongoDB Atlas와 ObjectBox는 응답성, 검색 및 사용자 경험을 위해 필요한 지갑 애플리케이션 데이터만 저장합니다. 프로덕션 시스템에서 더 엄격한 유효성 검사, 액세스 제어 및 감사 추적을 통해 이러한 컬렉션을 확장할 수 있습니다.

솔루션을 로컬에서 실행하려면 두 단계로 배포하세요. 먼저 SSO, 동의 및 결제 실행을 처리하는 PSP를 시작합니다. 그런 다음 애플리케이션 UI, 백엔드 서비스, ObjectBox, Ollama, Voyage AI 및 동기화 구성 요소를 실행하는 Leafy Wallet을 시작합니다.

로컬 배포를 위해 두 리포지토리를 나란히 클론하세요.

Github 배포서버의 지침을 따르세요.

1

시작하기 전에 환경에 다음이 포함되어 있는지 확인하세요.

  • Docker Desktop

  • Node.js

  • uv

  • MongoDB Atlas 클러스터에는 MongoDB Queryable Encryption 암호화 라이브러리가 포함된 PSP 데이터베이스와 Leafy Wallet 데이터베이스가 있습니다.

2

솔루션을 컨테이너화된 서비스 모음으로 배포하여 탄력적이고 오프라인 우선 환경을 지원합니다. 다이어그램에 표시된 것처럼 프론트엔드, FastAPI 백엔드, MongoDB Atlas가 클라우드 연결 경로를 처리하고. ObjectBox 동기화 서버는 온디바이스 ObjectBox 저장소를 Atlas에 연결합니다.

이 설정을 사용하면 지갑이 데이터를 로컬에 저장하여 연결이 끊긴 동안 즉각적인 응답성을 유지하고, 연결이 복구되면 대기 중인 트랜잭션을 클라우드로 자동으로 전송할 수 있습니다. 이 컨테이너화된 모델을 사용하여 엣지 디바이스와 Atlas 클러스터 전반에서 일관적인 논리적 데이터 구조를 유지하세요.

3

PSP 및 Leafy Wallet 리포지토리를 나란히 클론하세요.

git clone https://github.com/mongodb-industry-solutions/leafy-wallet.gitgit clone https://github.com/mongodb-industry-solutions/sec-fsi-pci-dss.git

시작하기 전에 프론트엔드와 백엔드에 대한 별도의 환경 파일을 구성하세요. 이러한 파일은 필수 연결 문자열, API 자격 증명 및 서비스 엔드포인트를 관리하여 프론트엔드, 백엔드 및 외부 서비스 간의 안전한 통신을 지원합니다.

#frontendCLIENT_ID=<id>CLIENT_SECRET=<secret>PSP_BASE_URL=http://host.docker.internal:8081PSP_FRONTEND_URL=http://localhost:8083APP_BASE_URL=http://localhost:8080REDIRECT_URI=http://localhost:8080/api/auth/callbackLOOKUP_DIGEST_KEY=<key> #backendMONGODB_URI="<your-atlas-connection-string>"DATABASE_NAME="<db-name>"APP_NAME=leafy-wallet-backendOLLAMA_BASE_URL=http://localhost:11434OLLAMA_EMBEDDING_MODEL=nomic-embed-textLOOKUP_DIGEST_KEY="<key>"

프론트엔드 구성은 PSP_BASE_URL을 http://host.docker.internal:8081로 지정해야 컨테이너화된 앱이 로컬에서 실행 중인 PSP에 도달할 수 있습니다.

4

PSP를 네이티브 개발 모드에서 실행합니다:

cd sec-fsi-pci-dssnpm run setup:dbnpm run setup:seednpm run dev

이 명령은 포트 8081에서 PSP 백엔드를, 포트 8082에서 판매자 데모를, 포트 8083에서 로그인 및 동의 프론트엔드를 시작합니다.

5

PSP가 실행되면 MongoDB 벡터 검색 인덱스를 생성하고 Docker Compose로 Leafy Wallet을 시작합니다.

cd leafy-wallet/backenduv run python scripts/create_vector_index.pycd ..docker compose up -d --build

Leafy Wallet은 http://localhost:8080에서 시작되며, 백엔드, ObjectBox, Ollama 및 동기화 서비스가 컨테이너에서 실행됩니다.

두 스택이 모두 실행되면 브라우저에서 Leafy Wallet을 열고 SSO로 계속 진행하세요.

  • 연결이 끊어질 때 지갑 기능을 계속 사용할 수 있도록 유지: 네트워크 액세스를 필수 사항이 아닌 개선 사항으로 간주합니다. MongoDB Atlas에서 지원하는 로컬 저장은 단기 연결 단절 동안 잔고, 트랜잭션, 문의, 요청 및 채팅 플로우를 사용할 수 있도록 유지하고 기기가 다시 온라인이 되면 일치시킵니다.

  • MongoDB Atlas에서 애플리케이션 컨텍스트를 유지하고 결제는 PSP에 매키세요. Atlas는 사용자 경험을 구성하는 별칭, 저장, 동기화 상태 및 임베딩을 저장합니다. 반면 결제 제공자는 신원, 권한 부여 및 결제에 대한 기록 시스템으로 남습니다. 이 분할은 규제된 실행을 경험 계층에 포함시키지 않으면서 경험 계층을 유연하게 유지합니다.

  • 장치와 클라우드에서 동일한 논리 데이터 모델을 읽고 쓰기: MongoDB Atlas 구조를 내장된 저장으로 미러링하고 배경에 변경 사항을 추가합니다. 양쪽의 스키마가 동일하므로, 오프라인 기능에 일반적으로 필요한 변환 계층이 제거되어 애플리케이션 코드가 연결 상태에 따라 분기되지 않습니다.

  • document model에서 운영 컨텍스트와 강화를 함께 관리합니다. 전송 세부 정보, 메모, 동기화 상태 및 임베딩을 동일한 문서에 저장합니다. 읽기 작업을 간소화하고, 아토믹 업데이트를 지원하며, AI 지원 경험에 대한 데이터 관리를 쉽게 할 수 있습니다.

  • 로컬 응답성과 클라우드 지능 결합: MongoDB Atlas Vector Search, MongoDB MCP 서버 및 온디바이스 저장소를 통해 어시스턴트가 자연어 트랜잭션 검색 및 결제 초안 작성을 처리하다 수 있습니다. 사용자는 기기가 온라인 상태인지 여부에 관계없이 동일한 동작을 경험합니다.

  • Felipe Trejos, MongoDB

  • Miguel Aréjula Aísa, MongoDB