---
title: Transactional Outbox Pattern を使ったデータ連携方法の紹介
tags:  #springboot #java #aws #jjug  
author: [ウェルスナビ株式会社 技術広報チーム](https://docswell.com/user/WN_Tech-PR)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/LJLMXMWQER.jpg?width=480
description: 登壇者: 星原 宏紀（ウェルスナビ株式会社 サービス基盤グループ ソフトウェアエンジニアリングチーム）  2026/06/24 開催 「JJUG CCC 2026 Spring延長戦！登壇者3名が時間内には語れなかったリアルを深掘ります」 登壇資料  主催: ウェルスナビ株式会社 共催: 株式会社コドモン、サイボウズ株式会社  詳細: https://wealthnavi.connpass.com/event/394248/
published: June 24, 26
canonical: https://docswell.com/s/WN_Tech-PR/5Q221J-2026-06-24
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/LJLMXMWQER.jpg)

Transactional Outbox Pattern を使った
データ連携方法の紹介
2026.6.24
JJUG CCC 2026 Spring延⻑戦！
サービス基盤グループ
ソフトウェアエンジニアリングチーム
星原 宏紀


# Page. 2

![Page Image](https://bcdn.docswell.com/page/47MYLYYK7W.jpg)

⾃⼰紹介
星原 宏紀 (Koki Hoshihara)
ウェルスナビ株式会社
サービス基盤グループ ソフトウェアエンジニアリング (SWE) チーム
ウェルスナビでは
共通ライブラリ開発(⼤規模バッチ / 認証系)、バックエンド開発、
新規システムのパフォーマンスチューニング、新技術導⼊ を推進
ひとこと
JJUGではイベント駆動を⽤いたデータ連携⽅法をお話ししました！
本⽇はよろしくお願いします！
2
@2025 WealthNavi Inc.


# Page. 3

![Page Image](https://bcdn.docswell.com/page/P7R9K996E9.jpg)

アジェンダ
はじめに
Spring Cloud AWS を活⽤したイベント駆動アーキテクチャ
（Transactional Outbox Patternを使って Atomic に イベントをPublish する⽅法を紹介）
3


# Page. 4

![Page Image](https://bcdn.docswell.com/page/PJXQLQQD7X.jpg)

1
はじめに
© WealthNavi Inc. All Rights Reserved.
4


# Page. 5

![Page Image](https://bcdn.docswell.com/page/3JK9L99DJD.jpg)

はじめに
本セッションのターゲットは、以下のいずれかに当てはまる⽅を想定します
●
●
Java、Spring Bootを使ったデータ連携の開発に興味がある
Transactional Outbox Patternを使ったデータ連携⽅法に興味がある
© WealthNavi Inc. All Rights Reserved.
5


# Page. 6

![Page Image](https://bcdn.docswell.com/page/LE3W3WWPE5.jpg)

JJUG資料の
再掲
従来のデータ連携のアーキテクチャ全体像
個別実装による属⼈化された
APIによる同期データ連携
NativeApp
Public
API
API
WebApp
Internet
ServerSide
xxClient
PrivateProxy
ThirdParty/
SaaS
API
Internet
API
xxSDK
Private
xxService
API
ServerSide
External
xxClient
API
ｸﾗｲｱﾝﾄ層
ｻｰﾋﾞｽ層
同期データ連携が適切でない
© WealthNavi Inc. All Rights Reserved.
6


# Page. 7

![Page Image](https://bcdn.docswell.com/page/8EDK4KK37G.jpg)

JJUG資料の
再掲
本⽇はイベント駆動型データ連携について話します
API Gateway導⼊
NativeApp
Public
API
API
WebApp
Internet
ServerSide
xxClient
PrivateProxy
ThirdParty/
SaaS
API
Internet
API
xxSDK
Private
xxService
ServerSide
External
xxClient
API
ｸﾗｲｱﾝﾄ層
© WealthNavi Inc. All Rights Reserved.
API
ｻｰﾋﾞｽ層
イベント駆動型
データ連携導⼊
7


# Page. 8

![Page Image](https://bcdn.docswell.com/page/V7PKMKKPJ8.jpg)

2
1
Spring Cloud AWS を活⽤した
イベント駆動アーキテクチャ
© WealthNavi Inc. All Rights Reserved.
8


# Page. 9

![Page Image](https://bcdn.docswell.com/page/2JVV9VVVJQ.jpg)

Spring Cloud AWS を活⽤したイベント駆動アーキテクチャ
1. イベント駆動アーキテクチャ採⽤の動機付け
2. Pub/Subの概念とAWSでの構成
3. Transactional Outbox Pattern による Atomic な Publisher の実装
© WealthNavi Inc. All Rights Reserved.
9


# Page. 10

![Page Image](https://bcdn.docswell.com/page/5EGLZLL1JL.jpg)

JJUG資料の
再掲
API 連携とイベント駆動型データ連携の整理
●
●
API 連携（同期）：呼び出し結果をその場で確認できる。
イベント駆動型（⾮同期）：1対多で配信できるため、スケールアウトしやすい（※）。
API 連携
イベント駆動型データ連携
Request - Response
Pub/Sub 連携
連携先 A
① Request
呼び出し元
呼び出し先
② Response
① Publish
Message
Publisher
Broker
② Subscribe
連携先 B
© WealthNavi Inc. All Rights Reserved.
（※）補足：以降「Pub/Sub 連携」と記載。
10


# Page. 11

![Page Image](https://bcdn.docswell.com/page/4JQYLYYN7P.jpg)

イベント駆動型への移⾏によるメリット
JJUG資料の
再掲
更新処理をイベントに分離することで、呼び出し元の責務を減らし、連携先の追加や⼀時
的なエラーに対するリトライを扱いやすくする。
●
API連携で更新処理を担う場合の課題
課題①：呼び出し元の複雑化
●
連携先の状態に応じた複雑な制御が必要
●
リトライロジックが肥⼤化
課題②：連携先サービス障害時の復旧負荷が⾼い
●
障害時は該当時間帯の処理が⼀律失敗する
ため、呼び出し元が再実⾏を管理する必要
がある
© WealthNavi Inc. All Rights Reserved.
イベント駆動型を採⽤した場合の対応
解決策①-1：更新処理の簡素化
● ⾮同期化でトランザクション制御を簡素化
解決策①-2：主体性の明確化
● 更新の責任範囲がアーキテクチャ上で明確
解決策②-1：復旧時のバースト負荷を吸収
● キューイングで再処理の負荷を平準化
解決策②-2：更新失敗の影響を局所化
● 復旧後キューの内容に基づき再処理可能
11


# Page. 12

![Page Image](https://bcdn.docswell.com/page/K74WDWW3E1.jpg)

イベント駆動型の採⽤判断基準
●
JJUG資料の
再掲
イベント駆動の採⽤可否は、処理結果の即時確認が必要かどうかを主な判断軸とする。
更新結果の 即時確認が必要 な処理は、 API連携 が向いている
具体的には、処理の成否をその場で確認し、エラー時に即座に対応する必要がある場合
●
例）即時の入金・出金処理
更新結果の 即時確認が不要 な処理は、 イベント駆動 が向いている
具体的には、⾮同期で処理でき、失敗時もリトライで対応できる場合
●
例）外部サービスへの連携、メール送信
© WealthNavi Inc. All Rights Reserved.
12


# Page. 13

![Page Image](https://bcdn.docswell.com/page/LJ1YZYYZEG.jpg)

Spring Cloud AWSを活⽤したイベント駆動アーキテクチャ
1. イベント駆動アーキテクチャ採⽤の動機付け
2. Pub/Subの概念とAWSでの構成
3. Transactional Outbox Pattern によるAtomicなPublisherの実装
© WealthNavi Inc. All Rights Reserved.
13


# Page. 14

![Page Image](https://bcdn.docswell.com/page/GJWG9GG672.jpg)

JJUG資料の
再掲
イベント駆動を実現する Pub/Sub の概念を改めて紹介
Pub/Sub とは、イベントを送る側（Publisher）が仲介役（Message Broker）に
イベントを送出し、イベントを受け取る側（Subscriber）がMessage Broker内の
⼀時的な蓄積場所（Queue）からメッセージを受け取って処理するアーキテクチャ
Message Broker




Publisher
Event
Queue
Subscriber
イベントの送出元
メッセージの分類
⼀時的な蓄積
イベントの受信‧処理
データの流れ
© WealthNavi Inc. All Rights Reserved.
14


# Page. 15

![Page Image](https://bcdn.docswell.com/page/4EZL9LLR73.jpg)

JJUG資料の
再掲
AWS で Pub/Sub を構成する場合のアーキテクチャ
AWSでの実践事例（ウェルスナビの場合）
Publisher/Subscriberにはコンテナランタイム(Amazon ECS)を活⽤する
Topic、Queueの管理にはAmazon SNS、SQSをそれぞれ活⽤する
Message Broker



ECS
SNS
SQS
Publisher
Topic管理
Queue管理

ECS
Subscriber
データの流れ
© WealthNavi Inc. All Rights Reserved.
参考：https://www.docswell.com/s/WN_Tech-PR/KPG18L-2025-11-20-154347#p18
15


# Page. 16

![Page Image](https://bcdn.docswell.com/page/Y76WKWW17V.jpg)

Spring Cloud AWS を活⽤したイベント駆動アーキテクチャ
1. イベント駆動アーキテクチャ採⽤の動機付け
2. Pub/Subの概念とAWSでの構成
3. Transactional Outbox Pattern による Atomic な Publisher の実装
© WealthNavi Inc. All Rights Reserved.
16


# Page. 17

![Page Image](https://bcdn.docswell.com/page/G75MPMML74.jpg)

Spring Boot で SNS へ Publish する⽅法
JJUG資料の
再掲
SnsTemplate を利⽤して、SNS Topic にメッセージを Publish する
● Publisher は 連携先の SQS Queue を意識しない
● Topic へのイベントは SNS Subscription が各 SQS Queue に配送する
● 連携先が増えても、Publisher 側の実装変更を抑えやすい
© WealthNavi Inc. All Rights Reserved.
17


# Page. 18

![Page Image](https://bcdn.docswell.com/page/9J296993ER.jpg)

Spring Boot で SNS へ Publish する⽅法 （Publisher を分解）
Publisher は「業務処理」と「SNS への Publish」の 2 ステップで構成される。
●
●
シンプルな構成を検討すると以下などが考えられる。
ただし、課題はある（後述）。
Publisher
SNS
② Publish
① 業務処理
Business
Table
© WealthNavi Inc. All Rights Reserved.
①と②を同じトランザクションにしても
②（外部へのPublish）はロールバック
できない
18


# Page. 19

![Page Image](https://bcdn.docswell.com/page/DEY49448JM.jpg)

業務 DB 更新と SNS への Publish を直列に⾏うことの課題
DB 更新と SNS Publish を直列に⾏うと、両者の結果が整合しない可能性がある
●
どちらか⼀⽅だけ成功すると、DBの状態とイベント発⾏結果が整合しない。
ケース１：
Publish 成功後に commit 失敗
ケース２：
commit 後に Publish 失敗
1.
2.
3.
1.
2.
3.
業務処理で DB 更新（未 commit）
SNS へPublish 成功
commit 失敗（DBエラー等）
DBは未更新にもかかわらずイベントが発⾏
業務処理で DB 更新（未 commit）
commit 成功
SNS へ Publish 失敗（NW障害等）
DBは更新済みだがイベントが未発⾏
DB更新 と SNSへのPublish は 1つの Atomic な操作 にしたい
© WealthNavi Inc. All Rights Reserved.
19


# Page. 20

![Page Image](https://bcdn.docswell.com/page/VJNYLYY978.jpg)

Spring Boot で SNS へ Publish する⽅法 （Outbox Table を採⽤したサンプル）
Publisher は「業務処理」と「SNS への Publish」の 2 ステップで構成される。
●
●
DB の状態とイベント発⾏結果を⼀致させる必要がある
確実に Publish するために、Outboxテーブルを活⽤した状態管理を実装する。
Publisher
①と②は同じ
トランザクション
で実装する
① 業務処理
Business
Table
②登録
Outbox
Table
Outbox
Poller
SNS
④ Publish
③取得
⑤発⾏済みに更新
④成功後に
⑤を実⾏する
© WealthNavi Inc. All Rights Reserved.
20


# Page. 21

![Page Image](https://bcdn.docswell.com/page/YE9P4PP3J3.jpg)

Java（Spring Boot）とAWSの組み合わせで
Transactional Outbox Pattern を実装する際のポイントと注意事項
Outboxへの
保存
●
●
業務 DB の更新と Outboxテーブルへの登録を同⼀トランザクションで⾏う。
SNS Publishはこのトランザクション内では呼ばない。
Outboxの
ポーリング
●
●
@Scheduled などで Outbox テーブルをポーリングして未発⾏の⾏を取得。
別 ECS タスクに分離することで業務処理と独⽴してスケールできる。
Publishと
Outboxの更新
●
●
Publish 後、Outbox テーブルの発⾏ステータスを発⾏済みに更新。
失敗時は未発⾏の⾏のまま残り再試⾏。
注意事項
●
Transactional Outbox Pattern はイベント発⾏失敗時に再試⾏することを前提とする。
そのためイベントが重複発⾏されうるので以下のリスクがある。対策の⼀例として紹介。
○
リスク：Publish 後の DB 更新に失敗して⼆重に発⾏される。
■ 対策：Subscriber で冪等性設計できるようにイベントごとに⼀意なキーをメッセージに含める。
○
リスク：Publish 失敗に伴う未発⾏状態の発⽣
■ 対策：⼀定時間未発⾏の⾏を検知し通知するバッチ処理の導⼊
© WealthNavi Inc. All Rights Reserved.
21


# Page. 22

![Page Image](https://bcdn.docswell.com/page/GE8DQDDLED.jpg)

Outbox パターンの実装サンプルは以下のテックブログを参照ください！
© WealthNavi Inc. All Rights Reserved.
22


# Page. 23

![Page Image](https://bcdn.docswell.com/page/LELMXMMQ7R.jpg)

ご清聴ありがとうございました！
© WealthNavi Inc. All Rights Reserved.
23


# Page. 24

![Page Image](https://bcdn.docswell.com/page/4JMYLY6KJW.jpg)

重要な注意事項
● 本資料は、断定的判断を提供するものではなく、情報を提供することのみを目的としており、いかなる種類の商品も勧誘
するものではありません。最終的な決定は、お客様自身で判断するものとし、当社はこれに一切関与せず、また、一切の
責任を負いません。
● 本資料には将来の出来事に関する予想が含まれている場合がありますが、それらは予想であり、また、本資料の内容の
正確性、信頼性、完全性、適時性等を一切保証するものではありません。本資料に基づいて被ったいかなる損害について
も、当社は一切の責任を負いません。また、当社は、新しい情報や将来の出来事その他の情報について、更新又は訂正
する義務を負いません。
● 本資料を利用することによりお客様に生じた直接的損害、間接的損害、派生的損害その他いかなる損害についても、当社
は一切の責任を負いません。
商号等：ウェルスナビ株式会社
金融商品取引業者 関東財務局長（金商）
第2884号 加入協会：日本証券業協会 一般社団法人資産運用業協会
© WealthNavi Inc. All Rights Reserved.
24


