E-Dobavki - миний оюутнуудын бичсэн Java болон Spring Boot хэл дээр хүнсний нэмэлт хайх вэб үйлчилгээ

Танилцуулга

Сүүлийн хоёр жилийн турш би Киевийн мэдээллийн технологийн нэгэн сургуульд програмчлалын хичээл зааж байна. Би үүнийг зүгээр л зугаацуулахын тулд хийж эхэлсэн. Би нэг удаа програмчлалын блог бичиж, дараа нь орхисон. Гэхдээ сонирхсон хүмүүст хэрэгтэй зүйл ярих хүсэл нь арилаагүй байна.

Миний үндсэн хэл бол Java. Би түүн дээр гар утсанд зориулсан тоглоом, радио холбооны программ хангамж, янз бүрийн вэб үйлчилгээ бичсэн. Мөн би Java хэл заадаг.

Энд би сүүлчийн бүлгийнхээ бэлтгэлийн түүхийг ярихыг хүсч байна. Тэд хэрхэн сургалтанд хамрагдахаас эхлээд ажиллаж байгаа вэб үйлчилгээ бичих хүртэл явсан. Хоол тэжээлийн нэмэлтүүдийг хайж олоход хэрэгтэй вэб үйлчилгээ. Үнэгүй, ямар ч зар сурталчилгаа, бүртгэл, SMS.

Үйлчилгээ нь өөрөө энд байна - E-Dobavki.com.

E-Dobavki - миний оюутнуудын бичсэн Java болон Spring Boot хэл дээр хүнсний нэмэлт хайх вэб үйлчилгээ

Энэхүү төсөл нь боловсролын шинж чанартай бөгөөд ямар ч сурталчилгаа агуулаагүй болно. Миний ойлгож байгаагаар энэ нийтлэлийг, та ийм төслүүдийн холбоосыг өгч болно.

Төслийг тайлбарлахын өмнө би бүлгийн сургалтын үйл явцын талаар бага зэрэг ярих болно, үүнгүйгээр зураг бүрэн бус байх болно.

9 сарын сургалт

Миний багшилдаг сургуульд Java хэлний хичээл 2 хэсэгт хуваагддаг. Нийтдээ курс нь бүх завсарлагатай (Шинэ жилийн амралт, завсрын төсөл бичих цаг) ойролцоогоор 9 сар үргэлжилнэ.

Эхний хэсэг нь оюутнуудад хэлний үндсэн ойлголтуудыг танилцуулна. Хувьсагч, аргууд, OOP-ийн үндэс болон бусад зүйлс.

Хичээлийн хоёр дахь хэсэг нь оюутан Java хэл дээр хэрхэн бичихээ аль хэдийн бага багаар ойлгодог бөгөөд түүнд "насанд хүрсэн" технологийн стек өгөх боломжтой. Энэ бүхэн SQL, дараа нь JDBC, Hibernate-ээс эхэлдэг. Дараа нь HTTP, сервлет. Дараагийнх нь Spring, git болон maven-ийн тухай бага зэрэг. Мөн оюутнууд эцсийн төсөл бичдэг.

Бүх сургалт нь модулиудад хуваагдана. Би долоо хоногт хоёр удаа хичээл хийдэг байсан. Нэг хичээлийн үргэлжлэх хугацаа хоёр цаг байна.

Миний сурах хандлага

Би 5 бүлэг гаргасан. 2 жил их юм шиг санагддаг ч би дандаа XNUMX бүлгийг зэрэгцүүлэн удирдаж байсан.

Би янз бүрийн аргыг туршиж үзсэн.

Эхний сонголт бол онолтой танилцуулгад нэг хосыг хуваарилах явдал юм. Хоёр дахь хос нь цэвэр дасгал юм. Энэ арга нь ямар нэгэн байдлаар үр дүнтэй байсан ч миний бодлоор тийм ч үр дүнтэй биш байсан.

Миний одоо ажиллаж байгаа хоёр дахь хувилбар бол онолд бүхэл бүтэн хосыг зориулах явдал биш юм. Харин би онолын богино хэсгүүдийг 5-10 минутын турш хольж, практик жишээн дээр нэн даруй бататгадаг. Энэ арга нь илүү сайн ажилладаг.

Хэрэв хангалттай цаг байвал би оюутнуудыг гэртээ дуудаж, зөөврийн компьютер дээрээ суулгаж, тэд өөрсдөө практик жишээ хийдэг. Энэ нь маш сайн ажилладаг, гэхдээ харамсалтай нь маш их цаг зарцуулдаг.

