Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
2022技育祭_映写資料②
Search
techtekt
November 18, 2022
Technology
0
840
2022技育祭_映写資料②
techtekt
November 18, 2022
Tweet
Share
More Decks by techtekt
See All by techtekt
大規模サイトリビルドの現場から:成功と失敗のリアルな教訓 / Site Rebuild,Real Lessons Learned from Successes and Failures_JJUG Fall 2024
techtekt
0
280
VSMを活用したFindy Team+の運用促進 / promoting-operation-of-findy-team-plus-using-vsm
techtekt
0
310
ハッピーになる機械学習モデル開発 〜なるべく手間をかけずにコードの品質向上を目指す 〜
techtekt
0
130
Power BI 活用推進の歩み
techtekt
0
78
_microCMS_を使ってNext.jsアプリ開発しよう_.pdf
techtekt
0
1.5k
スクラム研修
techtekt
0
4.7k
データベース研修
techtekt
7
6.1k
良いコードとは 研修
techtekt
2
4.9k
Git研修1
techtekt
0
4.9k
Other Decks in Technology
See All in Technology
Evolving Architecture
rainerhahnekamp
3
250
テストを書かないためのテスト/ Tests for not writing tests
sinsoku
1
170
カップ麺の待ち時間(3分)でわかるPartyRockアップデート
ryutakondo
0
140
Amazon Route 53, 待ちに待った TLSAレコードのサポート開始
kenichinakamura
0
170
comilioとCloudflare、そして未来へと向けて
oliver_diary
6
440
20250116_自部署内でAmazon Nova体験会をやってみた話
riz3f7
1
100
[IBM TechXchange Dojo]Watson Discoveryとwatsonx.aiでRAGを実現!座学①
siyuanzh09
0
110
.NET 最新アップデート ~ AI とクラウド時代のアプリモダナイゼーション
chack411
0
200
2024AWSで個人的にアツかったアップデート
nagisa53
1
110
シフトライトなテスト活動を適切に行うことで、無理な開発をせず、過剰にテストせず、顧客をビックリさせないプロダクトを作り上げているお話 #RSGT2025 / Shift Right
nihonbuson
3
2.1k
CDKのコードレビューを楽にするパッケージcdk-mentorを作ってみた/cdk-mentor
tomoki10
0
210
DMMブックスへのTipKit導入
ttyi2
1
110
Featured
See All Featured
Dealing with People You Can't Stand - Big Design 2015
cassininazir
365
25k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
How to Ace a Technical Interview
jacobian
276
23k
Building a Scalable Design System with Sketch
lauravandoore
460
33k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
27
1.5k
Scaling GitHub
holman
459
140k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
A Tale of Four Properties
chriscoyier
157
23k
How STYLIGHT went responsive
nonsquared
96
5.3k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
7
570
Fireside Chat
paigeccino
34
3.1k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
Transcript
None
経験言語:Python、PHP、React、Vue(どれも少しずつ) 趣味:ゲーム(鉄拳、Apex)、アニメ、音楽(BUMP、椎 名林檎、ボカロ…etc) 好きな食べ物:ラーメン二郎、麺類、ハンバーガー Name : 佐藤ゆ(エンジニア)
技術調査(Poc)
? PoC(Proof of Concept:概念実証)とは
PoCとは? • 新たなアイデアやコンセプトの実現可能性やそれによって 得られる効果などについて検証すること • これによって事前に検討したアイデア/コンセプトの実現 可能性を見極め、期待した効果が得られると判断できれば 実プロジェクトを進めていくという形が一般的です。
BFFとは?
? フロントエンドのための バックエンドサーバー
BFFとは? • 従来のモノリシックなサービスからマイクロサービス化 ◦ 複数のAPIを叩く必要が出てくる
BFFとは? • 取得したデータの加工をフロントエンドで行う必要有り ◦ フロントエンドで表示する内容は往々にして変わるた め、加工処理はフロントエンドがいいかも・・・ ◦ APIで取得してきたデータの一部は不要なため削ぎ落 としたり・・・(インピーダンスミスマッチ) •
フロントエンドの肥大化 • そもそもフロントエンドはUI/UXに専念するべき
BFFとは? BFFを用意することでAPI集約、インピーダンスミス マッチの解消、責務・関心の分離、パフォーマンス の向上が見込めるってコト!?
BFFとは? デメリット • 開発・保守の工数増 • 通信量増 • マイクロサービスのどれかがダウンした際の運用などを考 える必要やBFFが停止した場合など、様々な観点から検 証・対策が必要
(通信量の対策としてはキャッシュ化などが挙げられる)
ユースケース
2. SSR(Server Side Rendering) 4. File Upload 5. Web Socket
3. Session Management 1. API Gateway
• APIの結果を一つに集約する(API Aggregation) • APIで取得したデータをフロントエンドに適したデータに加 工する(API Translate) • 余計なリクエストが増大しないようAPIのレスポンスをキャ ッシュ化(API
Cache) ◦ Chache-aside pattern ◦ Broker pattern • GraphQLとの相性が良い API Gateway
• GraphQLとの相性が良い API Gateway
Server Side Rendering • CSR(Client Server Rendering)と違い、サーバーでレンダ リングを行う ◦ CSRと比較するとSEO観点で有利だったり、ローディング時間が短いと
いったメリットがある • みなさんお馴染みのNext.js、Nuxt.jsで簡単に実装可 ◦ Next.jsはデフォルトでSSRの設定になっています ◦ たまにhydration周りでエラーになったり・・・ • SSG(Static Site Generation)もあるが、こちらは静的サイ トに向いている SSR
• 主にユーザーの情報など、頻繁にアクセスされるであろうデ ータを保存する ◦ Redisやmemcachedなどが多く使われるらしい • 仮にBFFで管理をしない場合 ◦ クライアント側でLocal StorageやCookieなどで管理する必要がある
▪ セキュリティ的によくないよね ◦ バックエンド側で処理を重複して実装する必要がある ▪ なんか面倒くさそう Session Management
• 多くの場合はファイルアップロード機能を実装するとチャンク 化してファイルを少しずつ送信することが多い ◦ Pythonのrequestsとか、PHP(Laravel)のlaravel-chunk-uploadとか ◦ チャンク化したデータを順番通りにバックエンドに送信するのは大変そう File Upload ファイル格納の処理を
BFFが担うことで シンプルに実装可能!
• クライアントとサーバー間で即時に通信を行うHTTPの拡張 機能 • チャットや同時編集機能(googleスプレッドシートとか)や SNSで使用される • BFFがリアルタイムにデータ交換をする処理を受け持つこと で、バックエンドはデータをDBに保存することだけに集中 できる。
Web Socket
Web Socket ① ② ③ ③’
• クライアントとサーバー間で即時に通信を行うHTTPの拡張 機能 • チャットや同時編集機能(googleスプレッドシートとか)や SNSで使用される • BFFがリアルタイムにデータ交換をする処理を受け持つこと で、バックエンドはデータをDBに保存することだけに集中 できる。
Web Socket(改めて)
BFFまとめ
まとめ • BFFには5つのユースケースがある • BFFにメリットがたくさんあるが、デメリットも勿論あるため、 要件によって採用するしないを決める必要がある • (個人的には)責務の分散、API集約によるメリットが大きいの で、新規プロジェクトでは検討して良さそう
? GraphQLとは
GraphQLとは? ※https://graphql.org/
GraphQLとは? ※https://graphql.org/
GraphQLとは? • Facebookが開発したよ ◦ REST APIを使用していたらクラッシュが頻発したため、 より効率的にデータを取得するためGraphQLが開発された ◦ Facebook、Netflix、GitHub、Twitterも使用してるみたい •
query言語で柔軟なデータ取得が可能 ◦ 複雑な関係のデータでも取得しやすい(自分比) • エンドポイントが単一 ◦ ユーザー情報は/users/ 、商品情報は/products/ ◦ GraphQLだと /graphql/でユーザーも商品も取れちゃう • スキーマの構造がグラフモデル ◦ 詳しくはデータモデルに関して調べてみてください
GraphQLとは? • RESTとGraphQLを比較してみる REST API https://docs.github.com/ja/rest/guides/getting-started-with-the-rest-api GraphQL API https://docs.github.com/ja/graphql/overview/explorer 尚、ユーザーID・ユーザー名・アバターURLのみがほしいとする
GraphQLとは? REST API • これって・・・ 過剰にデータ取得しすぎってコト!? 探せば他に良いエンドポイントありそう。 って思ったけど探すのめんどい
GraphQLとは? GraphQL API • 取得したいデータのみ抽出できた
SQL GraphQL SELECT query INSERT/UPDATE/ DELETE mutation - subscription GraphQLとは?
Pub Subのような仕組みのリアルタイム通信 特定の情報を監視するようなイメージです
GraphQLとは? GraphQL API デモ
REST API • 複数のエンドポイント • 取得するデータが決まっている ◦ 過剰な取得 ◦ 過少な取得
• 欲しいデータによっては複数回リ クエストを投げ、取得したデータ を加工して・・・といった手間が かかる GraphQL • 単一のエンドポイント • 取得したいデータをピンポ イントで抽出できる ◦ スキーマで定義したデータだけ だからなんでも取得できるとは 思わないこと • BFFとの親和性高そう GraphQLとは?
GraphQLまとめ
GraphQLまとめ • GraphQL良さそうだけどN+1問題とか性能が少し気になる • BFFにするならGraphQLあり • 今後はGraphQLが採用されることも増えていくのではないか
技術調査まとめ
技術調査まとめ • 技術を導入した際のメリデメを考える • 導入障壁はないか • 導入コストや開発後の運用保守(メンテナンス)まで検討する といったことを調査を行った上で検討する
おわり