Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Laravelのセッション管理でフレームワークの オーバーライドが必要になった話

Laravelのセッション管理でフレームワークの オーバーライドが必要になった話

TaikiKawamura

October 11, 2021
Tweet

More Decks by TaikiKawamura

Other Decks in Programming

Transcript

  1. © Copyright 2021 Relic Inc. All rights reserved.
    -BSBWFMͷηογϣϯ؅ཧͰϑϨʔϜϫʔΫͷ
    ΦʔόʔϥΠυ͕ඞཁʹͳͬͨ࿩
    גࣜձࣾ3FMJDՏଜ ଠथ

    View full-size slide

  2. ࣗݾ঺հ

    • 河村 太樹(かわむら たいき)
    • 株式会社Relic テクノロジープラットフォームグループ マネージャー
    • 主としている開発業務
    • バックエンド開発
    • インフラ構築・SRE
    • まれにVuexの部分も書いたり
    • 趣味
    • バイク・ドライブ
    • 酒
    • マンガ
    • キャンプ・BBQ
    • 軽い登⼭←New!!

    View full-size slide


  3. ෺ޠͷ࢝·Γ
    • ある⽇河村くんは某社にジョインし、2,3カ⽉後にリリースされる案件のPJに配属され
    ました
    • ⾯談では「インフラ構築得意です」と⾔っていたので検証環境と本番環境の構築も頼ま
    れました
    • 検証環境を作ったのでいじってもらったのですが、なんかセッションが保持されない!
    と⾔われました。確かに河村くんはインフラ構築やってきた⼈ですが、久しぶりに1か
    らのサービスで作ったので、「あぁ、ローカルじゃない複数台構成のときにどうするか
    抜けてたわ」となったのでした・・・

    View full-size slide


  4. -BSBWFM ʹݶΒͣ
    ͷηογϣϯσʔλ؅ཧํ๏
    • file
    • cookie
    • database
    • memcached/redis
    • array
    • (Laravelにあるだけでリクエスト間で保持されないため、除外)

    View full-size slide

  5. ͲΕΛ࢖͍·͔͢ʁ

    • file
    • 本番等で複数台サーバがあるときに、特定のサーバに⾏かないといけない
    • スティッキーセッションを使えば解決するけれども、インフラエンジニアとして
    は、そもそもWebサーバがステートフルである状態に精神が耐えられない
    • cookie
    • ⼀⾒楽そうだが、サイズに上限がある&実際に簡単に到達したので本番⽤途では
    不適
    • ブラウザによって異なるらしいが、4096byteが上限なのもあり、あてにはで
    きない
    • database
    • 無難案ではある
    • インフラエンジニアとしてはリレーショナルでもないデータをRDBで管理したく
    ない
    • memcached/redis
    • 難が⼀番なく、個⼈的におすすめ。

    View full-size slide

  6. ͡Ό͋3FEJTΛ࢖͓͏ʂ

    • 使えれば問題なかったが、のっぴきならない?事情で使えなかった

    View full-size slide

  7. ͡Ό͋EBUBCBTFΛ࢖͓͏

    • 苦悩の始まりだった

    View full-size slide

  8. Τϥʔ͕ग़ͨ

    View full-size slide

  9. Կ͕ىͬͨ͜ʁ

    • Databaseでセッションを管理するときだけ、なぜか頑張ってセッションには必要な
    さそうなデータを取得しようとする
    • このサービスではユーザと管理者のセッションを両⽅管理していた
    • 取りたいデータがとれなかった
    • どちらかがなければ・・・

    View full-size slide

  10. ࢀߟɿ$BDIF#BTFE'JMF4FTTJPO)BOEMFS

    View full-size slide

  11. ࢀߟɿݩͷ%BUBCBTF4FTTJPO)BOEMFS

    View full-size slide

  12. Ͳ͏΍ͬͯղܾͨ͠ʁ

    • DatabaseSessionHandlerをオーバーライド
    • SessionServiceProvidorを作り、オーバーライドしたSessionHandlerを使うように指
    定する
    • configのprovidersに登録する
    • sessionのドライバーにオーバーライドしたドライバーを指定する

    View full-size slide

  13. DatabaseSessionHandlerをオーバーライド

    View full-size slide

  14. DatabaseSessionHandlerをオーバーライド(元)

    View full-size slide

  15. SessionServiceProvidorを作り、オーバーライ
    ドしたSessionHandlerを使うように指定する

    View full-size slide

  16. configのprovidersに登録する

    View full-size slide

  17. sessionのドライバーにオーバーライドしたドラ
    イバーを指定する

    View full-size slide

  18. ·ͱΊ

    • セッションデータ管理はRedisとかを使いましょう(笑)
    • のっぴきならない事情があったらオーバーライドしたドライバを依存性注⼊しま
    しょう!

    View full-size slide

  19. ͓஌Βͤ ൪એ


    • Relicのテクノロジープラットフォームグループ絶賛募集中です!!
    • バックエンドアプリケーション開発の経験がある⽅
    • ミドルウェアセットアップ、チューニングの経験がある⽅
    • AWSの経験がある⽅
    • フロントも触れます、な⽅
    • SREの領域だけでなく共通基盤開発、開発⽀援システムを作ったり作ろうとしたり
    • ⾯⽩ポイント
    • Relicはまだまだ成⻑途中で課題がいっぱいいっぱい
    • 解決したらきっと⼤幅⼯数減、売上増が⾒込める!
    • どこか特定の領域だけでなく、全体最適を求めます
    • X: 全部の知識を詳しく知ってほしい、フルスタックエンジニア
    • O: 抽象的に必要なことを求める思考⼒
    • O: 問題定義、解決能⼒
    • 割とチームができたばかりで、どういうチームにしていきたいか、していく
    べきか、から議論可能

    View full-size slide

  20. ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠

    View full-size slide