SlideShare une entreprise Scribd logo
1  sur  55
© 2020 NTT DATA Corporation
今こそ知りたいSpring Web
Spring Fest 2020 2020/12/17
株式会社NTTデータ 伊藤司
© 2020 NTT DATA Corporation 2
自己紹介
@Bean
SelfIntroduction selfIntroduction() {
return SelfIntroduction.builder()
.name("伊藤", "司")
.company("株式会社NTTデータ")
.role("アーキテクト")
.work("一般企業向けのシステム開発")
.work("フレームワークの技術検証")
.work("コンテナ・k8sの技術検証")
.hobby("ガンプラ")
.build();
}
© 2020 NTT DATA Corporation 3
はじめに
• 本セッションで話すこと
• Springの2つのWebアプリケーションフレームワークの特徴・違い
• Spring MVCの基本的な処理の流れ
• Spring WebFluxの基本的な処理の流れ
• 本セッションで出てくるサンプルコードはGitHubで公開しています
• https://github.com/itoutki/introduction-to-spring-web
© 2020 NTT DATA Corporation 4
目次
1. 今こそ知りたいSpringのWebアプリケーションフレームワーク
2. 今こそ知りたいSpring MVC
3. 今こそ知りたいSpring WebFlux
4. まとめ
© 2020 NTT DATA Corporation
今こそ知りたいSpringの
Webアプリケーションフレームワーク
5
© 2020 NTT DATA Corporation 6
Webアプリケーションとフレームワーク
アプリケーションサーバ
Webアプリケーション
HTTP
リクエスト
Webアプリケーション
フレームワーク
HTML
アプリケーションサーバ
Webアプリケーション
HTTP
リクエスト
Webアプリケーション
フレームワーク
JSON
など
画面アプリケーション APIアプリケーション
© 2020 NTT DATA Corporation 7
SpringのWebアプリケーションフレームワーク
Servlet Container Netty, Servlet 3.1+ Containers
Servlet API
Spring MVC
Reactive Streams Adapters
Spring WebFlux
Servlet Stack Reactive Stack
フレームワーク
抽象レイヤ
アプリケーションサーバ
© 2020 NTT DATA Corporation 8
Spring MVCとは
• サーブレットAPIに基づくWebアプリケーションフレー
ムワーク
• Tomcatなどのサーブレットコンテナ上で動作
• Spring Frameworkの初期から存在
• 画面アプリケーション向けの機能・APIアプリケーショ
ン向けの機能ともに豊富
Servlet Container
Servlet API
Spring MVC
Servlet Stack
© 2020 NTT DATA Corporation 9
Spring WebFluxとは
• ノンブロッキングI/Oに基づくWebアプリケーションフ
レームワーク
• Nettyなどの非サーブレットのアプリケーションサーバ
やServlet 3.1以降に対応したサーブレットコンテナ
上で動作
• Spring Framework 5.0から登場
• Reactorによるリアクティブプログラミングを採用
• APIアプリケーション向けの機能を中心に開発が進
められており画面アプリケーション向けの機能は未成
熟
Netty, Servlet 3.1+ Container
Reactive Streams Adapters
Spring WebFlux
Reactive Stack
© 2020 NTT DATA Corporation 10
Spring MVCとSpring WebFluxの特徴(1)アーキテクチャ
Spring MVCのアーキテクチャ Spring WebFluxのアーキテクチャ
© 2020 NTT DATA Corporation 11
Spring MVCとSpring WebFluxの特徴(2)リクエスト処理方式
スレッド1
スレッド2
スレッド3
スレッドN
イベントループ
スレッド
Spring MVC Spring WebFlux
・・・
1リクエストを1スレッドで処理 複数リクエストを1スレッドで処理
© 2020 NTT DATA Corporation 12
Spring MVCとSpring WebFluxの特徴(2)リクエスト処理方式
Spring MVC Spring WebFlux
実装し
やすさ
処理を同期的に実装できる
ノンブロッキングI/O、リアクティブプログラミング
の理解が必要になる
機能性
スレッドローカルを前提とする機能が利用でき
る(セッション、ロギングのMDCなど)
スレッドローカルを前提とする機能が利用でき
ない(ただしセッションは同等機能が用意さ
れている)
メモリ
使用量
多くのスレッドが必要になり、スレッドごとにメモ
リの確保が必要になる
スレッドが少なくてすむ
CPU
利用
効率
ブロッキングI/Oのため、I/Oの待ち時間が発
生する
ノンブロッキングI/Oのため、I/Oの待ち時間に
別の処理を実行できる
スルー
プット
高スループットの実現には多くのスレッドが必
要になる
遅いクライアントからの接続があるとその分ス
レッドが解放されない
少ないスレッドで多くのリクエストを処理できる
遅いクライアントからの接続があっても影響が
小さい
© 2020 NTT DATA Corporation 13
Spring MVCとSpring WebFluxのユースケース例
Spring MVC
Spring WebFlux
画面アプリケーション
• 画面アプリケーション向けの機能が豊富
ブロッキング処理への依存があるアプリケーション
• ブロッキング処理を前提とするSpring MVCと組み合わせたほうがよい
既存のSpring MVCアプリケーション
• 現状に課題がなければSpring WebFluxに積極的に置き換える必要性は低い
高スループットが要求されるアプリケーション
• Spring WebFluxの特性を生かしやすい
新規のAPIアプリケーション(マイクロサービスなど)
• 省メモリでリソース効率の高いアプリケーションが実装できる
• リアクティブプログラミングへの理解が必要となることには注意が必要
© 2020 NTT DATA Corporation
今こそ知りたいSpring MVC
14
© 2020 NTT DATA Corporation 15
Spring MVCとは
• サーブレットAPIに基づくWebアプリケーションフレー
ムワーク
• Tomcatなどのサーブレットコンテナ上で動作
• Spring Frameworkの初期から存在
Servlet Container
Servlet API
Spring MVC
Servlet Stack
© 2020 NTT DATA Corporation 16
Spring MVCのアーキテクチャ
Dispatcher
Servlet
Handler
Mapping
Handler
Adapter
View
Resolver
View
Model
Template
Controller
Spring MVCによって提供される部分 開発者が実装する部分
①
②
③ ④
⑤
⑥
⑦
© 2020 NTT DATA Corporation 17
Spring MVCの実装サンプル(画面アプリケーション)
@Controller
public class HelloMvcController {
@GetMapping("/hello")
public String handleHello(Model model) {
String message = "Hello, Spring MVC!";
model.addAttribute("message", message);
return "hello";
}
}
<!DOCTYPE html>
<html lang="ja" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Hello</title>
</head>
<body>
<p th:text="${message}"></p>
</body>
</html>
Controller
HelloMvcController
Template
hello.html
開発者が実装する部分
ControllerクラスとしてDIコンテナに登録するためのアノテーション
Thymeleafのテンプレート
© 2020 NTT DATA Corporation 18
Spring MVCの処理の流れ
Dispatcher
Servlet
Handler
Mapping
Handler
Adapter
View
Resolver
View
Model
Template
Controller
Spring MVCによって提供される部分 開発者が実装する部分
①
②
③ ④
⑤
⑥
⑦
リクエストを受ける
© 2020 NTT DATA Corporation 19
Spring MVCの処理の流れ
Dispatcher
Servlet
Handler
Mapping
Handler
Adapter
View
Resolver
View
Model
Template
Controller
Spring MVCによって提供される部分 開発者が実装する部分
①
②
③ ④
⑤
⑥
⑦
URLやGET/POSTなど
の条件からリクエストに
マッチするメソッドを見つ
ける
© 2020 NTT DATA Corporation 20
Spring MVCの処理の流れ
Dispatcher
Servlet
Handler
Mapping
Handler
Adapter
View
Resolver
View
Model
Template
Controller
Spring MVCによって提供される部分 開発者が実装する部分
①
②
③ ④
⑤
⑥
⑦
URLやGET/POSTなど
の条件からリクエストに
マッチするメソッドを見つ
ける
@Controller
public class HelloMvcController {
@GetMapping("/hello")
public String handleHello(Model model) {
String message = "Hello, Spring MVC!";
model.addAttribute("message", message);
return "hello";
}
}
/hello というURLへのGETリクエストの場合、
handleHelloメソッドが選択される
@PostMappingなどHTTPリクエストメソッドに対応
したアノテーションがある
Controller
© 2020 NTT DATA Corporation 21
Spring MVCの処理の流れ
Dispatcher
Servlet
Handler
Mapping
Handler
Adapter
View
Resolver
View
Model
Template
Controller
Spring MVCによって提供される部分 開発者が実装する部分
①
②
③ ④
⑤
⑥
⑦
リクエストの内容をメソッ
ドの引数に変換してメ
ソッドに引き渡す
© 2020 NTT DATA Corporation 22
Spring MVCの処理の流れ
Dispatcher
Servlet
Handler
Mapping
Handler
Adapter
View
Resolver
View
Model
Template
Controller
Spring MVCによって提供される部分 開発者が実装する部分
①
②
③ ④
⑤
⑥
⑦
@Controller
public class HelloMvcController {
@GetMapping("/hello")
public String handleHello(Model model) {
String message = "Hello, Spring MVC!";
model.addAttribute("message", message);
return "hello";
}
}
Modelオブジェクトが準備される
リクエストの内容をメソッ
ドの引数に変換してメ
ソッドに引き渡す
Controller
© 2020 NTT DATA Corporation 23
Spring MVCの処理の流れ
Dispatcher
Servlet
Handler
Mapping
Handler
Adapter
View
Resolver
View
Model
Template
Controller
Spring MVCによって提供される部分 開発者が実装する部分
①
②
③ ④
⑤
⑥
⑦
リクエストを処理し、Viewに
渡す値をModelに格納し、
View名を返す
© 2020 NTT DATA Corporation 24
Spring MVCの処理の流れ
Dispatcher
Servlet
Handler
Mapping
Handler
Adapter
View
Resolver
View
Model
Template
Controller
Spring MVCによって提供される部分 開発者が実装する部分
①
②
③ ④
⑤
⑥
⑦
@Controller
public class HelloMvcController {
@GetMapping("/hello")
public String handleHello(Model model) {
String message = "Hello, Spring MVC!";
model.addAttribute("message", message);
return "hello";
}
}
Modelに文字列を格納
リクエストを処理し、Viewに
渡す値をModelに格納し、
View名を返す
View名としてhelloを返す
Controller
© 2020 NTT DATA Corporation 25
Spring MVCの処理の流れ
Dispatcher
Servlet
Handler
Mapping
Handler
Adapter
View
Resolver
View
Model
Template
Controller
Spring MVCによって提供される部分 開発者が実装する部分
①
②
③ ④
⑤
⑥
⑦
View名からViewの実装と
Templateのパスを特定する
© 2020 NTT DATA Corporation 26
Spring MVCの処理の流れ
Dispatcher
Servlet
Handler
Mapping
Handler
Adapter
View
Resolver
View
Model
Template
Controller
Spring MVCによって提供される部分 開発者が実装する部分
①
②
③ ④
⑤
⑥
⑦
View名からViewの実装と
Templateのパスを特定する
「View名:hello」から
「template/hello.html」を
特定
© 2020 NTT DATA Corporation 27
Spring MVCの処理の流れ
Dispatcher
Servlet
Handler
Mapping
Handler
Adapter
View
Resolver
View
Model
Template
Controller
Spring MVCによって提供される部分 開発者が実装する部分
①
②
③ ④
⑤
⑥
⑦
TemplateとModelの値から
レスポンスを生成
© 2020 NTT DATA Corporation 28
Spring MVCの処理の流れ
Dispatcher
Servlet
Handler
Mapping
Handler
Adapter
View
Resolver
View
Model
Template
Controller
Spring MVCによって提供される部分 開発者が実装する部分
①
②
③ ④
⑤
⑥
⑦
TemplateとModelの値から
レスポンスを生成
<!DOCTYPE html>
<html lang="ja" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Hello</title>
</head>
<body>
<p th:text="${message}"></p>
</body>
</html>
Modelから「message」というキーで格納された文字
列「Hello, Spring MVC!」をテンプレートに当てはめる
Template
© 2020 NTT DATA Corporation 29
Spring MVCの処理の流れ
Dispatcher
Servlet
Handler
Mapping
Handler
Adapter
View
Resolver
View
Model
Template
Controller
Spring MVCによって提供される部分 開発者が実装する部分
①
②
③ ④
⑤
⑥
⑦
レスポンスを返す
© 2020 NTT DATA Corporation 30
Spring MVCのアーキテクチャ(APIアプリケーション)
Dispatcher
Servlet
Handler
Mapping
Handler
Adapter
View
Resolver
View
Model
Template
Controller
Spring MVCによって提供される部分 開発者が実装する部分
①
②
③ ④
⑤
© 2020 NTT DATA Corporation 31
Spring MVCの実装サンプル(APIアプリケーション)
@RestController
public class HelloMvcRestController {
@GetMapping("/hellorest")
public String handleHelloRest() {
String message = "Hello, Spring MVC!";
return message;
}
}
Controller
HelloMvcRestController
開発者が実装する部分
© 2020 NTT DATA Corporation 32
Spring MVCの実装サンプル(APIアプリケーション)
@RestController
public class HelloMvcRestController {
@GetMapping("/hellorest")
public String handleHelloRest() {
String message = "Hello, Spring MVC!";
return message;
}
}
Controller
HelloMvcRestController
開発者が実装する部分
@Controllerではなく@RestControllerを指定することで、View名を返すのではな
く、レスポンスデータを返すことを指定する
@RestController = @Controller + @ResponseBody
View名ではなくレスポンスデータとして文字列を返す
文字列以外にも任意のクラスやResponseEntityクラスを返す
ことできる
返り値は適切なHttpMessageConverterによってレスポンス
データに変換される
© 2020 NTT DATA Corporation 33
Spring MVCのまとめ
画面アプリケーションの処理の流れ APIアプリケーションの処理の流れ
@RestController
public class HelloMvcRestController {
@GetMapping("/hellorest")
public String handleHelloRest() {
String message = "Hello, Spring MVC!";
return message;
}
}
@Controller
public class HelloMvcController {
@GetMapping("/hello")
public String handleHello(Model model) {
String message = "Hello, Spring MVC!";
model.addAttribute("message", message);
return "hello";
}
}
© 2020 NTT DATA Corporation
今こそ知りたいSpring WebFlux
34
© 2020 NTT DATA Corporation 35
Spring WebFluxとは
• ノンブロッキングI/Oに基づくWebアプリケーションフ
レームワーク
• Nettyなどの非サーブレットのアプリケーションサーバ
やServlet 3.1以降に対応したサーブレットコンテナ
上で動作
• Spring Framework 5.0から登場
• Reactorによるリアクティブプログラミングを採用
Netty, Servlet 3.1+ Container
Reactive Streams Adapters
Spring WebFlux
Reactive Stack
© 2020 NTT DATA Corporation 36
Spring WebFluxのアーキテクチャ
Dispatcher
Handler
Handler
Mapping
Handler
Adapter
HandlerResult
Handler
View
Model
Template
Controller
Spring WebFluxによって提供される部分 開発者が実装する部分
View
Resolver
①
②
③ ④
⑤
⑥
⑦
© 2020 NTT DATA Corporation 37
Spring WebFluxの処理の流れ
Dispatcher
Handler
Handler
Mapping
Handler
Adapter
HandlerResult
Handler
View
Model
Template
Controller
Spring WebFluxによって提供される部分 開発者が実装する部分
View
Resolver
①
②
③ ④
⑤
⑥
⑦
リクエストを
受ける
リクエストの内容を
メソッドの引数に変
換してメソッドに引
き渡す
リクエストにマッチする
メソッドを見つける リクエストを処理し、
Viewに渡す値を
Modelに格納し、
View名を返す
View名からViewの
実装とTemplateの
パスを特定する
Templateと
Modelの値から
レスポンスを生成
レスポンスを
返す
© 2020 NTT DATA Corporation 38
Spring WebFluxのアーキテクチャ(APIアプリケーション)
Dispatcher
Handler
Handler
Mapping
Handler
Adapter
HandlerResult
Handler
View
Model
Template
Controller
Spring WebFluxによって提供される部分 開発者が実装する部分
View
Resolver
①
②
③ ④
⑤
⑥
© 2020 NTT DATA Corporation 39
Spring WebFluxの実装サンプル(APIアプリケーション)
@RestController
public class HelloWebFluxRestController {
@GetMapping("/hellorest")
public Mono<String> handleHelloRest() {
String message = "Hello, Spring WebFlux!";
return Mono.just(message);
}
}
Controller
HelloWebFluxRestController
開発者が実装する部分
© 2020 NTT DATA Corporation 40
Spring WebFluxの実装サンプル(APIアプリケーション)
@RestController
public class HelloWebFluxRestController {
@GetMapping("/hellorest")
public Mono<String> handleHelloRest() {
String message = "Hello, Spring WebFlux!";
return Mono.just(message);
}
}
Controller
HelloWebFluxRestController
開発者が実装する部分
@RestController、@GetMappingはSpring MVCと同様に
使える
© 2020 NTT DATA Corporation 41
Spring WebFluxの実装サンプル(APIアプリケーション)
@RestController
public class HelloWebFluxRestController {
@GetMapping("/hellorest")
public Mono<String> handleHelloRest() {
String message = "Hello, Spring WebFlux!";
return Mono.just(message);
}
}
Controller
HelloWebFluxRestController
開発者が実装する部分
メソッドの返り値の型がMono<String>
文字列からMonoを生成して返す
© 2020 NTT DATA Corporation 42
Reactorとは
• ノンブロッキング・非同期・イベントドリブンのプログラミングモデルであるリアクティブプログラミングの仕組みを提
供するライブラリ
• リアクティブプログラミングの標準であるReactive Streamsに準拠
• Stream APIのような形で実装
Flux<T> 0個以上(無限も可)のデータを持つList/Streamのようなもの
Mono<T> 0 or 1個のデータを持つObject/Optionalのようなもの
© 2020 NTT DATA Corporation 43
Reactorとは Stream APIとFluxの比較
List<Integer> input = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> output = input.stream()
.filter(i -> i % 2 == 0)
.map(i -> i * 2)
.collect(Collectors.toList());
System.out.println(output);
Flux<Integer> input = Flux.just(1, 2, 3, 4, 5);
Flux<Integer> output = input
.filter(i -> i % 2 == 0)
.map(i -> i * 2);
output.subscribe(i -> System.out.println(i));
Stream APIの例
Fluxの例
Stream APIと同様filter・mapなどの演算子がある
subscribeされるまで何も実行されない
=subscribeのイベントを契機に処理が実行される
整数のデータ列のうち、偶数のデータだけを抜き出して2倍する処理
© 2020 NTT DATA Corporation 44
Reactorとは もう少し複雑な例
Mono.just("Reactor Mono") // 文字列1個を発生させる
.map(str -> String.format("Hello, %s!", str)) // 文字列を変換する
.subscribe(System.out::println); // 標準出力に出力する
=> Hello, Reactor Mono!
Flux.interval(Duration.ofSeconds(1)) // 1秒ごとにデータを発生させる
.take(5) // 先頭の5個分のみを取得する
.map(l -> LocalDateTime.now()) // 現在時刻を返す
.subscribe(d -> Sytem.out.println(d)); // 現在時刻を標準出力に出力する
=> 2020-12-17T13:50:35.058993
2020-12-17T13:50:36.033929
2020-12-17T13:50:37.034292
2020-12-17T13:50:38.033898
2020-12-17T13:50:39.033848
© 2020 NTT DATA Corporation 45
Spring WebFluxの実装サンプル(APIアプリケーション)
@RestController
public class HelloWebFluxRestController {
@GetMapping("/hellorest")
public Mono<String> handleHelloRest() {
String message = "Hello, Spring WebFlux!";
return Mono.just(message);
}
}
Controller
HelloWebFluxRestController
開発者が実装する部分
メソッドの返り値の型がMono<String>
文字列からMonoを生成して返す
Monoはフレームワーク内部で
subscribeされる
© 2020 NTT DATA Corporation 46
Spring WebFluxによるServer-Sent Eventsの実装例
@GetMapping("/interval")
public Flux<Message> handleInterval() {
return Flux.interval(Duration.ofSeconds(1))
.take(5)
.map(l -> new Message(LocalDateTime.now().toString()));
}
© 2020 NTT DATA Corporation 47
Spring WebFluxによるServer-Sent Eventsの実装例
@GetMapping("/interval")
public Flux<Message> handleInterval() {
return Flux.interval(Duration.ofSeconds(1))
.take(5)
.map(l -> new Message(LocalDateTime.now().toString()));
}
メソッドの返り値の型にFluxを指定
© 2020 NTT DATA Corporation 48
Spring WebFluxによるServer-Sent Eventsの実装例
@GetMapping("/interval")
public Flux<Message> handleInterval() {
return Flux.interval(Duration.ofSeconds(1))
.take(5)
.map(l -> new Message(LocalDateTime.now().toString()));
}
curl -H 'Accept: text/event-stream;' http://localhost:8080/interval
=> data:{"message": "2020-12-17T16:35:48.413935"}
data:{"message": "2020-12-17T16:35:49.405907"}
data:{"message": "2020-12-17T16:35:50.405909"}
data:{"message": "2020-12-17T16:35:51.405992"}
data:{"message": "2020-12-17T16:35:52.405936"}
curl -H 'Accept: application/x-ndjson;' http://localhost:8080/interval
=> {"message": "2020-12-17T16:35:48.413935"}
{"message": "2020-12-17T16:35:49.405907"}
{"message": "2020-12-17T16:35:50.405909"}
{"message": "2020-12-17T16:35:51.405992"}
{"message": "2020-12-17T16:35:52.405936"}
メソッドの返り値の型にFluxを指定
リクエスト時のAcceptヘッダでServer-Sent EventsのMIMEタイプを指定
1秒ごとにレスポンスデータが送信される
© 2020 NTT DATA Corporation 49
Spring WebFlux まとめ
画面アプリケーションの処理の流れ
APIアプリケーションの処理の流れ
Flux<T>
0個以上(無限も可)のデータ
を持つList/Streamのようなもの
Mono<T>
0 or 1個のデータを持つ
Object/Optionalのようなもの
© 2020 NTT DATA Corporation
まとめ
50
© 2020 NTT DATA Corporation 51
SpringのWebアプリケーションフレームワーク
Servlet Container Netty, Servlet 3.1+ Containers
Servlet API
Spring MVC
Reactive Streams Adapters
Spring WebFlux
Servlet Stack Reactive Stack
Servletベース
ノウハウが多く開発しやすい
ノンブロッキングベース
リソース効率が良い
リアクティブプログラミングの理解が必要
© 2020 NTT DATA Corporation 52
Spring MVCをもっと詳しく知りたい
• TERASOLUNA Server Framework for Java (5.x) Development Guideline
• https://terasolunaorg.github.io/guideline/
• Spring徹底入門
• https://www.shoeisha.co.jp/book/detail/9784798142470
• 改訂新版 Spring入門
• https://gihyo.jp/book/2016/978-4-7741-8217-9
• 令和時代に「Spring入門」「Spring徹底入門」を読むとき気をつけるべきN個のこと
• https://qiita.com/suke_masa/items/392976749fce94a8ef1f
• 徹底解剖Spring MVCアーキテクチャー –DispacherServletの中身覗いてきました–
• https://www.slideshare.net/ssuser070fa9/spring-fest-2019spring-mvc
• Web on Servlet Stack(Spring MVC公式ドキュメント)
• https://docs.spring.io/spring-framework/docs/current/reference/html/web.html
© 2020 NTT DATA Corporation 53
Spring WebFluxをもっと詳しく知りたい
• Introdction to Spring WebFlux
• https://www.slideshare.net/makingx/introduction-to-spring-webflux-jsug-sfa1
• Reactive Webアプリケーション – そしてSpring 5へ
• https://www.slideshare.net/makingx/reactive-web-spring-5-jjugccc-cccef3
• Spring 5に備えるリアクティブプログラミング入門
• https://www.slideshare.net/TakuyaIwatsuka/spring-5
• 業務で使いたいSpring WebFluxによるReactiveプログラミング
• https://speakerdeck.com/shintanimoto/introduction-to-reactive-programming-using-spring-
webflux
• Functional Spring Cookbook
• https://docs.google.com/presentation/d/1-0NopTfA-CGiCNvKPDOH9ZDMHhazKuoT-_1R69Wp8qs
• Web on Reactive Stack(Spring WebFlux公式ドキュメント)
• https://docs.spring.io/spring-framework/docs/current/reference/html/web-reactive.html
© 2020 NTT DATA Corporation 54
宣伝
• IT Search+にてSpring WebFlux入門の連載始めました
• Spring WebFlux・リアクティブプログラミングの入門記事のほか、HTTPクライアントのWebClientやDBアク
セスのR2DBCの入門記事を掲載予定です
• https://news.mynavi.jp/itsearch/article/devsoft/5260
© 2020 NTT DATA Corporation
その他、記載されている会社名、商品名、又はサービス名は、各社の登録商標又は商標です。

