\section{Technické a technologické aspekty} \label{section:TechnickeAspekty}
\subsection{Technické a technologické aspekty projektu}
\subsubsection{Celková architektura}
Pro správné fungování celého projektu je kritický prvotní návrh systému, tedy správné rozdělení obchodních entit, navržení vzájemné komunikace mezi entitami a zjištění potřebných dat, která bude BillSaver uchovávat. Kvůli potřebným vlastnostem popsaným v kapitole \ref{subsection:architecture} jsme se rozhodli navrhnout systém a vypracovat jako mikroslužební architekturu. Kvůli tomu jsme rozdělili celý systém na jednotlivé služby, jež by se daly rozčlenit do dvou kategorií -- na hlavní a vedlejší služby.

Hlavní služby mají za úkol fakticky spravovat BillSaver. Do těchto služeb se počítají služby, které berou účtenky od zákazníka, skladují účtenky a informace o jednotlivých položkách na účtence a spravují obchodní a uživatelská data. Každá tato služba je navržena jako nezávislá entita, proto bude moct fungovat úplně nezávisle.

Vedlejší služby mají umožňovat komunikaci uživatele se systémem. Do těchto služeb se řadí uživatelská rozhraní, notifikační služby a informační centra. Tyto služby závisí na fungování hlavních služeb a v případě vypadnutí hlavních služeb vypadnou i ty vedlejší.

\subsubsection{Použité softwarové technologie}
Všechny služby jsou postaveny na stejném základu, tedy Java, Spring Boot, Kafka a Rest. Všechny tyto technologie jsou popsané v technické analýze, kde je také odůvodněno, proč byly použity zrovna tyto technologie, viz  \ref{subsection:architecture}.

Kvůli použití stejných základních technologií máme možnost vytvořit standardizované procesy pro samotné nasazení těchto technologii na server. Zkráceně se vše bude nasazovat na kubernetees cluster, jenž poběží u jednoho z cloud dodavatelů. Bližší informace budeme probírat v kapitole \ref{subsection:ci/cd}.

Díky těmto technologiím a procesům budeme mít možnost poskytovat jednoduchou, flexibilní a rozšiřitelnou platformu, na níž budeme moct budovat další funkcionalitu.

\subsection{Provozní řešení}
Pro jednoduchý a rozšiřitelný vývojový proces budeme používat cloud služeb, přesněji SaaS neboli software jako služba. Nejenom nám to ulehčí koordinaci všech vývojových prostředí, ale nebude ani zapotřebí kupovat a starat se o drahý hardware. Stačí nám rychlé porovnání, kde zjistíme, že se nám SaaS služby vyplatí, v tabulce \ref{fig:compareLocalAndSaaSDevelopment}.

\begin{table}[h!]
\centering
\begin{tabular}{|>{\hspace{0pt}}m{0.20\linewidth}|>{\hspace{0pt}}m{0.15\linewidth}|>{\hspace{0pt}}m{0.15\linewidth}|>{\hspace{0pt}}m{0.4\linewidth}|} 
\hline
                              & Lokální vývojové prostředí & SaaS vývojové prostředí & Odůvodnění\\ 
\hline
Počítač                       & 10000                      & 3750                    & Pro lokální vývoj musí být počítač dostatečně rychlý, u SaaS toto není zapotřebí, veškeré výpočetní operace probíhají na serverech provozovatele služby. Cena počítače je rozložena na 4 roky, což je jeho životnost. \\ 
\hline
Software k počítači           & 0                          & 30000                   & Lokální prostředí může používat software, který je zdarma, a ušetřit tak na SaaS službě. \\ 
\hline
Cena administrátora           & 48000                      & 24000                   & U lokálního počítače může selhat aktualizace 
a zničit tak systém, uživatel může stáhnout vir, popřípadě může nastat i fyzická chyba, administrátor je tak musí řešit. 
S hardwarem, na kterém běží SaaS, se také může něco stát, ale  většina těchto chyb se dá vyřešit rychlým přeinstalováním počítače. Protože uživatel nemá žádná data na stroji, který používá SaaS, může to být tak první volba, kterou administrátor zvolí, a ušetří si tak čas hledáním chyby. K této ceně jsem dospěl z mých osobních zkušeností. Tedy administrátorská práce vychází na 1 MD měsíčně a u SaaS 0.5 MD měsíčně, protože nemusí hledat chybu, která nastala. Cenu 1 MD počítáme jako 4000 Kč.  \\ 
\hline
Neproduktivita při problémech & 48000                      & 0                       & V případě lokálního prostředí si programátor musí počkat na opravu, je proto neefektivní, nastavení vývojového prostředí by trvalo déle než samotná oprava. U SaaS prostředí má celé vývojové prostředí na internetu a může tak pokračovat na jakémkoliv jiném stroji. Nemá tak žádné prostoje.\\ 
\hline
Celkem                        & 106000                     & 57750                   & \\
\hline
\end{tabular}
\caption{Porovnání lokálního a SaaS vývojového prostředí za jeden rok}
\label{fig:compareLocalAndSaaSDevelopment}
\end{table}

Specificky využijeme SaaS službu od Jetbrains, která nabízí Space, jež v sobě komponuje všechny vývojové služby potřebné k úspěšnému dokončení projektu, vedení týmu, projektový management, komunikace, vývoj projektů, dodávku projektů a mnoho dalšího.

Další výhodou použití SaaS je to, že není potřeba kupovat výkonný hardware, ale postačí nám tak základní počítače jak pro vývojáře, tak pro HR, PR a ostatní. Určitě bude zapotřebí koupit i jiné vybavení od monitoru po židle, nebo alespoň nabídnout tuto možnost zaměstnancům na hlavní pracovní poměr, kteří budou pracovat z domova.
