সরাসরি প্রধান সামগ্রীতে চলে যান

স্প্রিং বুট ব্যবহার করে কুইজ অ্যাপ তৈরি (পার্ট ১)

Introduction

এই ভিডিওতে আমরা শিখব কীভাবে Spring Boot ব্যবহার করে একটি Quiz Application তৈরি করা যায়। কন্টেন্ট ক্রিয়েটর এখানে সরাসরি মাইক্রোসার্ভিস (Microservices) শুরু না করে প্রথমে একটি মনোলিথিক (Monolithic) অ্যাপ্লিকেশন তৈরি করার পরিকল্পনা করেছেন। সহজ কথায় বললে, আগে পুরো অ্যাপটা একসাথেই বানানো হবে, তারপর সেটাকে ছোট ছোট ভাগে (Microservices) ভাগ করা শিখবো। এই পর্বে মূলত প্রজেক্টের সেটআপ, ডাটাবেস কানেকশন এবং একটি বেসিক কন্ট্রোলার তৈরি করা দেখানো হয়েছে।


কুইজ অ্যাপ্লিকেশনের ধারণা ও প্রজেক্ট সেটআপ

এই অংশটি ভিডিওর শুরুতে [00:00] থেকে [02:16] পর্যন্ত আলোচনা করা হয়েছে।

রেফারেন্স: ভিডিও লিংক

বিস্তারিত: কুইজ অ্যাপটি এমন হবে যেখানে ইউজার কিছু প্রশ্ন (MCQ) পাবে এবং সেগুলো উত্তর দেওয়ার পর তার স্কোর দেখতে পারবে। এই অ্যাপের জন্য ডাটাবেস হিসেবে PostgreSQL ব্যবহার করা হয়েছে।

  • Monolithic Application (মনোলিথিক অ্যাপ্লিকেশন): যখন একটি সফটওয়্যারের সব কাজ (যেমন: ইউজার ম্যানেজমেন্ট, প্রশ্ন ম্যানেজমেন্ট, কুইজ লজিক) একটাই কোডবেসের মধ্যে থাকে, তখন তাকে মনোলিথিক বলে। এটি শুরুতে শেখার জন্য সহজ।

  • Microservices (মাইক্রোসার্ভিস): যখন বড় একটি অ্যাপকে ছোট ছোট স্বাধীন ভাগে ভাগ করা হয়। যেমন: প্রশ্নের জন্য আলাদা সার্ভিস, কুইজের জন্য আলাদা সার্ভিস।


স্প্রিং ইনিশিয়ালাইজার (Spring Initializr) দিয়ে প্রজেক্ট তৈরি

ভিডিওর এই অংশে [02:17] থেকে [04:47] পর্যন্ত প্রজেক্ট তৈরির ধাপগুলো দেখানো হয়েছে।

রেফারেন্স: ভিডিও লিংক

প্রজেক্ট তৈরির জন্য start.spring.io ওয়েবসাইটটি ব্যবহার করা হয়েছে। সেখানে নিচের অপশনগুলো সিলেক্ট করা হয়েছে:

  1. Project: Maven

  2. Language: Java (Version 17)

  3. Spring Boot Version: 3.1

  4. Dependencies: * Spring Web: ওয়েব অ্যাপ্লিকেশন বা REST API বানানোর জন্য।

    • PostgreSQL Driver: ডাটাবেসের সাথে কানেক্ট করার জন্য।

    • Spring Data JPA: ডাটাবেসের কাজগুলো কোডের মাধ্যমে সহজে করার জন্য।

    • Lombok: কোড ছোট রাখার জন্য (যেমন: Getter, Setter অটোমেটিক জেনারেট করা)।


ডাটাবেস এবং টেবিল কনফিগারেশন

ভিডিওর [04:48] থেকে [07:08] অংশে ডাটাবেস সেটআপ দেখানো হয়েছে।

রেফারেন্স: ভিডিও লিংক

