\section{Aplikační rámce} \label{section:aplicationFrameworks}
Abychom se nemuseli starat o implementační detaily, ale raději se mohli soustředit na obchodní logiku, využíváme aplikační rámce. Jedná se o strukturu, kterou využíváme na vyřešení obecné funkcionality. Rámce nám pomáhají s připojením do databáze, zabezpečením aplikace, jednodušším využíváním designových vzorů, testováním, udržením konzistentity napříč aplikací a mnoho dalších věcí. \cite{whatIsAFrramework} Vyberme zde ten nejvhodnější rámec pro BillSaver a následně jej využijeme v kapitolách \ref{subsection:architecture} a \ref{subsection:ProofOfConcept} pomoci tohoto rámce budeme vytvářet aplikaci BillSaver.

Protože je Java jedním z nejvyužívanějších programovacích jazyků, který doporučují lidé pracující ve finančním oboru, \cite{javaFinTech1, javaFinTech2, javaFinTech3, javaFinTech4, javaFinTech5, javaFinTech6}  zaměříme se zde na aplikační rámce pro Javu. 

Na základě průzkumu provedeného v roce 2018 a 2021 jsou pro Javu nejpopulárnější rámce Spring Boot, Spring MVC, Java EE a Quarqus. \cite{jvmFrameworkReport2018, jvmFrameworkReport2021} Uvedeme si zde jejich výhody a rozdíly. Protože Spring Boot a Spring MVC patří pod jeden celkový rámec, budeme jej zde vnímat jako jeden celek. Dále zde nebudeme mluvit o Java EE kvůli tomu, že Spring je doplněk Java EE. \cite{springDocumentation} 

\subsection{Spring}
Spring je nejpopulárnější rámec na světě s více jak 76 \% java programátorů, využívajících tento aplikační rámec na tvorbu aplikací. \cite{jvmFrameworkReport2021} Je založen na Java EE, s nejnovější verzí 5.0 vyžadující Java EE 7 specifikaci.

Spring je složen z několika projektů, které spolu dohromady tvoří Spring Framework. Každý projekt má za úkol usnadnit tvorbu nějakého aspektu při vývoji aplikace. Zde je pouze několik příkladů vyhovujících našemu problému, tvorbě BillSaveru:

\begin{itemize}
    \item Spring boot -- Pomáhá s integrací jiných rámců. A definuje standardní konfigurace při tvorbě aplikací.
    \item Spring for Apatche kafka -- Rámec, který spojuje aplikaci s jinými službami pomocí asynchronních událostí. A umožňuje tak jednoduchou implementaci EDA. 
    \item Spring MVC -- Umožňuje jednoduše vytvářet aplikace s MVC architekturou.
    \item Spring Repository -- Umožňuje jednoduše propojovat aplikaci s databází.
    \item Spring Security -- Automaticky zabezpečuje jednotlivé aplikace a stará se o bezpečnou komunikaci mezi jednotlivými službami v mikroslužební architektuře.
    \item Spring Restdocs -- Zjednodušuje vytváření dokumentace pro jednotlivé služby. \cite{springDocumentation}
\end{itemize}

\subsection{Quarkus}
Quarkus je relativně nový rámec založený v roce 2019 od společnosti RedHat. \cite{quarkusRelease} Stejně jako Spring i Quarkus je rozdělen na několik projektů, z nichž  každý  se snaží usnadnit tvorbu nějakého aspektu při vývoji aplikace.

Rozdíl oproti Spring představuje jeho zaměření na cloudové řešení. Je postaven pro mikroslužební architekturu. Dále se snaží zaměřit na nekonfigurační přístup pro vývoj, chce tím usnadnit a zrychlit vývoj aplikace. \cite{quarkusDocumentation}

\subsection{Spring x Quarkus}
Shrneme si zde výhody jednotlivých aplikačních rámců.

\begin{table}
\centering
\begin{tabular}{|c|c|}
\hline
\textbf{Spring}                           & \textbf{Quarkus}             \\ \hline\hline
Rozsáhlejší dokumentace          & Rychlá kompilace při vývoji           \\ \hline
Lepší znalost  mezi programátory & Menší velikosti aplikací po kompilaci \\ \hline
Zralý aplikační rámec            & Konzumuje méně paměti                 \\ \hline
Větší komunita                   & Rychlejší start aplikace              \\ \hline
\end{tabular}
\caption{Porovnaní Spring Boot a Quarkus}
\label{table:frameworkComparison}
\end{table}
I přes jejich rozdíly se jedná o velice podobné aplikační rámce, které se snaží docílit stejné věci, zrychlit a zefektivnit tvorbu aplikací. Jejich nejdůležitější parametry, jako jsou rychlost a podpora podpůrných aplikačních rámců, jsou velice podobné. Není tedy úplně těžké vybrat jeden, či druhý ekosystém. Opravdu se ale jedná o ekosystém, není tedy vhodné kombinovat tyto dva druhy aplikačních rámců mezi sebou. Protože potřebujeme co nejméně komplikovaný vývoj a díky jeho popularitě budeme v následujících kapitolách, především \ref{subsection:architecture} a \ref{subsection:ProofOfConcept}, používat Spring. 