Contenu connexe

Tendances

Amazon Cognito使って認証したい?それならSpring Security使いましょう!
Amazon Cognito使って認証したい?それならSpring Security使いましょう!Amazon Cognito使って認証したい?それならSpring Security使いましょう!
Amazon Cognito使って認証したい?それならSpring Security使いましょう!Ryosuke Uchitate
 
SQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するかSQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するかShogo Wakayama
 
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャーssuser070fa9
 
AngularとSpring Bootで作るSPA + RESTful Web Serviceアプリケーション
AngularとSpring Bootで作るSPA + RESTful Web ServiceアプリケーションAngularとSpring Bootで作るSPA + RESTful Web Serviceアプリケーション
AngularとSpring Bootで作るSPA + RESTful Web Serviceアプリケーションssuser070fa9
 
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDayマイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay都元ダイスケ Miyamoto
 
初めてでも30分で分かるSpring 5 & Spring Boot 2オーバービュー
初めてでも30分で分かるSpring 5 & Spring Boot 2オーバービュー初めてでも30分で分かるSpring 5 & Spring Boot 2オーバービュー
初めてでも30分で分かるSpring 5 & Spring Boot 2オーバービューMasatoshi Tada
 
こんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツールこんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツールdcubeio
 
Keycloakの実際・翻訳プロジェクト紹介
Keycloakの実際・翻訳プロジェクト紹介Keycloakの実際・翻訳プロジェクト紹介
Keycloakの実際・翻訳プロジェクト紹介Hiroyuki Wada
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugMasatoshi Tada
 
さくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組みさくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組みTakeshi Ogawa
 
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方増田 亨
 
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来についてshinjiigarashi
 
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!Tetsutaro Watanabe
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Taku Miyakawa
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021Hiroshi Tokumaru
 
Spring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作るSpring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作るGo Miyasaka
 
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ増田 亨
 
ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方Yoshiyasu SAEKI
 
Cognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しようCognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しようShuto Suzuki
 

Tendances (20)

Amazon Cognito使って認証したい?それならSpring Security使いましょう!
Amazon Cognito使って認証したい?それならSpring Security使いましょう!Amazon Cognito使って認証したい?それならSpring Security使いましょう!
Amazon Cognito使って認証したい?それならSpring Security使いましょう!
 
SQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するかSQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するか
 
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
 
AngularとSpring Bootで作るSPA + RESTful Web Serviceアプリケーション
AngularとSpring Bootで作るSPA + RESTful Web ServiceアプリケーションAngularとSpring Bootで作るSPA + RESTful Web Serviceアプリケーション
AngularとSpring Bootで作るSPA + RESTful Web Serviceアプリケーション
 
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDayマイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
 
初めてでも30分で分かるSpring 5 & Spring Boot 2オーバービュー
初めてでも30分で分かるSpring 5 & Spring Boot 2オーバービュー初めてでも30分で分かるSpring 5 & Spring Boot 2オーバービュー
初めてでも30分で分かるSpring 5 & Spring Boot 2オーバービュー
 
こんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツールこんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツール
 
Keycloakの実際・翻訳プロジェクト紹介
Keycloakの実際・翻訳プロジェクト紹介Keycloakの実際・翻訳プロジェクト紹介
Keycloakの実際・翻訳プロジェクト紹介
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
 
さくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組みさくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組み
 
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
 
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
 
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
 
KeycloakでAPI認可に入門する
KeycloakでAPI認可に入門するKeycloakでAPI認可に入門する
KeycloakでAPI認可に入門する
 
Spring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作るSpring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作る
 
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
 
ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方
 
Cognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しようCognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しよう
 

Similaire à 今こそ知りたいSpring Web(Spring Fest 2020講演資料)

ASP.NET MVC と jQuery で実践する標準志向 Web 開発
ASP.NET MVC と jQuery で実践する標準志向 Web 開発ASP.NET MVC と jQuery で実践する標準志向 Web 開発
ASP.NET MVC と jQuery で実践する標準志向 Web 開発Akira Inoue
 
ASP.NET MVC 2 ~新機能の紹介~
ASP.NET MVC 2 ~新機能の紹介~ASP.NET MVC 2 ~新機能の紹介~
ASP.NET MVC 2 ~新機能の紹介~Yoshitaka Seo
 
システムのモダナイズ 落ちても良いアプリの作り方
システムのモダナイズ 落ちても良いアプリの作り方システムのモダナイズ 落ちても良いアプリの作り方
システムのモダナイズ 落ちても良いアプリの作り方Chihiro Ito
 
jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発Akira Inoue
 
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介david9142
 
モバイルゲームの「大規模な開発」かつ「高頻度の更新」を実現するための開発環境整備の取り組み
モバイルゲームの「大規模な開発」かつ「高頻度の更新」を実現するための開発環境整備の取り組みモバイルゲームの「大規模な開発」かつ「高頻度の更新」を実現するための開発環境整備の取り組み
モバイルゲームの「大規模な開発」かつ「高頻度の更新」を実現するための開発環境整備の取り組みMorioImai
 
App Modernization for .NET
App Modernization for .NETApp Modernization for .NET
App Modernization for .NETYuta Matsumura
 
ASP.NET Core WebAPIでODataを使おう
ASP.NET Core WebAPIでODataを使おうASP.NET Core WebAPIでODataを使おう
ASP.NET Core WebAPIでODataを使おうDevTakas
 
話題のNode-REDでIoTアプリを作ってみよう
話題のNode-REDでIoTアプリを作ってみよう話題のNode-REDでIoTアプリを作ってみよう
話題のNode-REDでIoTアプリを作ってみようKimihiko Kitase
 
patterns & practices "Project Silk" に見る HTML5 とモダンブラウザのための Web 開発の今後
patterns & practices "Project Silk" に見る HTML5 とモダンブラウザのための Web 開発の今後patterns & practices "Project Silk" に見る HTML5 とモダンブラウザのための Web 開発の今後
patterns & practices "Project Silk" に見る HTML5 とモダンブラウザのための Web 開発の今後Akira Inoue
 