Хүн бүр эцсээ хүртэл чаддаггүй

Бүхэл бүтэн бүлэг курсын төгсгөлд хүрээгүй нь миний хувьд илчлэлт байлаа.

Миний ажигласнаар оюутнуудын тал хувь нь л эцсийн төслийг бичдэг. Тэдний ихэнх нь курсын эхний хэсэгт хасагддаг. Хоёр дахь хэсэгт хүрсэн хүмүүс ихэвчлэн унадаггүй.

Тэд янз бүрийн шалтгаанаар орхидог.

Эхнийх нь нарийн төвөгтэй байдал юм. Тэд юу ч хэлсэн Java хэл бол хамгийн энгийн хэл биш юм. Хамгийн энгийн программ бичихийн тулд анги, арга гэсэн ойлголтыг ойлгох хэрэгтэй. Тэгээд яагаад бичих хэрэгтэйг ойлгохын тулд нийтийн статик хүчингүй үндсэн(String[] arg) Ойлгох өөр хэдэн ойлголт байна.

Үүнийг Турбо Паскальтай харьцуулж үзээрэй, үүнд намайг оролцуулаад олон хүн эхлүүлсэн:

begin
    writeln("Первая программа");
end.

Миний мэдэхээр сургууль нэмэлт шалгалт оруулж байж энэ асуудлыг шийднэ. Одоо хүн бүр Java сурах боломжгүй. Энэ нь концепцийн шатандаа байгаа ч алхам нь зөв гэдэг нь тодорхой.

Хоёрдахь шалтгаан нь доорх зурган дээрхтэй адил юм.

E-Dobavki - миний оюутнуудын бичсэн Java болон Spring Boot хэл дээр хүнсний нэмэлт хайх вэб үйлчилгээ

Програмчлал гэдэг нь маш их текст бичиж, үүнийхээ төлөө их мөнгө олох явдал гэж хүмүүс ихэвчлэн боддог. Хуулбар зохиогч шиг, зөвхөн илүү их мөнгө.

Бодит байдал арай өөр байна. Маш олон ердийн код, үл мэдэгдэх алдаа, байнгын суралцах үйл явц. Энэ нь сонирхолтой, гэхдээ хүн бүрт биш.

Эдгээр нь статистик тоо юм. Энэ нь эхлээд намайг бухимдуулж, буруу зүйл хийж байгаа юм болов уу гэж бодсон. Ихэнх курсуудын хувьд статистик нь ойролцоогоор ижил байгааг одоо би ойлгож байна. Одоо би энэ талаар санаа зовохгүй байна, гэхдээ үүнийг сонирхож буй хүмүүст зааж өгнө үү.

Үйлчилгээний санаа

Оюутнууд хичээлийг бүхэлд нь дуусгасны дараа эцсийн төслийг бичих цаг болжээ. Янз бүрийн санаанууд байсан. Тэд ToDo хуудас, төслийн менежментийн төслүүд болон өөр зүйлийг санал болгосон.

Би энгийн хэрнээ хэрэгтэй зүйл хийхийг хүссэн. Миний шалгуур энгийн байсан - найз нөхөд бид хоёр үүнийг ашиглаж чадах эсэх. Хүнсний нэмэлтийг хайх вэб үйлчилгээ нь эдгээр шаардлагыг хангасан.

Санаа нь энгийн. Дэлгүүрт бүтээгдэхүүн худалдаж авахдаа найрлагад нь ямар нэгэн төрлийн E-нэмэлт байдаг. Кодоос энэ нь ямар аюултай, үгүй ​​нь тодорхойгүй (мөн олон оронд хориглосон аюултай нэмэлтүүд байдаг).

Та вэбсайтыг нээж, нэмэлтийн нэрийг (тоо, өөр нэрсийн нэг) оруулаад нэмэлтийн хураангуйг авна уу:

E-Dobavki - миний оюутнуудын бичсэн Java болон Spring Boot хэл дээр хүнсний нэмэлт хайх вэб үйлчилгээ

Үүнтэй төстэй төслүүд байдаг. Мэдээллийг үргэлж зөв харуулахгүй ч гэсэн та Google-д нэмэлтийг зүгээр л бичиж болно.

Гэхдээ төсөл нь боловсролын чанартай тул дээрх бэрхшээлүүд биднийг зогсоосонгүй :)

Реализация

Бүгд Java хэлээр бичдэг, Github дээрх төслийн эх код.