এখানে PGAdmin ব্যবহার করে PostgreSQL ডাটাবেসে question নামে একটি টেবিল আগে থেকেই তৈরি করা ছিল। টেবিলটিতে নিচের কলামগুলো আছে:

  • id: প্রতিটি প্রশ্নের ইউনিক নাম্বার (Primary Key)।

  • category: প্রশ্নটি কোন বিষয়ের (যেমন: Java, Python)।

  • difficulty_level: প্রশ্নটি সহজ না কঠিন।

  • question_title: মূল প্রশ্ন।

  • option1, option2, option3, option4: চারটি উত্তর।

  • right_answer: সঠিক উত্তরটি কী।


কোডিং এবং প্রথম API তৈরি

ভিডিওর শেষ অংশে [07:09] থেকে শেষ পর্যন্ত কোড লিখে একটি টেস্ট API বানানো হয়েছে।

রেফারেন্স: ভিডিও লিংক

প্রজেক্টটি রান করার জন্য application.properties ফাইলে ডাটাবেস কনফিগারেশন করতে হয়েছে।

কোড উদাহরণ (Application Properties):

Properties

spring.datasource.url=jdbc:postgresql://localhost:5432/questionDB
spring.datasource.username=postgres
spring.datasource.password=0000
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect 

ব্যাখ্যা: এই কোডটি আপনার স্প্রিং বুট অ্যাপকে বলছে যে ডাটাবেস কোথায় আছে, ইউজারনেম আর পাসওয়ার্ড কী এবং কোন ধরণের ডাটাবেস (PostgreSQL) ব্যবহার করা হচ্ছে।

কোড উদাহরণ (Question Controller):

Java

@RestController
@RequestMapping("question")
public class QuestionController {

    @GetMapping("allQuestions")
    public String getAllQuestions() {
        return "Hi, these are your questions";
    }
} 

ব্যাখ্যা: * @RestController: এটি দিয়ে বোঝানো হয় এই ক্লাসটি ব্রাউজার বা অ্যাপের রিকোয়েস্ট হ্যান্ডেল করবে।

  • @RequestMapping("question"): এর মানে হলো ব্রাউজারে localhost:8080/question লিখে সার্চ দিতে হবে।

  • @GetMapping("allQuestions"): এর মাধ্যমে আমরা একটি নির্দিষ্ট পথ (path) তৈরি করলাম। অর্থাৎ localhost:8080/question/allQuestions লিংকে গেলে "Hi, these are your questions" লেখাটি দেখা যাবে।


কঠিন শব্দ এবং সেগুলোর সহজ অর্থ

  • Dependencies (ডিপেন্ডেন্সি): আপনার প্রজেক্ট চালানোর জন্য বাইরে থেকে যে লাইব্রেরি বা সাহায্যকারী কোডগুলো দরকার হয়।

  • Controller (কন্ট্রোলার): এটি অনেকটা ট্রাফিক পুলিশের মতো। ব্রাউজার থেকে কোনো রিকোয়েস্ট আসলে সেটা কোথায় যাবে এবং কী উত্তর দিবে তা কন্ট্রোলার ঠিক করে।

  • Dialect (ডায়ালেক্ট): একেক ডাটাবেস একেক ভাষায় কথা বলে। হাইবারনেট (Hibernate) যাতে PostgreSQL-এর ভাষা বুঝতে পারে, সেজন্য ডায়ালেক্ট ব্যবহার করা হয়।


এনালাইসিস এবং আমার ভাবনা

মূল উদ্দেশ্য: কন্টেন্ট ক্রিয়েটর চাচ্ছেন দর্শকদের একদম শুরু থেকে একটি প্রজেক্ট হাতে-কলমে শিখাতে। সরাসরি ডাটাবেস থেকে ডাটা আনার আগে একটি "টেক্সট" আউটপুট দিয়ে চেক করা ভালো অভ্যাস যাতে বোঝা যায় প্রজেক্ট ঠিকমতো রান করছে কি না।