One ASP.NET ~ 今、ASP.NET に何が起こっているのか? ~
One ASP.NET ~ 今、ASP.NET に何が起こっているのか? ~One ASP.NET ~ 今、ASP.NET に何が起こっているのか? ~
One ASP.NET ~ 今、ASP.NET に何が起こっているのか? ~Akira Inoue
 
どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)
どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)
どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)NTT DATA Technology & Innovation
 
The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#Yuta Matsumura
 
TypeScript製フレームワーク「Nest」のご紹介
TypeScript製フレームワーク「Nest」のご紹介TypeScript製フレームワーク「Nest」のご紹介
TypeScript製フレームワーク「Nest」のご紹介bitbank, Inc. Tokyo, Japan
 
2015 0227 OSC-Spring Tokyo NETMF
2015 0227 OSC-Spring Tokyo NETMF2015 0227 OSC-Spring Tokyo NETMF
2015 0227 OSC-Spring Tokyo NETMFAtomu Hidaka
 
Asp Net Mvc 基礎のキソ
Asp Net Mvc 基礎のキソAsp Net Mvc 基礎のキソ
Asp Net Mvc 基礎のキソYoshitaka Seo
 

Similaire à 今こそ知りたいSpring Web(Spring Fest 2020講演資料) (20)

ASP.NET MVC と jQuery で実践する標準志向 Web 開発
ASP.NET MVC と jQuery で実践する標準志向 Web 開発ASP.NET MVC と jQuery で実践する標準志向 Web 開発
ASP.NET MVC と jQuery で実践する標準志向 Web 開発
 
ASP.NET MVC 2 ~新機能の紹介~
ASP.NET MVC 2 ~新機能の紹介~ASP.NET MVC 2 ~新機能の紹介~
ASP.NET MVC 2 ~新機能の紹介~
 
システムのモダナイズ 落ちても良いアプリの作り方
システムのモダナイズ 落ちても良いアプリの作り方システムのモダナイズ 落ちても良いアプリの作り方
システムのモダナイズ 落ちても良いアプリの作り方
 
jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発
 
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
 
Vue入門
Vue入門Vue入門
Vue入門
 
モバイルゲームの「大規模な開発」かつ「高頻度の更新」を実現するための開発環境整備の取り組み
モバイルゲームの「大規模な開発」かつ「高頻度の更新」を実現するための開発環境整備の取り組みモバイルゲームの「大規模な開発」かつ「高頻度の更新」を実現するための開発環境整備の取り組み
モバイルゲームの「大規模な開発」かつ「高頻度の更新」を実現するための開発環境整備の取り組み
 
App Modernization for .NET
App Modernization for .NETApp Modernization for .NET
App Modernization for .NET
 
ASP.NET Core WebAPIでODataを使おう
ASP.NET Core WebAPIでODataを使おうASP.NET Core WebAPIでODataを使おう
ASP.NET Core WebAPIでODataを使おう
 
話題のNode-REDでIoTアプリを作ってみよう
話題のNode-REDでIoTアプリを作ってみよう話題のNode-REDでIoTアプリを作ってみよう
話題のNode-REDでIoTアプリを作ってみよう
 
patterns & practices "Project Silk" に見る HTML5 とモダンブラウザのための Web 開発の今後
patterns & practices "Project Silk" に見る HTML5 とモダンブラウザのための Web 開発の今後patterns & practices "Project Silk" に見る HTML5 とモダンブラウザのための Web 開発の今後
patterns & practices "Project Silk" に見る HTML5 とモダンブラウザのための Web 開発の今後
 
Angularreflex20141210
Angularreflex20141210Angularreflex20141210
Angularreflex20141210
 
One ASP.NET ~ 今、ASP.NET に何が起こっているのか? ~
One ASP.NET ~ 今、ASP.NET に何が起こっているのか? ~One ASP.NET ~ 今、ASP.NET に何が起こっているのか? ~
One ASP.NET ~ 今、ASP.NET に何が起こっているのか? ~
 
どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)
どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)
どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)
 
Clrh 110716 wcfwf
Clrh 110716 wcfwfClrh 110716 wcfwf
Clrh 110716 wcfwf
 
The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#
 
TypeScript製フレームワーク「Nest」のご紹介
TypeScript製フレームワーク「Nest」のご紹介TypeScript製フレームワーク「Nest」のご紹介
TypeScript製フレームワーク「Nest」のご紹介
 
ASP.NET MVC 1.0
ASP.NET MVC 1.0ASP.NET MVC 1.0
ASP.NET MVC 1.0
 
2015 0227 OSC-Spring Tokyo NETMF
2015 0227 OSC-Spring Tokyo NETMF2015 0227 OSC-Spring Tokyo NETMF
2015 0227 OSC-Spring Tokyo NETMF
 
Asp Net Mvc 基礎のキソ
Asp Net Mvc 基礎のキソAsp Net Mvc 基礎のキソ
Asp Net Mvc 基礎のキソ
 

Plus de NTT DATA Technology & Innovation

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)NTT DATA Technology & Innovation
 
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方
Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方
Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方NTT DATA Technology & Innovation
 
Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...
Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...
Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...NTT DATA Technology & Innovation
 
Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)
Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)
Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)NTT DATA Technology & Innovation
 
詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)
詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)
詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)NTT DATA Technology & Innovation
 
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...NTT DATA Technology & Innovation
 
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)NTT DATA Technology & Innovation
 
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)NTT DATA Technology & Innovation
 
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)NTT DATA Technology & Innovation
 
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)NTT DATA Technology & Innovation
 
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...NTT DATA Technology & Innovation
 
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)NTT DATA Technology & Innovation
 
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)NTT DATA Technology & Innovation
 
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)NTT DATA Technology & Innovation
 
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...NTT DATA Technology & Innovation
 
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)NTT DATA Technology & Innovation
 
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)NTT DATA Technology & Innovation
 
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 

Plus de NTT DATA Technology & Innovation (20)

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
 
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)
 
Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方
Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方
Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方
 
Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...
Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...
Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...
 
Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)
Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)
Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)
 
詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)
詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)
詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)
 
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
 
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
 
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
 
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
 
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
 
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
 
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
 
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
 
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
 
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...
 
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)
 
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
 
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
 

Dernier

デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 

Dernier (8)

デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 