Намайг оруулаад 7 хүн байсан. Хүн бүр татах хүсэлт гаргасан бөгөөд би эсвэл бүлгийн өөр хүн энэ татах хүсэлтийг хүлээн авсан.

Төслийг хэрэгжүүлэхэд санаагаа илэрхийлэхээс эхлээд одоо харж байгаа байдал хүртэл нэг сар орчим үргэлжилсэн.

Шинжилгээний нэмэлтүүд

Оюутны нэгнийх нь хийсэн хамгийн эхний зүйл бол өгөгдлийн сангийн эргэн тойронд суурь бүтэц бий болгохоос гадна (байгууллага, хадгалах газар гэх мэт) одоо байгаа мэдээллийн сайтаас нэмэлтүүдийг задлан шинжлэх явдал байв.

Энэ нь үлдсэн оноог шалгахад шаардлагатай байсан. Өгөгдлийн санг дүүргэхийн тулд нэмэлт код шаардлагагүй. Хэд хэдэн нэмэлтийг хурдан задлан шинжилсний дараа бид UI, ангилах, шүүж шалгах боломжтой.

Spring Boot нь олон профайл үүсгэх боломжийг олгодог. Профайл нь тохиргоотой файл юм.

Хөгжүүлэгчийн орчинд бид локал H2 DBMS болон анхдагч HTTP порт (8080) бүхий профайлыг ашигласан. Ийнхүү программыг эхлүүлэх бүрт мэдээллийн санг цэвэрлэж байсан. Энэ тохиолдолд задлан шинжлэгч нь биднийг аварсан зүйл юм.

Хайлт, шүүлт

Чухал цэг бол хайх, шүүх юм. Дэлгүүрт байгаа хүн нэмэлт бүтээгдэхүүний код эсвэл аль нэг нэр дээр хурдан дарж үр дүнг нь авах ёстой.

Тиймээс Additive нэгж нь хэд хэдэн талбартай. Энэ бол нэмэлт код, өөр нэр, тайлбар юм. Хайлтыг Like ашиглан бүх талбарт нэгэн зэрэг хийдэг. Хэрэв та [123] эсвэл [амарант] гэж оруулбал ижил үр дүн гарах болно.

Бид энэ бүгдийг Үзүүлэлтүүд дээр үндэслэн хийсэн. Энэ бол хайлтын үндсэн нөхцөлүүдийг (жишээ нь зарим талбар гэх мэт) тайлбарлах, дараа нь эдгээр нөхцлүүдийг (OR эсвэл AND) нэгтгэх боломжийг олгодог Spring-ийн хэсэг юм.

Хэдэн арван техникийн үзүүлэлтүүдийг бичсэний дараа та "тайлбарт [улаан] гэсэн үг орсон бүх аюултай будагч нэмэлтүүд" гэх мэт нарийн төвөгтэй асуултуудыг асууж болно.

Spring мэдээллийн сантай ажиллахын хувьд би үүнийг маш тохиромжтой гэж үздэг. Энэ нь ялангуяа нарийн төвөгтэй асуултуудтай ажиллахад үнэн юм. Энэ нь өөрийн гэсэн нэмэлт зардалтай бөгөөд гараар бичиж, оновчтой болгосон SQL асуулга илүү хурдан ажиллах болно гэдгийг би ойлгож байна.

Гэхдээ би бүх зүйлийг урьдчилан оновчтой болгох шаардлагагүй гэсэн үзэл бодлыг баримталдаг. Эхний хувилбар нь эхлэх, ажиллах, бие даасан хэсгүүдийг солихыг зөвшөөрөх ёстой. Хэрэв ачаалал байгаа бол эдгээр бие даасан хэсгүүдийг дахин бичих шаардлагатай.

Аюулгүй байдал

Энэ бол энгийн. ADMIN үүрэг бүхий хэрэглэгчид байдаг - тэд нэмэлтийг засах, устгах, шинээр нэмэх боломжтой.

Мөн бусад хэрэглэгчид (бүртгүүлсэн эсвэл бүртгүүлээгүй) байдаг. Тэд зөвхөн нэмэлтүүдийн жагсаалтыг үзэж, өөрт хэрэгтэй зүйлээ хайж олох боломжтой.

Spring Security-ийг эрхийг тусгаарлахад ашигласан. Хэрэглэгчийн мэдээллийг мэдээллийн санд хадгалдаг.

