Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

of

Lineにおけるspring frameworkの活用 Slide 1 Lineにおけるspring frameworkの活用 Slide 2 Lineにおけるspring frameworkの活用 Slide 3 Lineにおけるspring frameworkの活用 Slide 4 Lineにおけるspring frameworkの活用 Slide 5 Lineにおけるspring frameworkの活用 Slide 6 Lineにおけるspring frameworkの活用 Slide 7 Lineにおけるspring frameworkの活用 Slide 8 Lineにおけるspring frameworkの活用 Slide 9 Lineにおけるspring frameworkの活用 Slide 10 Lineにおけるspring frameworkの活用 Slide 11 Lineにおけるspring frameworkの活用 Slide 12 Lineにおけるspring frameworkの活用 Slide 13 Lineにおけるspring frameworkの活用 Slide 14 Lineにおけるspring frameworkの活用 Slide 15 Lineにおけるspring frameworkの活用 Slide 16 Lineにおけるspring frameworkの活用 Slide 17 Lineにおけるspring frameworkの活用 Slide 18 Lineにおけるspring frameworkの活用 Slide 19 Lineにおけるspring frameworkの活用 Slide 20 Lineにおけるspring frameworkの活用 Slide 21 Lineにおけるspring frameworkの活用 Slide 22 Lineにおけるspring frameworkの活用 Slide 23 Lineにおけるspring frameworkの活用 Slide 24 Lineにおけるspring frameworkの活用 Slide 25 Lineにおけるspring frameworkの活用 Slide 26 Lineにおけるspring frameworkの活用 Slide 27 Lineにおけるspring frameworkの活用 Slide 28 Lineにおけるspring frameworkの活用 Slide 29 Lineにおけるspring frameworkの活用 Slide 30 Lineにおけるspring frameworkの活用 Slide 31 Lineにおけるspring frameworkの活用 Slide 32 Lineにおけるspring frameworkの活用 Slide 33 Lineにおけるspring frameworkの活用 Slide 34 Lineにおけるspring frameworkの活用 Slide 35 Lineにおけるspring frameworkの活用 Slide 36 Lineにおけるspring frameworkの活用 Slide 37 Lineにおけるspring frameworkの活用 Slide 38 Lineにおけるspring frameworkの活用 Slide 39 Lineにおけるspring frameworkの活用 Slide 40 Lineにおけるspring frameworkの活用 Slide 41 Lineにおけるspring frameworkの活用 Slide 42 Lineにおけるspring frameworkの活用 Slide 43 Lineにおけるspring frameworkの活用 Slide 44 Lineにおけるspring frameworkの活用 Slide 45 Lineにおけるspring frameworkの活用 Slide 46 Lineにおけるspring frameworkの活用 Slide 47 Lineにおけるspring frameworkの活用 Slide 48 Lineにおけるspring frameworkの活用 Slide 49 Lineにおけるspring frameworkの活用 Slide 50 Lineにおけるspring frameworkの活用 Slide 51 Lineにおけるspring frameworkの活用 Slide 52 Lineにおけるspring frameworkの活用 Slide 53 Lineにおけるspring frameworkの活用 Slide 54
Upcoming SlideShare
Spring Day 2016 - Web API アクセス制御の最適解
Next
Download to read offline and view in fullscreen.

47 Likes

Share

Download to read offline

Lineにおけるspring frameworkの活用

Download to read offline

spring day 2016

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all

