SlideShare a Scribd company logo
Seasar2から
Springへ移行した
俺たちのアプリケーションが
マイクロサービス
アーキテクチャへ歩み始めた
フリュー株式会社 /
関西Javaエンジニアの会
阪田 浩一 @jyukutyo
#ccc_f5
関ジャバ会長は、フリュー所属
通称: じゅくちょー
@jyukutyo
私のセッションは
• 私の現場の、私のコンテキストでの、
現実解です。
• 書籍にあるような理想形を実現する
ものではありません。
• アカデミックさよりビジネスと技術
を等価で捉えています。
Agenda
• Spring + Netflix OSSでの
マイクロサービス化
• 試験でのSpring Cloud Contract
Stub Runnerの利用
伝えたいこと
マイクロサービス、
はじめの一歩くらいなら
そんな大仰なことじゃない
サービスの変容を連載中
• 2015 Spring
• クリスマスを支える俺たちとJava
• 2016 Spring
• Seasar2で作った俺たちのサービスの今
• 2016 Fall
• 10年運用している画像サービスでの
Javaの活用と今後の展望
• 2017 Spring <- now
• Seasar2からSpringへ移行した
俺たちのアプリケーションが
マイクロサービスアーキテクチャへ歩み始めた
前回までのあらすじ
Application (WAR)
S2Servlet DispatcherServlet
DIコンテナ DIコンテナ
Cubby Action
Service / Logic
S2Dao DAO
Interceptor
MVC Controller
Service / Logic
S2Dao DAO
Interceptor
Doma2 DAO
同一のJS/CSS/テンプレートファイル
1つのWARに
2つのDIコンテナ
Springだけに
なるように
作業中だけど、
今回はスコープ外
対象について
対象アプリケーション
サービス名 ピクトリンク
開始
2011年
(前身サービスは
もっと以前から)
利用者数
1,000万人超
(有料会員数は秘密)
主な機能
プリントシール機で
撮影した画像を
取得する + SNS的な
対象アプリケーション
サービス名 ピクトリンク
提供
Webアプリケーション
iOSアプリ
Androidアプリ
課金
キャリア課金
d/au/SB
楽天ID決済
クレカ決済
iOS課金
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
ユーザ数に比例して
•13万行のコードに
(ライブラリは含まず)
並行開発/デイリーリリース
リポジ
トリ
チームA
チームCチームB
あるある
• 今日チームAがリリースするから
チームBはちょっと待って
• ビルド時間が長い
あるある
• RDBMSが巨大になってきた
• Oracle EE RACを今年購入した
• 13億行のテーブル...
• 負荷増大に対してフルスペックの
サーバを追加する
• お高い
• オンプレミスです
よろしい、ならば
サービスごとにスケール的な
前提条件
開発はビジネス要件
(新機能開発・既存改修)
と並行して実施する
第1目標
サービスクラス以降の
処理を単純に
1つのマイクロサービスに
してみる
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
理由
初めからきれいな
ドメイン分割を
気にしすぎても
前に進めなさそう
理由
やってみて
フィードバックを得て、
サービスを
運用改善していく
Application (WAR)
S2Servlet DispatcherServlet
DIコンテナ DIコンテナ
Cubby Action
Service / Logic
S2Dao DAO
Interceptor
MVC Controller
Service / Logic
S2Dao DAO
Interceptor
Doma2 DAO
同一のJS/CSS/テンプレートファイル
何が必要か
クライ
アント
サービス
インスタンスA
サービス
インスタンスB
サービス
インスタンスC
10.5.83.126
10.5.83.127
10.5.83.128
ロードバランスは
どうする?
インスタンス数は
動的に変更できる?
?
何が必要か
クライ
アント
サービス
インスタンスA
サービス
インスタンスB
サービス
インスタンスC
10.5.83.126
10.5.83.127
サービス
ディスカバリ
ディスカバリを
認識する
HTTPクライアント
126,127,128
10.5.83.128
• eureka
• Service Discovery
• ribbon
• Client Side Load Balancing
• Hystrix
• Circuit Breaker
• など
クライ
アント
サービス
インスタンスA
サービス
インスタンスB
サービス
インスタンスC
10.5.83.126
10.5.83.127
Eureka
ribbon
10.5.83.128
Spring
• Spring Cloud Netflix
• Spring Bootと簡単に連携できる
俺たちのサービス
Spring
MVC
Spring Boot
Spring Boot
Spring Boot
Eureka
ribbon
!?
Spring
Cloud
Netflix
Eureka
Seasar2部分が
残っているので、
Spring Bootではなく
MVCのまま
最初の移行対象
クレジットカード決済
機能
クレジットカード決済
• 外部の決済代行サービスを利用している
• 決済手段としては利用が多くない
• かといってどうでもいい機能でもない
メンバーの状況
• Spring MVCは慣れてきた
• Spring Boot/Cloudは知らない
• マイクロサービスは概念から
知らない
メンバーの学習
• 各自書籍で学ぶ
• マイクロサービス概念、
Netflix OSSは
説明会を数回
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
機械的かと思いきや
コードを変更する
部分も多い
この部分は
クライアント?MS?
どっちに置く?
処理の順序とか
なんかこう入り組んだ
コードとか
ユニットテスト重要
もともと各クラスに
必ずテストクラスを
作っていた
期間 2016年11月〜17年1月
リリース 2017年1月末
ログ監視
Spring Boot
ログファイル1
Spring Boot
ログファイル2
インフラチームが構築
プロセス監視など
• 監視会社に追加依頼
2つめの移行
別の課金機能を
同様に作業して
リリース済み
課題
マイクロサービスとして
堂々と紹介できる
ほど完成していない
ビッグバンはしない。
これまで通り
長期間に渡って
少しずつ進める
エンジニアの学習、
フィードバックループ
にとって一番いい
課題
すべてのサービスが
同じRDBMSを
使っている
書籍にもあるように
アンチパターン
これを
こうしたい
課題
オーケストレーション
方式
オーケストレーション
アプリケーション
サービスA
サービスB
サービスCアプリケーション
呼び出し側の
負担が大きい
課題
コレオグラフィも
検討したい
コレオグラフィで
アプリケー
ション
イベント
サービスA
サービスB
サービスC
パブリッシュ/
サブスクライブ
サービスD
Spring Cloud Stream
固有の課題
• 元のアプリケーションが
Spring BootではなくMVCである
• Spring Cloud使えない
• ribbon/Eurekaをそのまま使う
ribbonでのAPI呼び出し
コード
@Resource
LoadBalancingHttpClient<ByteBuf, ByteBuf>
ribbonClient;
...
HttpClientRequest<ByteBuf> request =
HttpClientRequest.createPost(url)
.withContent(“...”)
.withHeader("Content-type",
"application/json");
HttpClientResponse<ByteBuf> httpClientResponse =
ribbonClient
.submit(request)
.toBlocking()
.first();
HttpResponseStatus status =
httpClientResponse.getStatus();
ribbonとEurekaの連携は
ライブラリ
ribbon-eureka
を使う
Spring Cloudなら
すぐできるのに...!
と思うこと多数
秋までには
元のアプリケーションも
Bootに移行したい
そうしたら
Spring Cloud Sluethで
分散トレーシングも
入れれる
チームでの感想
• コード分割 + Bootのパワーで
起動が早く動作確認しやすく
なった
• これだけでも十分メリットだ
チームでの感想
• Spring Bootはテストコード
が書きやすい
• Controller
• Application
チームでの感想
• マイクロサービスへの分割で、
サービス全体を手動テストして
確認する数が減った
ここでテストについて
いわゆる結合試験
• Excelに書いてある
• テスト用レコードを登録し、
手でスマホを操作してテストする
• 何割かGauge/Selenideで
自動テストあり
既存のテスト項目を
そのまま実施して、
OKなら移行完了としたい
自動テストは
課金関連では3割ほど。
あとは手で再実施...
その中に
悩ましいケースが...
throw an
exception
and return
500 HTTP
status code
人為的に
エラー動作を
どのように起こすか?
マイクロサービスの
コードを変えて
起動するとかは...
Spring Cloud Contract
Stub Runner
こんなGroovy DSLを
書いて...
org.springframework.cloud.contract.spec.
Contract.make {
request {
method 'POST'
url '/example'
body([ "id": 12345 ])
}
response {
status 201
body([ "name": "john" ])
headers {
contentType('application/
json;charset=UTF-8’)
}
}
スタブを配備し
Stub Runnerを
起動すると...
$ java -jar
-Dstubrunner.ids=
com.jyukutyo:stub-example
stub-runner.jar
DSLのとおりに動作する
Webアプリケーションを
起動してくれる
$ curl -D- -X post
-H 'Content-Type:application/json'
-d "{"id":12345}"
http://localhost:14161/example
HTTP/1.1 201 Created
Content-Type: application/json;
charset=utf-8
Transfer-Encoding: chunked
Server: Jetty(9.3.16.v20170120)
{"name":"john"}
org.springframework.cloud.contract.spec.
Contract.make {
request {
method 'POST'
url '/example'
body([ "id": 12345 ])
}
response {
status 201
body([ "name": "john" ])
headers {
contentType('application/
json;charset=UTF-8’)
}
}
これで
マイクロサービスの
エラー動作を
作り出せる
技術的詳細
Spring Cloud Contract
Stub Runner
の前に
Spring Cloud Contract
• コンシューマ駆動契約(CDC)
フレームワークの1つ
• APIを使う側がほしい仕様(契約)を
書き、提供側は契約を常に満たす
• 使う側: コンシューマ
• 提供側: プロデューサ
Spring Cloud Contract
• 契約をGroovy DSLで書ける
• DSLからスタブを生成できる
• WireMockを使ってスタブを
アプリケーションとして起動する
• Spring Cloud Contract WireMock
WireMock
• HTTPベースのAPIシミュレーター
http://wiremock.org/
契約の使い道
• プロデューサはAPIがつねに契約を
満たすかの検証に使える
• コンシューマは契約内容をスタブに
してテストできる
そのスタブを簡単に
アプリケーションとして
起動してくれるのが
Spring Cloud Contract
Stub Runner
Spring Cloud Contract
Stub Runner
• スタブをJARにして、
Mavenリポジトリに置いておく
• ローカル、インハウスでも
• Stub Runnerはリポジトリから
スタブをダウンロードし
適当なポートで起動する
Spring Cloud Contract
Stub Runner
• 複数のスタブも1つのStub Runner
から起動できる
• スタブをサービスディスカバリ
(Eureka)に登録もできる
https://github.com/spring-cloud/spring-cloud-
contract/tree/master/spring-cloud-contract-stub-runner
クライ
アント
サービス
インスタンスA
サービス
インスタンスB
サービス
インスタンスC
Eureka
ribbon
設定変更なし!
クライ
アント
スタブ
Eureka
ribbon
スタブをMavenリポジトリへ
Artifactoryなど開発者1
MS1のスタブJAR
開発者2
MS2のスタブJAR
GitでDSLを管理
$ mvn clean deploy/install
org.springframework.cloud.contract.spec.
Contract.make {
request {
method 'POST'
url '/example'
body([ "id": 12345 ])
}
response {
status 201
body([ "name": "john" ])
headers {
contentType('application/
json;charset=UTF-8’)
}
}
{
"uuid" : "91053c7f-106d-4441-9dd0-
b2b0fccb3388",
"request" : {
"url" : "/example",
"method" : "POST",
"bodyPatterns" : [ {
"matchesJsonPath" : "$[?(@.id ==
12345)]"
} ]
},
"response" : {
"status" : 201,
"body" : "{"name":"john"}",
"headers" : {
"Content-Type" : "application/
json;charset=UTF-8”
WireMockのJSON
Stub Runner起動
Artifactoryなど
Stub
Runner
MS1のスタブJAR
MS2のスタブJAR
Eureka
MS1:10001 MS2:10002
$ java -jar
-Dstubrunner.ids=[groupId]:
[artifactId],(略)
-Dstubrunner.idsToServiceIds.
[スタブ1のartifactId]=hoge
-Dstubrunner.idsToServiceIds.
[スタブ2のartifactId]=fuga
stub-runner.jar
Eurekaへの
登録名
/stubs
スタブの
ポート
Eurekaと
連携させていれば
Eurekaからでも
確認できる
Spring Cloud Contract
Verifier
• テストコードでスタブを利用できる
• まだ使っていないので紹介だけ
@RunWith(SpringRunner.class)
@SpringBootTest(
webEnvironment=WebEnvironment.NONE)
@AutoConfigureStubRunner(
ids = {"com.example:http-server-
dsl:+:stubs:6565"},
workOffline = true)
@DirtiesContext
public class LoanApplicationServiceTests {
参考: InfoQ記事
Spring Cloud Contractについて
Marcin Grzejszczak氏とのQ&A
https://www.infoq.com/jp/news/2017/05/spring-cloud-contract
(公式翻訳: 私)
展望
• 2年くらいでマイクロサービス
化が落ち着けばいいな
ご清聴
ありがとうございました

More Related Content

PPTX
Seasar2で作った俺たちのサービスの今
PDF
Serverless時代のJavaについて
PDF
Fluentdのお勧めシステム構成パターン
PDF
PostgreSQLバックアップの基本
PDF
大規模負荷試験時にやったこと
PDF
Elasticsearchを使うときの注意点 公開用スライド
PDF
Apache Airflow入門 (マーケティングデータ分析基盤技術勉強会)
PPTX
分析指向データレイク実現の次の一手 ~Delta Lake、なにそれおいしいの?~(NTTデータ テクノロジーカンファレンス 2020 発表資料)
Seasar2で作った俺たちのサービスの今
Serverless時代のJavaについて
Fluentdのお勧めシステム構成パターン
PostgreSQLバックアップの基本
大規模負荷試験時にやったこと
Elasticsearchを使うときの注意点 公開用スライド
Apache Airflow入門 (マーケティングデータ分析基盤技術勉強会)
分析指向データレイク実現の次の一手 ~Delta Lake、なにそれおいしいの?~(NTTデータ テクノロジーカンファレンス 2020 発表資料)

What's hot (20)

PPTX
Ansible ではじめるインフラのコード化入門
PDF
Quarkus入門
PDF
ぼうけんにでかけよう Kubernetes KEDA
PDF
単なるキャッシュじゃないよ!?infinispanの紹介
PDF
Amazon Redshift パフォーマンスチューニングテクニックと最新アップデート
PDF
アーキテクチャから理解するPostgreSQLのレプリケーション
PPTX
OpenStackで始めるクラウド環境構築入門
PPTX
その Pod 突然落ちても大丈夫ですか!?(OCHaCafe5 #5 実験!カオスエンジニアリング 発表資料)
PDF
OpenStackでも重要な役割を果たすPacemakerを知ろう!
PDF
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
PDF
Apache Sparkにおけるメモリ - アプリケーションを落とさないメモリ設計手法 -
PDF
コンテナとimmutableとわたし。あとセキュリティ。(Kubernetes Novice Tokyo #15 発表資料)
PDF
20190911 AWS Black Belt Online Seminar AWS Batch
PDF
perfを使ったPostgreSQLの解析(前編)
PDF
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
PDF
第三回ありえる社内勉強会 「いわががのLombok」
PDF
Twitterのリアルタイム分散処理システム「Storm」入門
PPTX
ぱぱっと理解するSpring Cloudの基本
PDF
AWS Black Belt Online Seminar 2017 Amazon DynamoDB
PDF
マイクロサービス化デザインパターン - #AWSDevDay Tokyo 2018
Ansible ではじめるインフラのコード化入門
Quarkus入門
ぼうけんにでかけよう Kubernetes KEDA
単なるキャッシュじゃないよ!?infinispanの紹介
Amazon Redshift パフォーマンスチューニングテクニックと最新アップデート
アーキテクチャから理解するPostgreSQLのレプリケーション
OpenStackで始めるクラウド環境構築入門
その Pod 突然落ちても大丈夫ですか!?(OCHaCafe5 #5 実験!カオスエンジニアリング 発表資料)
OpenStackでも重要な役割を果たすPacemakerを知ろう!
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Apache Sparkにおけるメモリ - アプリケーションを落とさないメモリ設計手法 -
コンテナとimmutableとわたし。あとセキュリティ。(Kubernetes Novice Tokyo #15 発表資料)
20190911 AWS Black Belt Online Seminar AWS Batch
perfを使ったPostgreSQLの解析(前編)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
第三回ありえる社内勉強会 「いわががのLombok」
Twitterのリアルタイム分散処理システム「Storm」入門
ぱぱっと理解するSpring Cloudの基本
AWS Black Belt Online Seminar 2017 Amazon DynamoDB
マイクロサービス化デザインパターン - #AWSDevDay Tokyo 2018
Ad

Viewers also liked (20)

PDF
Jjugccc2017spring-postgres-ccc_m1
PDF
VMの歩む道。 Dalvik、ART、そしてJava VM
PDF
2017spring jjug ccc_f2
PPTX
Jjug ccc
PPTX
Kotlin is charming; The reasons Java engineers should start Kotlin.
PPTX
U-NEXT学生インターン、過激なJavaの学び方と過激な要求
PDF
Arachne Unweaved (JP)
PDF
Java libraries you can't afford to miss
PDF
SpotBugs(FindBugs)による 大規模ERPのコード品質改善
PDF
Polyglot on the JVM with Graal (English)
PDF
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
PPTX
新卒2年目から始めるOSSのススメ~明日からできるコミットデビュー~
PDF
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
PDF
日本Javaグループ2017年定期総会 #jjug
PDF
ヤフーの広告レポートシステムをSpring Cloud Stream化するまで #jjug_ccc #ccc_a4
PPTX
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
PDF
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
PDF
Introduction of Project Jigsaw
PPTX
グラフデータベース入門
PDF
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
Jjugccc2017spring-postgres-ccc_m1
VMの歩む道。 Dalvik、ART、そしてJava VM
2017spring jjug ccc_f2
Jjug ccc
Kotlin is charming; The reasons Java engineers should start Kotlin.
U-NEXT学生インターン、過激なJavaの学び方と過激な要求
Arachne Unweaved (JP)
Java libraries you can't afford to miss
SpotBugs(FindBugs)による 大規模ERPのコード品質改善
Polyglot on the JVM with Graal (English)
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
新卒2年目から始めるOSSのススメ~明日からできるコミットデビュー~
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
日本Javaグループ2017年定期総会 #jjug
ヤフーの広告レポートシステムをSpring Cloud Stream化するまで #jjug_ccc #ccc_a4
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Introduction of Project Jigsaw
グラフデータベース入門
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
Ad

Similar to JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた (20)

PDF
Jjug springセッション
PDF
Spring.project
PDF
Spring Fest 2018 Spring Bootで作るRESTful Web Service
PDF
Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53
PDF
Spring I/O 2018 報告 RESTDocs RAML, Cloud Contract
PPTX
JSUG SpringOnePlatform 2016報告会 Case study2 - feed back - springoneplatform
PDF
SpringOne 2GX 2014 参加報告 & Spring 4.1について #jsug
PDF
SpringベースのCloud Native Application
PDF
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
PDF
Jsug2015 summer spring適用におけるバッドノウハウとベタープラクティス
PPTX
サンプルアプリケーションで学ぶApache Cassandraを使ったJavaアプリケーションの作り方
PDF
Spring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframework
PPTX
Spring 12年の歴史
PDF
Spring Framework ふりかえりと4.3新機能
PPTX
Spring data-rest-and-spring-cloud-contract
PDF
Springの今
PDF
Spring3.1概要x di
PPTX
Spring I/O 2015 報告
ODP
Spring2概論@第1回JSUG勉強会
PDF
Quarkus による超音速な Spring アプリケーション開発
Jjug springセッション
Spring.project
Spring Fest 2018 Spring Bootで作るRESTful Web Service
Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53
Spring I/O 2018 報告 RESTDocs RAML, Cloud Contract
JSUG SpringOnePlatform 2016報告会 Case study2 - feed back - springoneplatform
SpringOne 2GX 2014 参加報告 & Spring 4.1について #jsug
SpringベースのCloud Native Application
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
Jsug2015 summer spring適用におけるバッドノウハウとベタープラクティス
サンプルアプリケーションで学ぶApache Cassandraを使ったJavaアプリケーションの作り方
Spring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframework
Spring 12年の歴史
Spring Framework ふりかえりと4.3新機能
Spring data-rest-and-spring-cloud-contract
Springの今
Spring3.1概要x di
Spring I/O 2015 報告
Spring2概論@第1回JSUG勉強会
Quarkus による超音速な Spring アプリケーション開発

More from Koichi Sakata (20)

PPTX
Introduction to JIT Compiler in JVM
PPTX
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
PPTX
Guide to GraalVM (JJUG CCC 2019 Fall)
PPTX
Introduction to GraalVM and Native Image
PPTX
Introduction to GraalVM
PPTX
GraalVMで使われている、他言語をJVM上に実装する仕組みを学ぼう
PPTX
Bytecode Manipulation with a Java Agent and Byte Buddy
PPTX
Great Ideas in GraalVM
PPTX
Graal in GraalVM - A New JIT Compiler
PPTX
Kanjava 201804 Java News
PPTX
KanJava 201804 Career 思い込みから逃れた先には、可能性がある
PPTX
from Java EE to Jakarta EE
PPTX
Java release cadence has been changed and about Project Amber
PPTX
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
PPTX
KANJAVA PARTY 2017 前説
PPTX
“Purikura” culture in Japan and our web application architecture
PPTX
デブサミ2017 Javaコミュニティ作ったら人生変わった
PPTX
JJUG CCC 2016 fall バイトコードが君のトモダチになりたがっている
PPTX
日本からJavaOneに行こう!
PDF
How Scala code is expressed in the JVM
Introduction to JIT Compiler in JVM
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
Guide to GraalVM (JJUG CCC 2019 Fall)
Introduction to GraalVM and Native Image
Introduction to GraalVM
GraalVMで使われている、他言語をJVM上に実装する仕組みを学ぼう
Bytecode Manipulation with a Java Agent and Byte Buddy
Great Ideas in GraalVM
Graal in GraalVM - A New JIT Compiler
Kanjava 201804 Java News
KanJava 201804 Career 思い込みから逃れた先には、可能性がある
from Java EE to Jakarta EE
Java release cadence has been changed and about Project Amber
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
KANJAVA PARTY 2017 前説
“Purikura” culture in Japan and our web application architecture
デブサミ2017 Javaコミュニティ作ったら人生変わった
JJUG CCC 2016 fall バイトコードが君のトモダチになりたがっている
日本からJavaOneに行こう!
How Scala code is expressed in the JVM

JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた

Editor's Notes

  • #24: wanted to this diagram case
  • #39: wanted to this diagram case
  • #75: wanted to this diagram case
  • #91: control responses from ms in test I‘m positive useful
  • #92: control responses from ms in test I‘m positive useful
  • #93: control responses from ms in test I‘m positive useful
  • #96: control responses from ms in test I‘m positive useful
  • #97: control responses from ms in test I‘m positive useful
  • #106: run in different port from stub runner
  • #108: control responses from ms in test I‘m positive useful