Хэрэглэгчид бүртгүүлэх боломжтой. Одоо юу ч өгөхгүй. Оюутнууд үйлчилгээгээ үргэлжлүүлэн хөгжүүлж, зарим нэг хувийн функцийг нэвтрүүлбэл бүртгүүлэх нь ашигтай байх болно.

Хариуцлага ба ачаалах чадвар

Дараагийн цэг бол дасан зохицох чадвар юм. Манай үйлчилгээний хувьд (наад зах нь бидний харсан байдлаар) хэрэглэгчдийн дийлэнх нь гар утастай байх болно. Мөн та гар утаснаасаа нэмэлтийг хурдан үзэх хэрэгтэй.

CSS-ээс зовж шаналахгүйн тулд бид Bootstrap-ийг авсан. Хямдхан, хөгжилтэй, сайхан харагдаж байна.

Би интерфэйсийг хамгийн тохиромжтой гэж нэрлэж чадахгүй. Үндсэн хуудас нь бүр ч бага, нэмэлтийн дэлгэрэнгүй тайлбарын хуудас нь нарийхан, гар утсан дээр үүнийг илүү өргөн болгох шаардлагатай.

Аль болох ажилд саад учруулахыг хичээсэн гэж хэлэхээс өөр аргагүй. Энэ нь оюутны төсөл хэвээр байна. Мэдээжийн хэрэг, залуус ийм мөчүүдийг дараа нь засах боломжтой болно.

SEO оновчтой болгох нэг минут

Би вэбсайтууд болон SEO-тэй холбоотой бүх зүйлд хоёр жил гаруйн хугацаанд нягт холбоотой байсан тул дор хаяж үндсэн SEO оновчтой болгохгүйгээр төслийг гаргаж чадахгүй байсан.

Үнэн хэрэгтээ, би нэмэлт болгонд гарчиг болон тайлбарын загвар үүсгэсэн. URL нь бараг CNC юм, гэхдээ үүнийг богиносгож болно.

Би бас ирцийн тоолуур нэмсэн. Хайлтын системээс гарч буй анхааруулгыг хянахын тулд сайтыг Yandex Webmaster болон Google Search Console-д нэмсэн.

Энэ нь хангалттай биш юм. Та мөн бүрэн индексжүүлэхийн тулд robots.txt болон sitemap.xml нэмэх хэрэгтэй. Гэхдээ дахин хэлэхэд энэ бол оюутны төсөл юм. Би тэдэнд юу хийх ёстойг хэлье, хэрэв тэд хүсвэл тэд үүнийг хийх болно.

Та SSL сертификат хавсаргах хэрэгтэй. Үнэгүй Let's Encrypt нь бас ажиллах болно. Би үүнийг Spring Boot-д зориулж хийсэн. Үүнийг хийхэд хэцүү биш бөгөөд PS-ийн итгэл нэмэгддэг.

Төслийг цаашид юу хийх вэ?

Тэгвэл үнэн хэрэгтээ сонголт залууст л шалтгаална. Төслийн анхны санаа нь нэмэлтүүдийн холбоос бүхий бүтээгдэхүүний мэдээллийн санг багтаасан болно.

"Snickers"-ийг оруулаад түүнд ямар нэмэлт тэжээл агуулагдаж байгааг хараарай.

Төсөл эхлэхэд ч гэсэн бид ямар ч бүтээгдэхүүн байхгүй гэдгийг мэдэж байсан :) Тиймээс бид зөвхөн нэмэлт бодисоор эхэлсэн.

Одоо та бүтээгдэхүүн нэмж, нэмэлт бүтээгдэхүүнээ танилцуулж болно. боов. Хэрэв энэ нь өргөн хүрээний мэдээллийн сан бол хэрэглэгчид байх болно.

Байршуулалт

Төслийг VPS, Aruba Cloud дээр байрлуулсан. Энэ бол бидний олж болох хамгийн хямд VPS юм. Би энэ үйлчилгээ үзүүлэгчийг төслүүддээ зориулж жил гаруйн турш ашиглаж байгаа бөгөөд үүнд сэтгэл хангалуун байна.

VPS шинж чанарууд: 1 GB RAM, 1 CPU (давтамжийн талаар би мэдэхгүй), 20 GB SSD. Манай төслийн хувьд энэ нь хангалттай.

Төсөл нь ердийн mvn clean багцыг ашиглан бүтээгдсэн. Үр дүн нь өөхний сав юм - бүх хамаарал бүхий гүйцэтгэх боломжтой файл юм.