Lineにおけるspring frameworkの活用

  1. 1. LINE における Spring Framework の活⽤用 Tokuhiro Matsuno LINE Corp. Service development 1
  2. 2. お前誰よ? • LINE Corp. サービス開発1室 • LINE Bot SDK 開発まとめ • Java版実装 • LINE Notify 開発
  3. 3. LINE って Java のイ メージありますか??
  4. 4. 結構使われてるんですよ。 ↓ どのぐらい使われているのか? ↓ github enterprise を 検索してみた
  5. 5. CSS 4% HTML 4%Clojure 5%Perl 5% Objective-C 6% Shell 9% Python 10% JavaScript 18% Java 41%
  6. 6. "org.springframework spring- webmvc" で検索: 547 "spring-boot-starter-web" で検索: 285
  7. 7. Why Spring? • 開発のサイクルが(Java EE に⽐比べると)速い • Java EE は B2C のスケールが必要な Web サー ビスでの事例例をあまり聞かない • 社内に Java EE の経験ある⼈人が少ない
  8. 8. Microservices • 時代は Microservices • ⼩小さな application server の組み合わせでおおき なサービスを実現 → ⾔言語/フレームワークはある程度柔軟に
  9. 9. ⾔言語/フレームワークを 締め付けすぎない • ⼀一つの技術にのみコミットしすぎると変化に弱 くなる • spring, guice, Vert.x, Dagger2, avans,etc. • groovy, scala, … • golang, perl, python, …
  10. 10. There’s more than one way to do it
  11. 11. spring-boot は Microservice で使うには良いパーツ
  12. 12. なぜ spring-boot か? • uber jar でお⼿手軽に deploy できる • アプリケーションの開発がわりと簡単に開始で きる • XML 書かなくていい • Java のわりに 起動が速い
  13. 13. 開発事例例: LINE Notify
  14. 14. LINE Notify
  15. 15. curl -X POST -H 'Authorization: Bearer <ACCESS_TOKEN>' -F 'message=Hello' https://notify-api.line.me/api/notify
  16. 16. LINE Notify サーバー構成 MySQL MySQL API 1 API 2 Web 1 Web 2 Redis Redis
  17. 17. MySQL • MySQL 5.6 • InnoDB • MMM • 速い • 安い • うまい
  18. 18. Redis • Redis sentinel • KVS は基本的に Redis が ⼈人気 • 柔軟性 • パフォーマンス • 安定性 • 楽しい • Cache • Rate limit
  19. 19. nginx • ACL 管理理 • rewrite • Access log nginx jetty nginx jetty nginx jetty
  20. 20. Jetty • spring-boot-starter-jetty • コード読みやすい • 起動速い • 開発時に便便利利 • 開発時と本番で違う app server 使うとかイヤ • undertow よりも開発者多い
  21. 21. LINE ♥ Fluentd • アクセスログの集計 • http status コードの統計監視 • イベントログ • Fluency が最近は優勢 • 社内のおっきなストレージに保存
  22. 22. spring-boot 1.4.0.RELEASE • spring-boot-starter- web • spring-boot-starter- freemarker • spring-boot-starter- data-redis • spring-boot-starter- security • spring-boot-starter- mobile • mybatis-spring-boot- starter
  23. 23. spring-boot-starter-web • 安定している • @GetMapping, @PostMapping とか最近はいっ て便便利利 • 特に語ることがない。
  24. 24. spring-boot-starter- freemarker • freemarker 便便利利 • 社内では thymeleaf と⼈人気を⼆二分している。気が する。 • IDEA の補完が freemarker の⽅方が便便利利という説も? • 最近 Apache Incubator ⼊入り。 • 最近、⾃自動エスケープ⼊入った。(spring.ftl issue)
  25. 25. spring-boot-starter-redis • ⼊入れたら普通に使える • 特に問題なし。
  26. 26. spring-boot-starter-mobile • スマホかどうかを User-Agent で判定するのに利利 ⽤用 • ちょっと前だとタブレットと判定するかどうか みたいなのにうるさい⼈人がいたけど、最近はこ れぐらい雑でも⼤大丈夫。
  27. 27. mybatis-spring-boot-starter • 社内の O/R Mapper は mybatis 優勢 • JPA は少ない • B2C でトラフィック予測難しい • パフォーマンス問題起きたときの、MyBatis の安⼼心 感。 • MyBatis の XML をアップすると DBA がクエリ評価し てくれるサービス
  28. 28. MyBatis + Kotlin • XML ⾟辛い • Java アノテーションでも書けるけど⾟辛い • 複数⾏行行⽂文字列列書けない → 複雑なクエリが⾟辛い • そこで Kotlin ですよ!
  29. 29. @Mapper interface BlogDao { @Select(""" SELECT * FROM blog """) fun findAll(): List<Blog> @Select(""" SELECT * FROM blog WHERE id=#{id} """) fun findById(@Param("id") id: Long): Blog
  30. 30. なんで kotlin? • ぶっちゃけ groovy でも良かった • でも、時代の趨勢的に kotlin かなって
  31. 31. プロジェクト モジュール構成
  32. 32. line-notify-common • application.yml • logback-spring.xml line-notify-api line-notify-admin line-notify-webline-notify-test line-notify-model
  33. 33. Deploy & CI at LINE
  34. 34. Deploy • PMC という内製ツールでデプロイ • Shell script で rsync して再起動する Web UI • (規模が⼤大きいのでオンプレです)
  35. 35. デプロイ⽅方法 github jenkins nexus PMC App server Build jar & testing upload jar
  36. 36. 実⾏行行環境 • supervisord • java • nginx ⾃自動再起動
  37. 37. ブランチ構成は git flow? master beta Topic
  38. 38. LINEにおける アプリケーション モニタリング
  39. 39. Prometheus • クエリが使える TSDB • 1サーバーで千台規模を監視可能 • Pull型
  40. 40. Prometheus アーキテクチャ Prometheus node_exporter jmx_exporter java app node_exporter jmx_exporter java app httpd Pull grafana
  41. 41. node_exporter
  42. 42. jmx_exporter
  43. 43. Dropwizard metrics • アプリケーション固有のメトリクス値を取得す るのに利利⽤用 • jmx_exporter 経由で prometheus へ
  44. 44. LINE Bot + Spring Boot
  45. 45. LINE Messaging API • LINE のボットを簡単に作れる • 最⼤大優勝賞⾦金金1000万円の LINE BOT AWARDS も やってる • Java + spring-boot なら簡単につくれる
  46. 46. LINE Messaging SDK for Java • JSON をマッピングするためのクラス • HTTP Client library based on Retrofit • Servlet support • spring-boot support
  47. 47. なぜ spring-boot をサポート しているのか • 設定が簡単 • とりあえずすぐ起動できる • 使ってる⼈人が多い • AutoConfiguration まわりのサポートが簡単にで きる
  48. 48. spring-boot supports auto-configuration META-INF/spring.factories org.springframework.boot.autoconfigure.Enabl eAutoConfiguration= com.linecorp.bot.spring.boot.LineBotAutoConf iguration,com.linecorp.bot.spring.boot.LineB otWebMvcConfigurer
  49. 49. どのぐらい簡単に作れ るのか?
  50. 50. 依存を設定する <dependency>     <groupId>com.linecorp.bot</groupId>     <artifactId>line-bot-spring-boot</artifactId>     <version>1.3.0</version> </dependency>
  51. 51. @SpringBootApplication public class EchoApplication { public static void main(String[] args) { SpringApplication.run( EchoApplication.class, args); } }
  52. 52. @LineMessageHandler public class EchoHandler { @Autowired private LineMessagingService lineMessagingService; @EventMapping public void handle(MessageEvent<TextMessageContent> event) throws Exception { lineMessagingService.replyMessage(new ReplyMessage( event.getReplyToken(), singletonList( new TextMessage(event.getMessage().getText())))) .execute(); } }
  53. 53. jjug ccc 2016 fall で LINE Bot の live coding やり ます
  54. 54. ご清聴ありがとうございました。 懇親会までいるのでお気軽にお声が けください。 Bot についてのご質問にもお答えで きます。 We’re hiring.
  • ssusere0ee04

    Jul. 18, 2021
  • ssuserbfce2b

    Apr. 12, 2020
  • KoseiAoyagi

    Mar. 5, 2019
  • bontaro

    Oct. 16, 2018
  • hirokawasaki

    Nov. 15, 2017
  • ManamiNakamura1

    Jun. 12, 2017
  • DubaiEscortBunniesUAE

    May. 30, 2017
  • KensukeFujiya

    May. 10, 2017
  • ToshiakiIto

    Apr. 26, 2017
  • 17tea

    Dec. 17, 2016
  • objectx

    Dec. 13, 2016
  • hirokinishibori50

    Dec. 8, 2016
  • satoryu

    Dec. 8, 2016
  • hiroyukikomatsuzawa

    Nov. 30, 2016
  • shimezihiziki

    Nov. 26, 2016
  • logicbd01

    Nov. 26, 2016
  • TomohiroTSUKUI

    Nov. 25, 2016
  • TsukasaTamaru

    Nov. 25, 2016
  • ssgonhouse

    Nov. 23, 2016
  • yutakakinjyo

    Nov. 22, 2016

spring day 2016

Views

Total views

32,729

On Slideshare

0

From embeds

0

Number of embeds

14,744

Actions

Downloads

76

Shares

0

Comments

0

Likes

47

×