বাস্তবতা ও পরামর্শ:

  1. লমবোক (Lombok) সমস্যা: ভিডিওতে একটি এরর দেখা গিয়েছিল যে লমবোক কাজ করছে না। যারা নতুন শিখছেন, তারা চাইলে শুরুতে লমবোক বাদ দিয়ে ম্যানুয়ালি Getter/Setter ব্যবহার করতে পারেন, এতে অনেক কনফিগারেশন ঝামেলা কমে যায়।

  2. বিকল্প: আপনি যদি PostgreSQL সেটআপ করতে ঝামেলা মনে করেন, তবে প্র্যাকটিসের জন্য H2 Database (ইন-মেমোরি ডাটাবেস) ব্যবহার করতে পারেন, যাতে কোনো আলাদা সফটওয়্যার ইন্সটল করতে হয় না।

  3. পরবর্তী ধাপ: পরবর্তী ভিডিওগুলোতে ডাটাবেস থেকে ডাটা এনে JSON ফরম্যাটে দেখানোর সম্ভাবনা আছে, যা রিয়েল-লাইফ অ্যাপের জন্য খুব জরুরি।

[

Quiz App Using Spring Boot #1 | Microservices Tutorial

Telusko · 97K views

](http://www.youtube.com/watch?v=zFGh_Jh-Hvs)

মন্তব্যসমূহ

এই ব্লগটি থেকে জনপ্রিয় পোস্টগুলি

সিজ্জিন (Sijjin) vs ইল্লিয়িন (Illiyin) পার্থক্য Difference

Sijjin (سِجِّين) এবং Illiyin (عِلِّيِّين) —এ দুটি শব্দ কুরআনে এসেছে এবং দুটোই মানুষের আমলনামা সংরক্ষণ সম্পর্কিত স্থানকে নির্দেশ করে। ১. সিজ্জিন (Sijjin) সিজ্জিন হলো পাপীদের (কাফের, মুনাফিক ও দুরাচারীদের) আমলনামা সংরক্ষণের স্থান। এটি সাত তলদেশের নীচে এক কারাগার বা অন্ধকার জগতে অবস্থিত বলে উল্লেখ রয়েছে। সূরা আল-মুতাফফিফীন (৮৩:৭-৯) তে বলা হয়েছে: "كَلَّا إِنَّ كِتَابَ الْفُجَّارِ لَفِي سِجِّينٍ ۝ وَمَا أَدْرَاكَ مَا سِجِّينٌ ۝ كِتَابٌ مَرْقُومٌ" অর্থ: "না, পাপীদের আমলনামা সিজ্জিনে সংরক্ষিত। তুমি কি জানো, সিজ্জিন কী? এটি এক লিখিত দলিল।" সিজ্জিনকে একটি কারাগার, সংকীর্ণ স্থান, বা নিচের স্তরে অবস্থিত এক অন্ধকার দুনিয়া হিসেবে ব্যাখ্যা করা হয়। ২. ইল্লিয়িন (Illiyin) ইল্লিয়িন হলো সৎকর্মশীলদের (মুমিন ও নেককারদের) আমলনামা সংরক্ষণের স্থান । এটি সপ্তম আসমানের ওপরে সংরক্ষিত এক সম্মানিত স্থান। সূরা আল-মুতাফফিফীন (৮৩:১৮-২১) তে বলা হয়েছে: "كَلَّا إِنَّ كِتَابَ الْأَبْرَارِ لَفِي عِلِّيِّينَ ۝ وَمَا أَدْرَاكَ مَا عِلِّيُّونَ ۝ كِتَابٌ مَرْقُومٌ ۝ يَش...

জাভা ফিডব্যাক এবং স্ট্রাকচার্ড কনকারেন্সি: বিবর্তনের গল্প

Introduction এই ভিডিওর নির্দিষ্ট অংশে জাভা ল্যাঙ্গুয়েজ আর্কিটেক্ট ব্রায়ান গোয়েটজ (Brian Goetz) আলোচনা করেছেন কীভাবে জাভার নতুন ফিচারগুলো তৈরি হয় এবং এতে সাধারণ ডেভেলপারদের মতামতের গুরুত্ব কতটুকু। বিশেষ করে Structured Concurrency -এর মতো জটিল ফিচারগুলো কেন বারবার 'Preview' অবস্থায় থাকে এবং কীভাবে কমিউনিটির ফিডব্যাক সেই ফিচারগুলোকে আরও নিখুঁত করতে সাহায্য করে, তা এখানে সহজভাবে বোঝানো হয়েছে। ১. ভালো ফিডব্যাক আসলে কী? ভিডিও রেফারেন্স: [ 34:53 ] ব্রায়ান গোয়েটজ বলছেন যে, জাভা টিম যখন কোনো নতুন ফিচারের খসড়া (Draft) বা প্রস্তাব (JEP) প্রকাশ করে, তখন তারা এমন কিছু জানতে চায় যা তারা নিজেরা আগে ভাবেনি। বিস্তারিত: একজন ডেভেলপার হিসেবে আমরা যখন কোনো নতুন ফিচার দেখি, আমাদের প্রথম প্রতিক্রিয়া হয় সেটার Syntax বা লেখার ধরন নিয়ে। কিন্তু ব্রায়ানের মতে, "এই লেখাটা কেন এমন হলো?" বা "এটা কোটলিন বা স্কালা-র মতো কেন নয়?"—এই ধরনের ফিডব্যাক খুব একটা কাজে আসে না। আসল দামী ফিডব্যাক হলো সেইটা, যা নতুন কোনো বাস্তব সমস্যা (Edge Case) তুলে ধরে। আমার চিন্তা: আপনি যদি কেবল দ...

ইমেজ ক্লাসিফিকেশন মডেল তৈরি ও প্রশিক্ষণ

ভূমিকা এই ভিডিওটিতে আমরা দেখবো কিভাবে একটি ইমেজ ক্লাসিফিকেশন মডেলকে প্রশিক্ষণ (Train) দিতে হয়। সহজ কথায়, আমাদের কাছে থাকা ছবিগুলো থেকে কম্পিউটারকে শেখানো যে, কোন ছবিটিতে কোন ব্যক্তি আছেন। এখানে আমরা ডাটাগুলোকে প্রসেস করা, মডেল নির্বাচন, এবং মডেলটি কতটা নির্ভুলভাবে কাজ করছে তা যাচাই করার প্রক্রিয়া শিখবো। ডাটা প্রিপারেশন বা প্রস্তুতি রেফারেন্স: [ 00:00 ] থেকে [ 01:03 ] মডেলকে প্রশিক্ষণ দেওয়ার আগে ডাটা ঠিকঠাক করা খুব জরুরি। ভিডিওতে দেখানো হয়েছে কিভাবে ছবিগুলো থেকে একটি ডিকশনারি বা তালিকার মতো স্ট্রাকচার তৈরি করা হয়েছে। সহজ ব্যাখ্যা: এখানে ইমেজগুলোকে সংখ্যায় রূপান্তর করা হয়েছে। কম্পিউটার সরাসরি ছবি বোঝে না, তাই সেগুলোকে ছোট ছোট ডাটা পয়েন্টের (Array) তালিকা হিসেবে সাজানো হয়েছে। যাতে মডেল বুঝতে পারে একটি ছবিতে কী কী বৈশিষ্ট্য আছে। মডেল নির্বাচন ও প্রশিক্ষণ (SVM) রেফারেন্স: [ 01:03 ] থেকে [ 04:43 ] এখানে Support Vector Machine (SVM) নামক একটি অ্যালগরিদম ব্যবহার করা হয়েছে। এটি সাধারণত ক্লাসিফিকেশনের কাজে খুব ভালো ফলাফল দেয়। পাইপলাইন (Pipeline): ডাটাকে স্কেল (Scale) করার জন্...