Энэ бүгдийг бага зэрэг автоматжуулахын тулд би хэд хэдэн bash скрипт бичсэн.

Эхний скрипт нь хуучин jar файлыг устгаж, шинээр үүсгэнэ.

Хоёрдахь скрипт нь угсарсан савыг ажиллуулж, шаардлагатай профайлын нэрийг дамжуулна. Энэ профайл өгөгдлийн сангийн холболтын мэдээллийг агуулна.

DB - ижил VPS дээр MySQL.

Төслийг дахин эхлүүлэхэд дараахь зүйлс орно.

  • SSH-ээр дамжуулан VPS руу нэвтрэх
  • хамгийн сүүлийн үеийн git өөрчлөлтүүдийг татаж авах
  • local-jar.sh-г ажиллуул
  • ажиллаж байгаа програмыг устгах
  • launch-production.sh ажиллуулна

Уг процедур нь гурван минут болно. Ийм жижиг төслийн хувьд энэ нь надад ухаалаг сонголт мэт санагдаж байна.

Хэцүү байдал

Төслийг бий болгоход тулгарч буй гол бэрхшээл нь зохион байгуулалтын шинж чанартай байв.

Хэрхэн програмчлахаа мэддэг ч тийм ч сайн биш хэсэг бүлэг хүмүүс байдаг. Тэд ямар нэг зүйлийг мэддэг ч бодитоор хэрэгжүүлж чадахгүй хэвээр байна. Одоо тэд төслөө нэг сарын дотор дуусгах хэрэгтэй.

Би энэ бүлэгт болзолт багийн ахлагчийг тодорхойлсон. Тэрээр Google Doc-ыг даалгаврын жагсаалттай хөтөлж, даалгавруудыг тарааж, хүлээн авахыг нь хянадаг байв. Тэрээр мөн татах хүсэлтийг хүлээн авсан.

Мөн би оюутнуудаас орой бүр төсөл дээр хийсэн ажлынхаа талаар товч тайлан бичихийг хүссэн. Хэрэв та юу ч хийгээгүй бол зүгээр л "юу ч хийгээгүй" гэж бичээрэй. Энэ бол гайхалтай дасгал бөгөөд таныг бага зэрэг хурцатгана. Харамсалтай нь хүн бүр энэ дүрмийг дагаж мөрдөөгүй.

Энэ бүх хөдөлгөөний зорилго нь энгийн байсан. Богинохон ч гэсэн багаа бүрдүүлж, хамтран ажиллах.

Би залууст ажил нь чухал гэдгийг мэдрүүлээсэй гэж хүссэн. Тэд вакуумд бөмбөрцөг код бичдэггүй гэдгийг ойлгох хэрэгтэй. Мөн тэдний хамтдаа хийж байгаа зүйл бол хүмүүс дараа нь ашиглах төсөл юм.

Эхний эсвэл хоёр долоо хоног хуримтлагдсан. Аж ахуйн нэгж, жижиг амлалтууд удаашралтай хийгдсэн. Би тэднийг бага багаар хөдөлгөж, ажил нь илүү хөгжилтэй болсон. Чат дахь харилцаа холбоо илүү идэвхтэй болж, оюутнууд нэмэлт санал болгов.

Зорилгодоо хүрсэн гэдэгт итгэж байна. Төсөл дууссан, залуус багаар ажиллах бага зэрэг туршлага хуримтлуулсан. Найз нөхөддөө үзүүлж, цаашид хөгжүүлж болохуйц харагдахуйц, бодит үр дүн бий.

үр дүн нь

Сурах нь сонирхолтой.

Хичээл болгоны дараа би сэтгэл хөдөлсөн буцдаг байсан. Би хос бүрийг өвөрмөц болгож, аль болох их мэдлэгийг дамжуулахыг хичээдэг.

Миний багшилдаг баг финалд шалгарахад сайхан байдаг. Залуус "Би ажилд орсон, бүх зүйл сайхан байна, баярлалаа" гэж бичих нь үнэхээр сайхан байдаг. Хэдийгээр энэ нь бага насны хүүхэд байсан ч, эхэндээ хамгийн том мөнгө биш байсан ч гэсэн. Гэхдээ хамгийн гол нь тэд хүсэл эрмэлзэлдээ нэг алхам хийж, амжилтанд хүрсэн.

Хэдийгээр нийтлэл нэлээд том хэмжээтэй байсан ч бүх зүйлийг багтаах боломжгүй байсан. Тиймээс асуултаа коммент хэсэгт бичээрэй.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх