1. diel - Úvod do Spring Boot frameworku v Jave
Vitajte pri prvej lekcii kurzu o Java frameworku Spring, ktorý je súčasne najpoužívanejší framework na tvorbu webových aplikácií v Jave. Dnes si Spring predstavíme a porovnáme ho s alternatívnou knižnicou JEE. Ďalej si vysvetlíme, prečo je Spring tak populárny a rozdiel medzi jeho dvoma distribúciami. Povieme si tiež, aké technológie budeme v kurze používať.
Minimálne požiadavky
Kurz predpokladá znalosti:
- Javy SE (štandardná edícia), najmä:
- HTML a CSS.
Pokiaľ niektoré zo znalostí nemáte, absolvujte prvý daný kurz.
Vývoj webových aplikácií v Jave
Vývojári, ktorí dnes chcú vytvárať webové aplikácie v Jave, si primárne vyberajú z dvoch knižníc:
- Jakarta EE (predtým Java EE)
- Spring
Poďme si ich predstaviť a vysvetliť, prečo si vybrať práve Spring a prečo zvolíme distribúciu Spring Boot.
Jakarta EE
Jakarta Enterprise Edition (skrátene JEE) by sa dala predstaviť ako „podniková edícia Javy“. Predtým sa volala Java Enterprise Edition a bola spravovaná priamo spoločnosťou Oracle, dnes už patrí pod Eclipse Foundation. Ide o rozšírenie do klasickej Java Standard Edition. Dôležité je si uvedomiť, že sa jedná iba sadu rozhrania (bez implementácie). Implementáciu týchto rozhraní typicky dodáva "komunita" (ostatní vývojári / spoločnosti) formou tzv. aplikačných serverov.
Projekty napísané v prvých verziách tohto frameworku typicky obsahovali množstvo opakujúceho sa kódu (tzv. boilerplate kód) a zbytočných konfiguračných súborov. Java komunite sa tento prístup natoľko nepáčil, že vytvorila Spring Framework.
Dnes je už rozdiel medzi JEE a Spring Frameworkom minimálny. Obe technológie sa líšia iba v rozhraniach (ako autor framework používa / prevoláva metódy), inak vedia de facto rovnaké veci. Programátor, ktorý pochopí základy Spring Frameworku, do istej miery pochopí aj základy JEE. Aj napriek vylepšeniu JEE ale zostal Spring framework o niečo populárnejší.
Spring Framework
Prvotným cieľom Spring Frameworku bolo uľahčiť vývoj webových aplikácií v Jave. Medzi výhody Springu nad prvotnými verziami JEE okrem iného patrilo:
- Ľahšia práca s návrhovým vzorom Dependency Injection (viď ďalej v kurze)
- Ľahšie otestovanie aplikácie pomocou unit testov
Je dôležité si uvedomiť, že niektoré "komponenty" Spring Frameworku pracujú s rozhraním z JEE (napr. s JPA). S týmito komponentmi sa stretneme v priebehu ďalších lekcií.
Ako JEE, tak Spring Framework vyžadujú na spustenie tzv. servlet kontajner. Ten môže byť pre začiatočníka zdrvujúci a náročný nastaviť (viď inštalácia a nastavenie aplikačného servera v JEE, ktoré je rozpísané na jednu celú lekciu). Tento nedostatok rieši Spring Boot.
Spring Boot
A dostávame sa ku knižnici, ktorú budeme v kurze používať. Spring Boot je nadstavba Spring Frameworku, ktorá rieši vyššie spomínaný nedostatok. Implementuje teda všetky funkcionality Spring Frameworku a navyše má v sebe zabudovaný servlet kontajner (Tomcat), ktorý by si vývojári inak museli nastavovať ručne. Tento kontajner pri spustení projektu automaticky vytvorí a nakonfiguruje server, ku ktorému sa budú môcť pripájať používatelia cez HTTP protokol (z webového prehliadača).
Rozdiel je teda v tom, že v Spring Frameworku by si autor musel nastavovať server sám, zatiaľ čo Spring Boot ho nastaví za vývojárov. V kurze budeme používať práve Spring Boot. Aspoň ušetríme pár vytrhaných vlasov, nejaký ten čas, nervy a tiež riadky kódu
Väčšinou sa využíva Spring Boot aj vo firmách, pretože Spring Framework ako taký je veľmi zložitý aj na základné spustenie projektu. Okrem väčšej veľkosti aplikácie či webu nás nečaká žiadna nevýhoda pri zvolení Spring Boot namiesto Spring Frameworku, takže si myslím, že voľba je jasná
Vývojár, ktorý sa naučí Spring Boot, a nastúpi do firmy kde sa používa Spring Framework, ho bude schopný bez problémov ovládať.
Termíny späté s vývojom webových aplikácií
Na úvod je dôležité povedať, že webové aplikácie fungujú výrazne odlišne od tých lokálnych, ktoré sme v predchádzajúcich kurzoch vytvárali. Poďme si predstaviť ich najdôležitejšie princípy.
Frontend a backend
Štruktúra väčšiny webov sa delí na:
- Frontend - (Predná) časť aplikácie, ktorá beží u užívateľa v prehliadači. Predstavuje užívateľské rozhranie, napr. registračný formulár. Ide iba o škrupinu, ku ktorej majú prístup používatelia a ktorá by spravidla nemala mať hlbšiu logiku. Frontend komunikuje priamo s backendom.
- Backend - (Zadná) časť aplikácie, ktorá sa už nachádza na vzdialenom serveri. Obstaráva funkčnosť celého programu. Užívateľa ju nevidia a nemajú k nej prístup. Backend vykonáva logické operácie, pracuje so súbormi a databázou.
Toto členenie (na frontend a backend) nám taktiež pomáha lepšie deliť prácu medzi vývojárov. Tí sa typicky špecializujú iba na jednu z týchto častí. Backend autor nebude vedieť urobiť pekné animácie (pretože na to sa špecializuje frontend autor) a naopak frontend autor zase nebude vedieť efektívne čítať dáta z databázy (pretože na to sa zas špecializuje backend autor).
Existuje ešte tretia skupina vývojárov, ktorí sa špecializujú ako na frontend, tak aj na backend. Hovoríme im tzv. fullstack vývojári.
V tomto základnom kurze budeme vyvíjať ako backend, tak aj frontend, pretože pôjde o jednoduché projekty. Reálne sa v Springu typicky vytvára iba serverová časť (backend). Na ten sa potom pripája frontend cez nejaký javascriptový framework, ako je napr. React alebo Angular. To všetko si potom ukážeme v nadväzujúcom kurze
Príklad interakcie medzi backendom a frontendom
Uveďme si jednoduchý príklad. Predstavme si, že máme webovú aplikáciu, na ktorej sa používatelia môžu registrovať a prihlasovať. Scenár, ktorý opisuje registráciu, by mohol vyzerať nejako takto:
- Aplikácia v prehliadači vykreslí stránku s registračným formulárom
- Užívateľ formulár vyplní
- Užívateľ klikne na tlačidlo "Registrovať sa" (odošle formulár)
- Aplikácia na serveri spracuje odoslané dáta z formulára
- Aplikácia uloží užívateľské údaje do databázy servera (aby sa mohol nový užívateľ neskôr prihlásiť).
Prvé tri kroky (vykreslenie a interakcia s užívateľom) vykonáva frontend. Štvrtý a piaty (spracovanie a uloženie dát) krok vykoná už backend.
MVC
Spring Boot je postavený na populárnej MVC architektúre. To znamená, že aplikáciu rozdeľuje do 3 logických vrstiev:
- na užívateľské rozhranie,
- logiku a na
- komunikačnú vrstvu, ktorá tieto 2 vrstvy prepája.
Vrstva pre používateľské rozhranie potom môže generovať stránky pre front-end, ktorý sme si predstavili vyššie. Aplikácia je tým prehľadná a jednoducho rozšíriteľná (napr. neriešime vzhľad stránky v tom istom súbore, kde riešime prácu s databázou). Túto architektúru si predstavíme ďalej v kurze v samostatnej lekcii, pretože sa všetko točí práve okolo nej.
Dependency Injection
Možno tento návrhový vzor už poznáte alebo ste sa v praxi už stretli s problémami s odovzdávaním závislostí. Výhodou Springu je, že má zabudovanú Dependency injection. To je spôsob, ako si objekt povie o ďalšie objekty, ktoré na svoju činnosť potrebuje a je na nich teda závislý (anglicky "depends", preto "dependency").
Keby sme nepoužívali Dependency Injection, musel by si každý objekt sám hľadať a spravovať ďalšie objekty z aplikácie alebo by sme mu ich museli všetky ručne odovzdávať. Vo veľkých aplikáciách by to bolo prakticky neuskutočniteľné. Opäť sa nenechajte zo začiatku zmiasť, akonáhle sa dostaneme do reálneho kódu, bude všetko jasné, pretože sa o nič zložité nejedná.
Čo budeme používať?
Pracovať budeme s nasledujúcimi technológiami:
- Maven – Jedná sa o balíčkovací nástroj, ktorý uľahčuje prácu s knižnicami tretích strán (knižnice vyvinuté komunitou, nie spoločnosťou Oracle). Budeme tým primárne riešiť vloženie Springu do nášho projektu.
- MySQL – Toto je databáza, s ktorou bude Spring komunikovať. Môžeme použiť samozrejme aj PostgreSQL, len bude potrebné pozmeniť nastavenia. K tomu si všetko povieme.
- Swagger – Jedná sa o automaticky vygenerovanú dokumentáciu k REST API, ktorú budeme vytvárať až v ďalších kurzoch. Knižnica nám vygeneruje zoznam tzv. "endpointov". Swagger nie je nutné sťahovať, dáme ho do Mavenu.
- IDE – Je jedno, v akom IDE budete pracovať. Pokiaľ ma ale chcete nasledovať úplne presne, použite IntelliJ Idea. Jeho Community Edition je dostupná zadarmo na stránkach JetBrains. Odporúčam tvoriť aplikáciu práve v nej.
V budúcej lekcii, Úvod do webových aplikácií v Java Spring, si urobíme úvod do webových aplikácií, aby sme pochopili, prečo sú žiadanejšie, než aplikácie desktopové.