JSUG勉強会2019その7ビズリーチにおけるSpringの活用に参加した

Posted by user on Friday, July 12, 2019

TOC

ビズリーチ社内で実施されたJSUG勉強会に参加してきたのでまとめを書きました。

勉強会概要

  • 勉強会名: ブログ記事_JSUG勉強会2019その7ビズリーチにおけるSpringの活用
  • 場所: ビズリーチ社(渋谷駅)
  • 日時: 2019/7/12 19〜21時

1部 クラウド時代だからspring-retryフレームワーク。

渡邉 祐さん (株式会社ビズリーチ)による発表でした。

資料はこちら
https://docs.google.com/presentation/d/1UjSUpSgSdicpTnQUziwe4_FzZFrNMQ7fcGt4gzv_SEk/edit#slide=id.g5d24b1c949_0_159

プレゼン内容

  • RDBが落ちた時、どうすべきか
  • 1日辺り2〜3分落ちてもSLA範囲内。落ちる前提のシステム構築が必須
  • 短期間で復旧している可能性が高いなら自動リトライ
  • 時間が長い場合はスロットリング(今回の話の範囲外)
  • RDBフェイルオーバー時の主副切り替えはhostの記載された名前解決。aliasを切り替えて主副のFQDNを切り替えている。そのためアプリケーションの修正は不要
  • JVMの場合はDNS問い合わせ結果を一生キャッシュする設定になっている(-Dnetworkaddress.cache.ttl=-1 がデフォルト)。RDBの切り替えだけでは動かない原因はこれ
  • コネクションプールcommons-pool 1.xは2012年で開発打ち止め。デファクトスタンダードはHikariCP
  • RetryableはAOPなのでやや遅くなる
  • 指数関数的にリトライすることも可能(1sec, 2sec, 4sec, 8sec)
  • フェイルオーバーは実験的に試すことが必要 ※スロットリングとは、サービスが過負荷状態の時にリクエストを制限する手法の事

所感

今までDB近辺の仕事の経験がなかったが、実運用で必要な仕組みの1つとしてSpringが提供しているSpring-Retryがあることが理解できた。

RDBの切り替えだけでなく、アプリケーション側の設定もしないと実質動作しないようなハマりポイントは絶対ハマる内容であり、今後出くわす可能性も大いに有り得る。

結論としてフェイルオーバー時の挙動をテストすることが挙げられていたが、その通り。

2部 フレームワーク移行で学ぶ Spring Boot のつまづきポイント

木下 真さん (株式会社ビズリーチ)による発表でした。

プレゼン内容

  • SAStrutsなどからSpringへフレームワーク移行した話
  • Controllerクラスとテンプレートエンジンの書き換えから始める
  • Springは書き方の選択肢が複数あって最初に躓く。helperクラスを作成し、Controllerからhelperに丸投げしてModelAndViewを返す仕組みにしてチーム単位でhelper内の実装は任せた
  • SpringSecurityが有向だとデフォルトでcsrfトークンが有効。th:actionを使用すればOK。エラーログが出ないことがあるらしいのでハマりポイント
  • SpringSecurityは処理がかなり隠蔽されている。動きがわかりにくい
  • dbflute-example.on-springboot にDBFlute+SpringBootのサンプルプログラムを置いている

所感

Springフレームワーク内の実装で複数の選択肢がある中で意思決定が難しいと仰っており、同意でした。

ベストな選択ができない中で、いくつかの選択肢を取ることができる QAで挙がっていたが、ControllerとREST APIでenumのコンバージョンが異なるなど、REST APIとControllerでズレているようなものがあるらしいので注意

3部 これで怖くない!?コードリーディングで学ぶSpring Security

多田 真敏さん (株式会社カサレアル、JSUGスタッフ)による発表でした。

資料はこちら
https://www.slideshare.net/masatoshitada7/spring-security-meetup

プレゼン内容

  • SpringSecurityは12重程度のサーブレットフィルターで実現している
  • 歴史が長いのでAPIが古臭いところがある(戻り値がObject型のところがだったり。ログインしているとUserDetailsが返ってくるが、ログインしていないとStringが返ってくるなど・・・)
  • 文字列比較でも最後まで比較している。レスポンスタイムで何文字目まで合っているか推測される恐れがあるため
  • リアクティブ版の資料は以前のJSUG?のプレゼン資料がある(SpringSecurity5.0とかで調べれば出てくる)
  • springSecurityFilterChainはサーブレットフィルターとして動いている。そこから呼ばれるFilterはBeanとして動いている
  • SpringBootの場合は〜security=debugにすると各Filterのログが出る
  • MethodSecurityInterceptorはinterceptor、FilterSecurityInterceptorはFilter

所感

SpringSecurityのコードリーディングは大変勉強になった。大まかな処理概要として資料にまとめてあるのも助かる。

AccessDicitionManagerなど、意思決定をする設計は実業務でも使えそう。クラス図も補記してあったので理解しやすかった。

全体所感

運用、初心者向け、上級者向けと様々なレベル感の話が聞けて良い機会であった。

Springの選択肢の多さやSpringSecurityの仕組みの複雑さなど共感できる点が多く、最近SpringBootを始めた自分としては仲間がいる感がして精神的に良い機会となった笑
Springの機能の豊富さと自分の未経験範囲が広いことを再認識できたため、12月JSUGの会まで勉強して出直そうと思う。