開発モードと本番アプリケーションの差異
このドキュメントでは、Quarkus の開発モードが本番アプリケーションとどのように異なるかを説明します。
イントロ
Quarkus provides a dev mode which greatly aids during development but should NEVER be used in production.
These pages have instruction on how to use dev mode with Maven, Gradle or with the Quarkus CLI.
アーキテクチャの差異
機能セットはさておき、開発モードで実行される Quarkus アプリケーションは、プロダクションアプリケーション (すなわち、 java -jar …
を使用して実行されるもの) とはアーキテクチャ的に異なります。
In dev mode, Quarkus uses a ClassLoader hierarchy (explained in detail in the class loading reference) that enables the live reload of user code without requiring a rebuild and restart of the application.
本番アプリケーションでは、前述のクラスローディングのインフラは全く存在しません。目的に応じて構築された単一の ClassLoader があり、(ほぼ) すべてのクラスと依存関係をロードします。
開発モードの機能
開発者満足を提供するという信条のもと、Quarkus は開発モードを有効にすると多くの機能を提供します。最も重要な機能は以下の通りです。
ライブ・リロード
この非常に重要な機能は、紹介するまでもなく、 アーキテクチャの違い のセクションですでに述べたとおりです。
Dev UI
Quarkusは、ブラウザから /q/dev-ui
でアクセスできる非常に便利な UI を提供しています。このUIにより、開発者はアプリケーションの状態を確認できるだけでなく、その状態を変更できるさまざまな操作にアクセスできます(存在するエクステンションに依存)。そのような操作の例としては、以下のようなものがあります:
-
設定値の変更
-
データベース移行スクリプトの実行
-
キャッシュの消去
-
スケジュールされたオペレーションの実行
-
コンテナのビルド
データベースインポートスクリプト
The quarkus-hibernate-orm
extension will run the import.sql
script in src/main/resources
when Quarkus is running in dev mode. More details can be found in the Hibernate ORM guide.
Dev Services
When testing or running in dev mode Quarkus can even provide you with a zero config database out of the box, a feature we refer to as Dev Services. More information can be found in the Datasource guide.
Swagger UI
The quarkus-smallrye-openapi
extension will expose the Swagger UI when Quarkus is running in dev mode. Additional information can be found in the Swagger UI guide.
GraphQL UI
The quarkus-smallrye-graphql
extension will expose the GraphQL UI when Quarkus is running in dev mode. More details can be found in the Graphql guide.
Health UI
The quarkus-smallrye-health
extension will expose the Health UI when Quarkus is running in dev mode. The Healthcheck section provides additional information.
Mock mailer
The quarkus-mailer
extension will enable an in-memory mock mail server when Quarkus is running in dev mode. See the Mailer guide for more details.
パフォーマンスへの影響
開発モードでは、アプリケーションの実行時フットプリントを最小化することは主な目的ではありません (ただし、Quarkus は高速に起動し、メモリをほとんど消費しません)。主な目的は、開発者満足を実現することです。そのため、ライブリロードが実行されるたびに、より多くのクラスがロードされ、ビルド時の操作も行われます。
対照的に、プロダクションアプリケーションでは、Quarkusの主な目的は、最小のメモリを消費し、最小の時間で起動することです。したがって、本番アプリケーションを実行する際には、ビルド時の操作は(定義上)実行されず、ビルド時に必要なさまざまなインフラストラクチャクラスは、実行時にはまったく存在しません。さらに、 fast-jarパッケージタイプに付属する目的に応じて構築されたClassLoaderにより、クラスの検索が可能な限り高速に行われると同時に、メモリ内のjarの量も最小限に抑えられます。
最適なパフォーマンスはdevモードの目的では決してないため、起動時間を改善する目的で、JVMのC2コンパイラーはdevモードでは無効になっています。 |
セキュリティへの影響
dev-modeアプリケーションを本番環境で実行してはいけない最も重要な理由は、開発モードでは (Dev-UI を介して) 機密性のある情報を読み取ることができる一方で、(本番環境のアプリケーションでは利用できないはずのエンドポイントを公開したり、Dev-UI を介して) 破壊的な操作にアクセスすることができるからです。
ネイティブ実行可能ファイル
ネイティブ実行可能ファイルを作成する場合 (詳しくは こちら)、常に 本番アプリケーションからビルドされます。