今こそ知りたいSpring Web(Spring Fest 2020講演資料)

  • 1. © 2020 NTT DATA Corporation 今こそ知りたいSpring Web Spring Fest 2020 2020/12/17 株式会社NTTデータ 伊藤司
  • 2. © 2020 NTT DATA Corporation 2 自己紹介 @Bean SelfIntroduction selfIntroduction() { return SelfIntroduction.builder() .name("伊藤", "司") .company("株式会社NTTデータ") .role("アーキテクト") .work("一般企業向けのシステム開発") .work("フレームワークの技術検証") .work("コンテナ・k8sの技術検証") .hobby("ガンプラ") .build(); }
  • 3. © 2020 NTT DATA Corporation 3 はじめに • 本セッションで話すこと • Springの2つのWebアプリケーションフレームワークの特徴・違い • Spring MVCの基本的な処理の流れ • Spring WebFluxの基本的な処理の流れ • 本セッションで出てくるサンプルコードはGitHubで公開しています • https://github.com/itoutki/introduction-to-spring-web
  • 4. © 2020 NTT DATA Corporation 4 目次 1. 今こそ知りたいSpringのWebアプリケーションフレームワーク 2. 今こそ知りたいSpring MVC 3. 今こそ知りたいSpring WebFlux 4. まとめ
  • 5. © 2020 NTT DATA Corporation 今こそ知りたいSpringの Webアプリケーションフレームワーク 5
  • 6. © 2020 NTT DATA Corporation 6 Webアプリケーションとフレームワーク アプリケーションサーバ Webアプリケーション HTTP リクエスト Webアプリケーション フレームワーク HTML アプリケーションサーバ Webアプリケーション HTTP リクエスト Webアプリケーション フレームワーク JSON など 画面アプリケーション APIアプリケーション
  • 7. © 2020 NTT DATA Corporation 7 SpringのWebアプリケーションフレームワーク Servlet Container Netty, Servlet 3.1+ Containers Servlet API Spring MVC Reactive Streams Adapters Spring WebFlux Servlet Stack Reactive Stack フレームワーク 抽象レイヤ アプリケーションサーバ
  • 8. © 2020 NTT DATA Corporation 8 Spring MVCとは • サーブレットAPIに基づくWebアプリケーションフレー ムワーク • Tomcatなどのサーブレットコンテナ上で動作 • Spring Frameworkの初期から存在 • 画面アプリケーション向けの機能・APIアプリケーショ ン向けの機能ともに豊富 Servlet Container Servlet API Spring MVC Servlet Stack
  • 9. © 2020 NTT DATA Corporation 9 Spring WebFluxとは • ノンブロッキングI/Oに基づくWebアプリケーションフ レームワーク • Nettyなどの非サーブレットのアプリケーションサーバ やServlet 3.1以降に対応したサーブレットコンテナ 上で動作 • Spring Framework 5.0から登場 • Reactorによるリアクティブプログラミングを採用 • APIアプリケーション向けの機能を中心に開発が進 められており画面アプリケーション向けの機能は未成 熟 Netty, Servlet 3.1+ Container Reactive Streams Adapters Spring WebFlux Reactive Stack
  • 10. © 2020 NTT DATA Corporation 10 Spring MVCとSpring WebFluxの特徴(1)アーキテクチャ Spring MVCのアーキテクチャ Spring WebFluxのアーキテクチャ
  • 11. © 2020 NTT DATA Corporation 11 Spring MVCとSpring WebFluxの特徴(2)リクエスト処理方式 スレッド1 スレッド2 スレッド3 スレッドN イベントループ スレッド Spring MVC Spring WebFlux ・・・ 1リクエストを1スレッドで処理 複数リクエストを1スレッドで処理
  • 12. © 2020 NTT DATA Corporation 12 Spring MVCとSpring WebFluxの特徴(2)リクエスト処理方式 Spring MVC Spring WebFlux 実装し やすさ 処理を同期的に実装できる ノンブロッキングI/O、リアクティブプログラミング の理解が必要になる 機能性 スレッドローカルを前提とする機能が利用でき る(セッション、ロギングのMDCなど) スレッドローカルを前提とする機能が利用でき ない(ただしセッションは同等機能が用意さ れている) メモリ 使用量 多くのスレッドが必要になり、スレッドごとにメモ リの確保が必要になる スレッドが少なくてすむ CPU 利用 効率 ブロッキングI/Oのため、I/Oの待ち時間が発 生する ノンブロッキングI/Oのため、I/Oの待ち時間に 別の処理を実行できる スルー プット 高スループットの実現には多くのスレッドが必 要になる 遅いクライアントからの接続があるとその分ス レッドが解放されない 少ないスレッドで多くのリクエストを処理できる 遅いクライアントからの接続があっても影響が 小さい
  • 13. © 2020 NTT DATA Corporation 13 Spring MVCとSpring WebFluxのユースケース例 Spring MVC Spring WebFlux 画面アプリケーション • 画面アプリケーション向けの機能が豊富 ブロッキング処理への依存があるアプリケーション • ブロッキング処理を前提とするSpring MVCと組み合わせたほうがよい 既存のSpring MVCアプリケーション • 現状に課題がなければSpring WebFluxに積極的に置き換える必要性は低い 高スループットが要求されるアプリケーション • Spring WebFluxの特性を生かしやすい 新規のAPIアプリケーション(マイクロサービスなど) • 省メモリでリソース効率の高いアプリケーションが実装できる • リアクティブプログラミングへの理解が必要となることには注意が必要
  • 14. © 2020 NTT DATA Corporation 今こそ知りたいSpring MVC 14
  • 15. © 2020 NTT DATA Corporation 15 Spring MVCとは • サーブレットAPIに基づくWebアプリケーションフレー ムワーク • Tomcatなどのサーブレットコンテナ上で動作 • Spring Frameworkの初期から存在 Servlet Container Servlet API Spring MVC Servlet Stack
  • 16. © 2020 NTT DATA Corporation 16 Spring MVCのアーキテクチャ Dispatcher Servlet Handler Mapping Handler Adapter View Resolver View Model Template Controller Spring MVCによって提供される部分 開発者が実装する部分 ① ② ③ ④ ⑤ ⑥ ⑦
  • 17. © 2020 NTT DATA Corporation 17 Spring MVCの実装サンプル(画面アプリケーション) @Controller public class HelloMvcController { @GetMapping("/hello") public String handleHello(Model model) { String message = "Hello, Spring MVC!"; model.addAttribute("message", message); return "hello"; } } <!DOCTYPE html> <html lang="ja" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>Hello</title> </head> <body> <p th:text="${message}"></p> </body> </html> Controller HelloMvcController Template hello.html 開発者が実装する部分 ControllerクラスとしてDIコンテナに登録するためのアノテーション Thymeleafのテンプレート
  • 18. © 2020 NTT DATA Corporation 18 Spring MVCの処理の流れ Dispatcher Servlet Handler Mapping Handler Adapter View Resolver View Model Template Controller Spring MVCによって提供される部分 開発者が実装する部分 ① ② ③ ④ ⑤ ⑥ ⑦ リクエストを受ける
  • 19. © 2020 NTT DATA Corporation 19 Spring MVCの処理の流れ Dispatcher Servlet Handler Mapping Handler Adapter View Resolver View Model Template Controller Spring MVCによって提供される部分 開発者が実装する部分 ① ② ③ ④ ⑤ ⑥ ⑦ URLやGET/POSTなど の条件からリクエストに マッチするメソッドを見つ ける
  • 20. © 2020 NTT DATA Corporation 20 Spring MVCの処理の流れ Dispatcher Servlet Handler Mapping Handler Adapter View Resolver View Model Template Controller Spring MVCによって提供される部分 開発者が実装する部分 ① ② ③ ④ ⑤ ⑥ ⑦ URLやGET/POSTなど の条件からリクエストに マッチするメソッドを見つ ける @Controller public class HelloMvcController { @GetMapping("/hello") public String handleHello(Model model) { String message = "Hello, Spring MVC!"; model.addAttribute("message", message); return "hello"; } } /hello というURLへのGETリクエストの場合、 handleHelloメソッドが選択される @PostMappingなどHTTPリクエストメソッドに対応 したアノテーションがある Controller
  • 21. © 2020 NTT DATA Corporation 21 Spring MVCの処理の流れ Dispatcher Servlet Handler Mapping Handler Adapter View Resolver View Model Template Controller Spring MVCによって提供される部分 開発者が実装する部分 ① ② ③ ④ ⑤ ⑥ ⑦ リクエストの内容をメソッ ドの引数に変換してメ ソッドに引き渡す
  • 22. © 2020 NTT DATA Corporation 22 Spring MVCの処理の流れ Dispatcher Servlet Handler Mapping Handler Adapter View Resolver View Model Template Controller Spring MVCによって提供される部分 開発者が実装する部分 ① ② ③ ④ ⑤ ⑥ ⑦ @Controller public class HelloMvcController { @GetMapping("/hello") public String handleHello(Model model) { String message = "Hello, Spring MVC!"; model.addAttribute("message", message); return "hello"; } } Modelオブジェクトが準備される リクエストの内容をメソッ ドの引数に変換してメ ソッドに引き渡す Controller
  • 23. © 2020 NTT DATA Corporation 23 Spring MVCの処理の流れ Dispatcher Servlet Handler Mapping Handler Adapter View Resolver View Model Template Controller Spring MVCによって提供される部分 開発者が実装する部分 ① ② ③ ④ ⑤ ⑥ ⑦ リクエストを処理し、Viewに 渡す値をModelに格納し、 View名を返す
  • 24. © 2020 NTT DATA Corporation 24 Spring MVCの処理の流れ Dispatcher Servlet Handler Mapping Handler Adapter View Resolver View Model Template Controller Spring MVCによって提供される部分 開発者が実装する部分 ① ② ③ ④ ⑤ ⑥ ⑦ @Controller public class HelloMvcController { @GetMapping("/hello") public String handleHello(Model model) { String message = "Hello, Spring MVC!"; model.addAttribute("message", message); return "hello"; } } Modelに文字列を格納 リクエストを処理し、Viewに 渡す値をModelに格納し、 View名を返す View名としてhelloを返す Controller
  • 25. © 2020 NTT DATA Corporation 25 Spring MVCの処理の流れ Dispatcher Servlet Handler Mapping Handler Adapter View Resolver View Model Template Controller Spring MVCによって提供される部分 開発者が実装する部分 ① ② ③ ④ ⑤ ⑥ ⑦ View名からViewの実装と Templateのパスを特定する
  • 26. © 2020 NTT DATA Corporation 26 Spring MVCの処理の流れ Dispatcher Servlet Handler Mapping Handler Adapter View Resolver View Model Template Controller Spring MVCによって提供される部分 開発者が実装する部分 ① ② ③ ④ ⑤ ⑥ ⑦ View名からViewの実装と Templateのパスを特定する 「View名:hello」から 「template/hello.html」を 特定
  • 27. © 2020 NTT DATA Corporation 27 Spring MVCの処理の流れ Dispatcher Servlet Handler Mapping Handler Adapter View Resolver View Model Template Controller Spring MVCによって提供される部分 開発者が実装する部分 ① ② ③ ④ ⑤ ⑥ ⑦ TemplateとModelの値から レスポンスを生成
  • 28. © 2020 NTT DATA Corporation 28 Spring MVCの処理の流れ Dispatcher Servlet Handler Mapping Handler Adapter View Resolver View Model Template Controller Spring MVCによって提供される部分 開発者が実装する部分 ① ② ③ ④ ⑤ ⑥ ⑦ TemplateとModelの値から レスポンスを生成 <!DOCTYPE html> <html lang="ja" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>Hello</title> </head> <body> <p th:text="${message}"></p> </body> </html> Modelから「message」というキーで格納された文字 列「Hello, Spring MVC!」をテンプレートに当てはめる Template
  • 29. © 2020 NTT DATA Corporation 29 Spring MVCの処理の流れ Dispatcher Servlet Handler Mapping Handler Adapter View Resolver View Model Template Controller Spring MVCによって提供される部分 開発者が実装する部分 ① ② ③ ④ ⑤ ⑥ ⑦ レスポンスを返す
  • 30. © 2020 NTT DATA Corporation 30 Spring MVCのアーキテクチャ(APIアプリケーション) Dispatcher Servlet Handler Mapping Handler Adapter View Resolver View Model Template Controller Spring MVCによって提供される部分 開発者が実装する部分 ① ② ③ ④ ⑤
  • 31. © 2020 NTT DATA Corporation 31 Spring MVCの実装サンプル(APIアプリケーション) @RestController public class HelloMvcRestController { @GetMapping("/hellorest") public String handleHelloRest() { String message = "Hello, Spring MVC!"; return message; } } Controller HelloMvcRestController 開発者が実装する部分
  • 32. © 2020 NTT DATA Corporation 32 Spring MVCの実装サンプル(APIアプリケーション) @RestController public class HelloMvcRestController { @GetMapping("/hellorest") public String handleHelloRest() { String message = "Hello, Spring MVC!"; return message; } } Controller HelloMvcRestController 開発者が実装する部分 @Controllerではなく@RestControllerを指定することで、View名を返すのではな く、レスポンスデータを返すことを指定する @RestController = @Controller + @ResponseBody View名ではなくレスポンスデータとして文字列を返す 文字列以外にも任意のクラスやResponseEntityクラスを返す ことできる 返り値は適切なHttpMessageConverterによってレスポンス データに変換される
  • 33. © 2020 NTT DATA Corporation 33 Spring MVCのまとめ 画面アプリケーションの処理の流れ APIアプリケーションの処理の流れ @RestController public class HelloMvcRestController { @GetMapping("/hellorest") public String handleHelloRest() { String message = "Hello, Spring MVC!"; return message; } } @Controller public class HelloMvcController { @GetMapping("/hello") public String handleHello(Model model) { String message = "Hello, Spring MVC!"; model.addAttribute("message", message); return "hello"; } }
  • 34. © 2020 NTT DATA Corporation 今こそ知りたいSpring WebFlux 34
  • 35. © 2020 NTT DATA Corporation 35 Spring WebFluxとは • ノンブロッキングI/Oに基づくWebアプリケーションフ レームワーク • Nettyなどの非サーブレットのアプリケーションサーバ やServlet 3.1以降に対応したサーブレットコンテナ 上で動作 • Spring Framework 5.0から登場 • Reactorによるリアクティブプログラミングを採用 Netty, Servlet 3.1+ Container Reactive Streams Adapters Spring WebFlux Reactive Stack
  • 36. © 2020 NTT DATA Corporation 36 Spring WebFluxのアーキテクチャ Dispatcher Handler Handler Mapping Handler Adapter HandlerResult Handler View Model Template Controller Spring WebFluxによって提供される部分 開発者が実装する部分 View Resolver ① ② ③ ④ ⑤ ⑥ ⑦
  • 37. © 2020 NTT DATA Corporation 37 Spring WebFluxの処理の流れ Dispatcher Handler Handler Mapping Handler Adapter HandlerResult Handler View Model Template Controller Spring WebFluxによって提供される部分 開発者が実装する部分 View Resolver ① ② ③ ④ ⑤ ⑥ ⑦ リクエストを 受ける リクエストの内容を メソッドの引数に変 換してメソッドに引 き渡す リクエストにマッチする メソッドを見つける リクエストを処理し、 Viewに渡す値を Modelに格納し、 View名を返す View名からViewの 実装とTemplateの パスを特定する Templateと Modelの値から レスポンスを生成 レスポンスを 返す
  • 38. © 2020 NTT DATA Corporation 38 Spring WebFluxのアーキテクチャ(APIアプリケーション) Dispatcher Handler Handler Mapping Handler Adapter HandlerResult Handler View Model Template Controller Spring WebFluxによって提供される部分 開発者が実装する部分 View Resolver ① ② ③ ④ ⑤ ⑥
  • 39. © 2020 NTT DATA Corporation 39 Spring WebFluxの実装サンプル(APIアプリケーション) @RestController public class HelloWebFluxRestController { @GetMapping("/hellorest") public Mono<String> handleHelloRest() { String message = "Hello, Spring WebFlux!"; return Mono.just(message); } } Controller HelloWebFluxRestController 開発者が実装する部分
  • 40. © 2020 NTT DATA Corporation 40 Spring WebFluxの実装サンプル(APIアプリケーション) @RestController public class HelloWebFluxRestController { @GetMapping("/hellorest") public Mono<String> handleHelloRest() { String message = "Hello, Spring WebFlux!"; return Mono.just(message); } } Controller HelloWebFluxRestController 開発者が実装する部分 @RestController、@GetMappingはSpring MVCと同様に 使える
  • 41. © 2020 NTT DATA Corporation 41 Spring WebFluxの実装サンプル(APIアプリケーション) @RestController public class HelloWebFluxRestController { @GetMapping("/hellorest") public Mono<String> handleHelloRest() { String message = "Hello, Spring WebFlux!"; return Mono.just(message); } } Controller HelloWebFluxRestController 開発者が実装する部分 メソッドの返り値の型がMono<String> 文字列からMonoを生成して返す
  • 42. © 2020 NTT DATA Corporation 42 Reactorとは • ノンブロッキング・非同期・イベントドリブンのプログラミングモデルであるリアクティブプログラミングの仕組みを提 供するライブラリ • リアクティブプログラミングの標準であるReactive Streamsに準拠 • Stream APIのような形で実装 Flux<T> 0個以上(無限も可)のデータを持つList/Streamのようなもの Mono<T> 0 or 1個のデータを持つObject/Optionalのようなもの
  • 43. © 2020 NTT DATA Corporation 43 Reactorとは Stream APIとFluxの比較 List<Integer> input = Arrays.asList(1, 2, 3, 4, 5); List<Integer> output = input.stream() .filter(i -> i % 2 == 0) .map(i -> i * 2) .collect(Collectors.toList()); System.out.println(output); Flux<Integer> input = Flux.just(1, 2, 3, 4, 5); Flux<Integer> output = input .filter(i -> i % 2 == 0) .map(i -> i * 2); output.subscribe(i -> System.out.println(i)); Stream APIの例 Fluxの例 Stream APIと同様filter・mapなどの演算子がある subscribeされるまで何も実行されない =subscribeのイベントを契機に処理が実行される 整数のデータ列のうち、偶数のデータだけを抜き出して2倍する処理
  • 44. © 2020 NTT DATA Corporation 44 Reactorとは もう少し複雑な例 Mono.just("Reactor Mono") // 文字列1個を発生させる .map(str -> String.format("Hello, %s!", str)) // 文字列を変換する .subscribe(System.out::println); // 標準出力に出力する => Hello, Reactor Mono! Flux.interval(Duration.ofSeconds(1)) // 1秒ごとにデータを発生させる .take(5) // 先頭の5個分のみを取得する .map(l -> LocalDateTime.now()) // 現在時刻を返す .subscribe(d -> Sytem.out.println(d)); // 現在時刻を標準出力に出力する => 2020-12-17T13:50:35.058993 2020-12-17T13:50:36.033929 2020-12-17T13:50:37.034292 2020-12-17T13:50:38.033898 2020-12-17T13:50:39.033848
  • 45. © 2020 NTT DATA Corporation 45 Spring WebFluxの実装サンプル(APIアプリケーション) @RestController public class HelloWebFluxRestController { @GetMapping("/hellorest") public Mono<String> handleHelloRest() { String message = "Hello, Spring WebFlux!"; return Mono.just(message); } } Controller HelloWebFluxRestController 開発者が実装する部分 メソッドの返り値の型がMono<String> 文字列からMonoを生成して返す Monoはフレームワーク内部で subscribeされる
  • 46. © 2020 NTT DATA Corporation 46 Spring WebFluxによるServer-Sent Eventsの実装例 @GetMapping("/interval") public Flux<Message> handleInterval() { return Flux.interval(Duration.ofSeconds(1)) .take(5) .map(l -> new Message(LocalDateTime.now().toString())); }
  • 47. © 2020 NTT DATA Corporation 47 Spring WebFluxによるServer-Sent Eventsの実装例 @GetMapping("/interval") public Flux<Message> handleInterval() { return Flux.interval(Duration.ofSeconds(1)) .take(5) .map(l -> new Message(LocalDateTime.now().toString())); } メソッドの返り値の型にFluxを指定
  • 48. © 2020 NTT DATA Corporation 48 Spring WebFluxによるServer-Sent Eventsの実装例 @GetMapping("/interval") public Flux<Message> handleInterval() { return Flux.interval(Duration.ofSeconds(1)) .take(5) .map(l -> new Message(LocalDateTime.now().toString())); } curl -H 'Accept: text/event-stream;' http://localhost:8080/interval => data:{"message": "2020-12-17T16:35:48.413935"} data:{"message": "2020-12-17T16:35:49.405907"} data:{"message": "2020-12-17T16:35:50.405909"} data:{"message": "2020-12-17T16:35:51.405992"} data:{"message": "2020-12-17T16:35:52.405936"} curl -H 'Accept: application/x-ndjson;' http://localhost:8080/interval => {"message": "2020-12-17T16:35:48.413935"} {"message": "2020-12-17T16:35:49.405907"} {"message": "2020-12-17T16:35:50.405909"} {"message": "2020-12-17T16:35:51.405992"} {"message": "2020-12-17T16:35:52.405936"} メソッドの返り値の型にFluxを指定 リクエスト時のAcceptヘッダでServer-Sent EventsのMIMEタイプを指定 1秒ごとにレスポンスデータが送信される
  • 49. © 2020 NTT DATA Corporation 49 Spring WebFlux まとめ 画面アプリケーションの処理の流れ APIアプリケーションの処理の流れ Flux<T> 0個以上(無限も可)のデータ を持つList/Streamのようなもの Mono<T> 0 or 1個のデータを持つ Object/Optionalのようなもの
  • 50. © 2020 NTT DATA Corporation まとめ 50
  • 51. © 2020 NTT DATA Corporation 51 SpringのWebアプリケーションフレームワーク Servlet Container Netty, Servlet 3.1+ Containers Servlet API Spring MVC Reactive Streams Adapters Spring WebFlux Servlet Stack Reactive Stack Servletベース ノウハウが多く開発しやすい ノンブロッキングベース リソース効率が良い リアクティブプログラミングの理解が必要
  • 52. © 2020 NTT DATA Corporation 52 Spring MVCをもっと詳しく知りたい • TERASOLUNA Server Framework for Java (5.x) Development Guideline • https://terasolunaorg.github.io/guideline/ • Spring徹底入門 • https://www.shoeisha.co.jp/book/detail/9784798142470 • 改訂新版 Spring入門 • https://gihyo.jp/book/2016/978-4-7741-8217-9 • 令和時代に「Spring入門」「Spring徹底入門」を読むとき気をつけるべきN個のこと • https://qiita.com/suke_masa/items/392976749fce94a8ef1f • 徹底解剖Spring MVCアーキテクチャー –DispacherServletの中身覗いてきました– • https://www.slideshare.net/ssuser070fa9/spring-fest-2019spring-mvc • Web on Servlet Stack(Spring MVC公式ドキュメント) • https://docs.spring.io/spring-framework/docs/current/reference/html/web.html
  • 53. © 2020 NTT DATA Corporation 53 Spring WebFluxをもっと詳しく知りたい • Introdction to Spring WebFlux • https://www.slideshare.net/makingx/introduction-to-spring-webflux-jsug-sfa1 • Reactive Webアプリケーション – そしてSpring 5へ • https://www.slideshare.net/makingx/reactive-web-spring-5-jjugccc-cccef3 • Spring 5に備えるリアクティブプログラミング入門 • https://www.slideshare.net/TakuyaIwatsuka/spring-5 • 業務で使いたいSpring WebFluxによるReactiveプログラミング • https://speakerdeck.com/shintanimoto/introduction-to-reactive-programming-using-spring- webflux • Functional Spring Cookbook • https://docs.google.com/presentation/d/1-0NopTfA-CGiCNvKPDOH9ZDMHhazKuoT-_1R69Wp8qs • Web on Reactive Stack(Spring WebFlux公式ドキュメント) • https://docs.spring.io/spring-framework/docs/current/reference/html/web-reactive.html
  • 54. © 2020 NTT DATA Corporation 54 宣伝 • IT Search+にてSpring WebFlux入門の連載始めました • Spring WebFlux・リアクティブプログラミングの入門記事のほか、HTTPクライアントのWebClientやDBアク セスのR2DBCの入門記事を掲載予定です • https://news.mynavi.jp/itsearch/article/devsoft/5260
  • 55. © 2020 NTT DATA Corporation その他、記載されている会社名、商品名、又はサービス名は、各社の登録商標又は商標です。