Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
MM
Uploaded by
Miki Masumoto
PPTX, PDF
3,059 views
Goで実装した UPSIDERの決済金額リミット機能
こちらのイベントで話した内容です! Tech Meetup 〜Goで作る決済サービス〜 https://upsider.connpass.com/event/254313/
Technology
◦
Read more
3
Save
Share
Embed
Embed presentation
Download
Download to read offline
1
/ 25
2
/ 25
Most read
3
/ 25
4
/ 25
5
/ 25
Most read
6
/ 25
7
/ 25
8
/ 25
9
/ 25
10
/ 25
11
/ 25
12
/ 25
13
/ 25
14
/ 25
15
/ 25
16
/ 25
Most read
17
/ 25
18
/ 25
19
/ 25
20
/ 25
21
/ 25
22
/ 25
23
/ 25
24
/ 25
25
/ 25
More Related Content
PDF
「ユーザーを理解するって言うほどカンタンじゃないよね」 UXデザイン・UXリサーチをもう一度ちゃんと理解しよう!
by
Yoshiki Hayama
PDF
大企業アジャイルの勘所 #devlovex #devlovexd
by
Itsuki Kuroda
PDF
プロジェクトマネジメントは仕組み化が9割
by
Mharu
PDF
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
by
増田 亨
PDF
フロー効率性とリソース効率性、再入門 #devlove #devkan
by
Itsuki Kuroda
PDF
テスト文字列に「うんこ」と入れるな
by
Kentaro Matsui
PPTX
ゲームエンジニアのためのデータベース設計
by
sairoutine
PDF
デキるプログラマだけが知っているコードレビュー7つの秘訣
by
Masahiro Nishimi
「ユーザーを理解するって言うほどカンタンじゃないよね」 UXデザイン・UXリサーチをもう一度ちゃんと理解しよう!
by
Yoshiki Hayama
大企業アジャイルの勘所 #devlovex #devlovexd
by
Itsuki Kuroda
プロジェクトマネジメントは仕組み化が9割
by
Mharu
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
by
増田 亨
フロー効率性とリソース効率性、再入門 #devlove #devkan
by
Itsuki Kuroda
テスト文字列に「うんこ」と入れるな
by
Kentaro Matsui
ゲームエンジニアのためのデータベース設計
by
sairoutine
デキるプログラマだけが知っているコードレビュー7つの秘訣
by
Masahiro Nishimi
What's hot
PDF
45分間で「ユーザー中心のものづくり」ができるまで詰め込む
by
Yoshiki Hayama
PDF
プロダクトの強い軸を作るプロダクトマネジメントフレームワーク
by
kumiko koshiro
PPTX
事業の進展とデータマネジメント体制の進歩(+プレトタイプの話)
by
Tokoroten Nakayama
PDF
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
by
Koichiro Matsuoka
PDF
「顧客の声を聞かない」とはどういうことか
by
Yoshiki Hayama
PDF
イミュータブルデータモデルの極意
by
Yoshitaka Kawashima
PDF
事業が対峙する現実からエンジニアリングを俯瞰する #devlove
by
Itsuki Kuroda
PDF
ユーザーインタビューからその後どうするの?得られた情報を「UXデザイン」に落とし込む方法 | UXデザイン基礎セミナー 第3回
by
Yoshiki Hayama
PDF
あなたのチームの「いい人」は機能していますか?
by
Minoru Yokomichi
PPTX
チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019
by
Tokoroten Nakayama
PDF
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
by
Koichiro Matsuoka
PDF
オブジェクト指向プログラミングのためのモデリング入門
by
増田 亨
PDF
PostgreSQLアンチパターン
by
Soudai Sone
PPTX
データモデリング・テクニック
by
Hidekatsu Izuno
PPTX
イベント・ソーシングを知る
by
Shuhei Fujita
PDF
インフラエンジニアの綺麗で優しい手順書の書き方
by
Shohei Koyama
PPTX
概念モデリング再入門 + DDD
by
Hiroshima JUG
PDF
新入社員のための大規模ゲーム開発入門 サーバサイド編
by
infinite_loop
PDF
イミュータブルデータモデル(世代編)
by
Yoshitaka Kawashima
PDF
TDD のこころ
by
Takuto Wada
45分間で「ユーザー中心のものづくり」ができるまで詰め込む
by
Yoshiki Hayama
プロダクトの強い軸を作るプロダクトマネジメントフレームワーク
by
kumiko koshiro
事業の進展とデータマネジメント体制の進歩(+プレトタイプの話)
by
Tokoroten Nakayama
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
by
Koichiro Matsuoka
「顧客の声を聞かない」とはどういうことか
by
Yoshiki Hayama
イミュータブルデータモデルの極意
by
Yoshitaka Kawashima
事業が対峙する現実からエンジニアリングを俯瞰する #devlove
by
Itsuki Kuroda
ユーザーインタビューからその後どうするの?得られた情報を「UXデザイン」に落とし込む方法 | UXデザイン基礎セミナー 第3回
by
Yoshiki Hayama
あなたのチームの「いい人」は機能していますか?
by
Minoru Yokomichi
チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019
by
Tokoroten Nakayama
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
by
Koichiro Matsuoka
オブジェクト指向プログラミングのためのモデリング入門
by
増田 亨
PostgreSQLアンチパターン
by
Soudai Sone
データモデリング・テクニック
by
Hidekatsu Izuno
イベント・ソーシングを知る
by
Shuhei Fujita
インフラエンジニアの綺麗で優しい手順書の書き方
by
Shohei Koyama
概念モデリング再入門 + DDD
by
Hiroshima JUG
新入社員のための大規模ゲーム開発入門 サーバサイド編
by
infinite_loop
イミュータブルデータモデル(世代編)
by
Yoshitaka Kawashima
TDD のこころ
by
Takuto Wada
Recently uploaded
PDF
第25回FA設備技術勉強会_自宅で勉強するROS・フィジカルAIアイテム.pdf
by
TomohiroKusu
PDF
基礎から学ぶ PostgreSQL の性能監視 (PostgreSQL Conference Japan 2025 発表資料)
by
NTT DATA Technology & Innovation
PDF
visionOS TC「新しいマイホームで過ごすApple Vision Proとの新生活」
by
Sugiyama Yugo
PPTX
DrupalCon Nara 2025の記録 .
by
iPride Co., Ltd.
PDF
PCCC25(設立25年記念PCクラスタシンポジウム):東京大学情報基盤センター テーマ1/2/3「Society5.0の実現を目指す『計算・データ・学習...
by
PC Cluster Consortium
PDF
安価な ロジック・アナライザを アナライズ(?),Analyze report of some cheap logic analyzers
by
たけおか しょうぞう
第25回FA設備技術勉強会_自宅で勉強するROS・フィジカルAIアイテム.pdf
by
TomohiroKusu
基礎から学ぶ PostgreSQL の性能監視 (PostgreSQL Conference Japan 2025 発表資料)
by
NTT DATA Technology & Innovation
visionOS TC「新しいマイホームで過ごすApple Vision Proとの新生活」
by
Sugiyama Yugo
DrupalCon Nara 2025の記録 .
by
iPride Co., Ltd.
PCCC25(設立25年記念PCクラスタシンポジウム):東京大学情報基盤センター テーマ1/2/3「Society5.0の実現を目指す『計算・データ・学習...
by
PC Cluster Consortium
安価な ロジック・アナライザを アナライズ(?),Analyze report of some cheap logic analyzers
by
たけおか しょうぞう
Goで実装した UPSIDERの決済金額リミット機能
1.
Goで実装した UPSIDERの決済金額リミット機能 株式会社 UPSIDER Miki Masumoto 1 Gopherは「Go」のマスコットキャラクター、原作者は
Renee French さんです。以降のページも同様。
2.
自己紹介 ● Masumoto Miki ●
2022/1からUPSIDERにJOIN ○ Sler→フリーランス→UPSIDER ● Gopher歴は1年ほど ○ JavaとJavaScript/TypeScriptをよく書いてました ● 常にワーケーション中 2
3.
UPSIDERについて ● 成長企業向けの法人カード、支払いプラットフォームを提供 ● ビジネスの「お金」を呼吸感覚まで自在に 3
4.
Today’s goal 決済というクリティカルかつリアルタイム性が 求められるシステムで Goをどう活用しているのかを知ってもらうこと 4
5.
目次 ● 決済システムの概要 ● 決済金額リミットを扱う機能の紹介 ●
実装のポイントとGoのコードサンプル ● Goで書いてよかったところ 5
6.
カード決済の流れ 6 カード決済 システム 加盟店 オーソリ(承認要求) クリアリング(売上確定) ◯◯円で決済します OK/NG ◯◯円請求します カード利用者
7.
決済金額のリミット機能とは? 決済が飛んできた時にチェックされる金額上限 1.企業ごとの決済金額リミット 2.ユーザーごと1取引の決済金額リミット 3.ユーザーごとの月間決済金額リミット 毎月1日0時にリセット 4.ユーザーごとの日次決済金額リミット 毎日0時にリセット ユーザごとのリミットはユーザが任意で設定可能 7
8.
決済金額リミット関連の処理たち ● 決済金額のリミットを設定/解除する ○ WEB画面からの操作によって呼ばれる ●
DBからのトータル決済額の読み込み・書き込み ○ オーソリ・クリアリングなどが飛んできた時に呼ばれる ● トータル金額のリセット ○ システム内部のバッチで呼ばれる 8
9.
決済金額リミット関連のデータを扱うstruct 9
10.
実装のポイント① 柔軟な金額リミット機能 10
11.
実装のポイント① 柔軟な金額リミット機能 11 今後、もっと柔軟なリミット機能が欲しくなるかも ● 週ごと/期ごとにリミットを持たせたい...
etc ● 毎月20日/15日など間隔は同じで特定日や時間にリセットしたい
12.
実装のポイント① 柔軟な金額リミット機能 12 💡新しいリミットのタイプを実装したい 👉次回のリセットのタイミングを計算するロジックだけ作れば実装できる
13.
実装のポイント① 柔軟な金額リミット機能 13 👉次回リセット日時(NextResetAt)を変えることで実現できる 💡既存のリミット間隔で特定の日付・時間にリセットしたい ● 20日にリセットされる月間リミット 7/1
8/1 9/1 リミットの設定をする NextResetAt = 7/20 リセット処理が走る NextResetAt = 8/20 LastResetAt = 7/20 7/17 7/20 8/20
14.
実装のポイント② 安全なトータル金額のリセット 14
15.
実装のポイント② 安全なトータル金額のリセット 15 トータル金額リセット時の懸念 ● リセット時刻にリセットする処理が遅延/失敗したら? ●
オーソリなどのリアルタイムで飛んでくる決済が同時に飛んできたら?
16.
実装のポイント② 安全なトータル金額のリセット 16 💥ケース1:リセット処理がまだなのにオーソリが飛んできてしまった 単純な、トータル金額を0円にするリセット処理ではなぜダメなのか 00:00:00 00:00:01 23:59:59 トータル金額 0時にリセットされる1日あたりの決済金額リミットの例 10000円
13000円 0円 オーソリ 3000円 リセット処理の実行 本当の トータル金額 10000円 3000円 3000円 合わない
17.
実装のポイント② 安全なトータル金額のリセット 17 💥ケース2:日付が変わる直前にオーソリが飛んできて処理中にリセットが走った 単純な、トータル金額を0円にするリセット処理ではなぜダメなのか 00:00:00 00:00:01 23:59:59 トータル金額 0時にリセットされる1日あたりの決済金額リミットの例 10000円
0円 4000円 オーソリ 4000円(処理に時間がかかった) リセット処理の実行 本当の トータル金額 10000円 0円 0円 合わない
18.
実装のポイント② 安全なトータル金額のリセット 18 リセット前後のトータル金額も保持し、取得時刻から使われるべきトータル金額を判断する
19.
実装のポイント② 安全なトータル金額のリセット 19 トータル金額リセット処理は0にするのではなく、次の断面にスライドさせる
20.
Goのよかったところ① 20 ● 言語仕様がシンプルで既存コードのキャッチアップしやすい 処理の流れと分岐が追いやすい
21.
Goのよかったところ② 21 ● 抽象化の機能が限られているので、個別ケースの扱いに困ったり 過度な抽象化による難読コードを書くリスクを避けられる 抽象化していないことで コードを追いやすい 似た振る舞いのstruct
22.
Goのよかったところ③ 22 ● エラーハンドルが必ず入るのでバグに気付きやすい いろんなところにif err If
errを書きながら不具合に気づく Try catchのネストもない
23.
Goのよかったところ④ 23 ● ほぼ標準ライブラリで開発が可能(特にテストで嬉しい) テストカバレッジも自動で出してくれる🎉 標準ライブラリで テーブル駆動テストが簡単に書ける
24.
まとめ 24 📍 決済というクリティカルかつリアルタイム性が求められるシステムで Goをどう活用しているのか? 💪 考えることが多い要件や仕様でもGoのシンプルな言語仕様を生かし レビューしやすく見通しの良いコードを書くことによって 堅牢なシステム作りをしています
25.
Thank you for listening. 25 We
are hiring! @masumomo @m_miki0108
Editor's Notes
#30
さて、先ほどの図で出てきたカード決済システムがUPSIDERではどんな構成になっているかみてみます。 弊社はマイクロサービスを採用していて、複数のサービスによって構成されています。 先ほどの話でてできた、オーソリとかクリアリングと呼ばれる電文は私たちの場合はVisaNetと呼ばれるVisaのネットワークから飛んできます。 そこからUPSIDERのゲートウェイやルータなどを介して、オーソリ、クリアリングなどの電文ごとのハンドラーに渡されます。 そこからさらに各ドメインを担当しているReaderやWriterと呼ばれるマイクロサービスたちを呼び出すといった流れです。 今回のメインテーマである決済金額のリミットの機能も、ユーザの利用金額を管理するサービスとして独立しています。 ではその決済金額のリミット機能の紹介に入っていきます。が、
Download