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

SpringBoot x MyBatis x TestContainersでSQLテストを行う

k_sasaki
October 26, 2024
590

SpringBoot x MyBatis x TestContainersでSQLテストを行う

k_sasaki

October 26, 2024
Tweet

Transcript

  1. 自己紹介 佐々木興平 ( X: @earu) 所属: エキサイト(株) (4年6ヶ月)(ex.セレス,CA,ぐるなび) 職種: メディア事業部事業部長

    兼 メディア事業部開発責任者 やっていること: - PdM - テックリード 最近チームでよくさわっている : - SpringBoot / Java / htmx / alpine.js / Tailwind CSS / MySQL PostgreSQL / Redis / AWS 色々/ AWS copilot CLI / Terraform ポリシー: - 設計は難しくても正しいものに寄せる - 設定は簡単なものに寄せる
  2. JJUG CCC 初登壇になります 今回送ったプロポーザルは下記です。 (話しやすい順に並べています) Spring-boot-adminで簡易モニタリングを行い、開発生産性を上げる SpringBoot x htmx x

    Alpine.js x Tailwind.css による怖くないWeb開発 Spring AI x AWS Bedrockで簡単なAIアプリケーションを作る SpringBoot x Mybatis x TestContainerでSQLテストを行う <= 採択
  3. メディア事業部もほぼ RDBにすべてのデータを寄せている メリット - データ型がある - ある程度柔軟な検索ができる - データ移行ツールなどが充実している -

    キャッシュと組み合わせると結構負荷にも 耐えられる デメリット - 設計力は結構必要 - 定期的にメンテナンス時間が必要 (セキュ リティアップデートなど
  4. SQLを試す環境はある ローカルマシン上 • ローカルにDBをインストール • ローカルにDockerで構築 • H2Databaseを起動する(MySQL、PostgreSQL, 一部制限あり?) サーバ上

    • 開発者ごとにサンドボックススキーマを立てる Web上 • DB<> Fiddle (MySQL, Postgres, Db2, Firebird, SQL Server SQLite, YugabyteDB, Oracle) • SQL Fiddle (MySQL, Postgres, SQL Server SQLite) • DB Fiddle (MySQL, Postgres, SQLite)
  5. SQLを試す環境はある ローカルマシン上 • ローカルにDBをインストール • ローカルにDockerで構築 • H2Databaseを起動する(MySQL、PostgreSQL, 一部制限あり?) サーバ上

    • 開発者ごとにサンドボックススキーマを立てる Web上 • DB<> Fiddle (MySQL, Postgres, Db2, Firebird, SQL Server SQLite, YugabyteDB, Oracle) • SQL Fiddle (MySQL, Postgres, SQL Server SQLite) • DB Fiddle (MySQL, Postgres, SQLite) 開発者が増えたときの同一環境構築コストが 高く再現性が難しい
  6. SQLテストを行うには? • (ローカルでもリモートでも) DBを立ち上げる • DBのマイグレーションを正確に行う ◦ これを実施しないと、テストが色々な理由で失敗するようになる • テストコードを書く

    下記の3つを行う必要がある。通常、SSHやdocker composeでDBを立ち上げる必要が あるが、Testcontainersは、DBの立ち上げ部分をテストコードに書けるというのが良い。
  7. テストデータの管理 (方法1:マウント機能を利用する ) メリット: - SQLファイルが分散しない - マイグレーションツール等を用意しなくていい デメリット: -

    マイグレーションツールを使用している場合、開 発とテストで異なるものを使用するので、ダブル メンテになる
  8. テストデータの管理 (方法2:@Sqlを使用する ) メリット: - SQLファイルが分散しない - マイグレーションツール等を用意しなくていい デメリット: -

    マイグレーションツールを使用している場合、開 発とテストで異なるものを使用するので、ダブル メンテになる可能性がある
  9. Appendix. FAQ - SpringBoot Docker Compose Support との棲み分け - Dockerは開発とテストで同じものを使用するか?

    - コンテナイメージはTestcontainersのモジュールにあるものしか使えな いのか?
  10. SpringBoot Docker Compose Support との棲み分け SpringBootにもDocker Compose Support が入っています。 開発時に別ターミナルで

    「docker compose up」を打たずに、SpringBootのアプリケー ション起動時に一緒に docker-compose.ymlに書いてあるコンテナ を起動してくれます。