ইন্ট্রোডাকশন (Introduction): আজকের এই ব্লগে আমরা শিখবো কীভাবে একটি মাইক্রোসার্ভিস আর্কিটেকচারে 'Question Service' তৈরি করতে হয়। এটি মূলত একটি কুইজ অ্যাপ্লিকেশনের অংশ যেখানে আমরা দেখবো কীভাবে কুয়িজের জন্য প্রশ্ন জেনারেট করা হয়, আইডি দিয়ে প্রশ্ন খুঁজে বের করা হয় এবং ব্যবহারকারীর উত্তরের ভিত্তিতে স্কোর গণনা করা হয়। সহজ কথায়, এটি আপনার অ্যাপের সেই অংশ যা সব প্রশ্নের হিসাব-নিকাশ রাখবে।
পার্ট ১: কুইজ জেনারেট করা (Generating Quiz Questions)
এখানে আমাদের মূল লক্ষ্য হলো যখন কুইজ সার্ভিস বলবে "আমার ৫টি জাভা প্রশ্ন লাগবে", তখন এই সার্ভিসটি ডেটাবেস থেকে ৫টি র্যান্ডম প্রশ্নের আইডি খুঁজে বের করে দিবে।
আমার চিন্তা ও বিশ্লেষণ: আগে আমরা পুরো প্রশ্নের অবজেক্ট পাঠাতাম, কিন্তু মাইক্রোসার্ভিসে ডেটা আদান-প্রদান কমানোর জন্য আমরা শুধু প্রশ্নের ID পাঠাচ্ছি। এতে নেটওয়ার্কের ওপর চাপ কম পড়ে।
কোড উদাহরণ:
Java
@GetMapping("generate")
public ResponseEntity<List<Integer>> getQuestionsForQuiz(
@RequestParam String categoryName,
@RequestParam Integer numQuestions) {
return questionService.getQuestionsForQuiz(categoryName, numQuestions);
}
- ব্যাখ্যা: এই কোডটি একটি
GETরিকোয়েস্ট নেয় যেখানে ক্যাটাগরি এবং কয়টি প্রশ্ন লাগবে তা বলে দেওয়া হয়। এটি প্রশ্নের আইডিগুলোর একটি লিস্ট (List of Integers) রিটার্ন করে।
সহজ ভাষায় কঠিন শব্দ:
-
ResponseEntity: এটি স্প্রিং বুটের একটি ক্লাস যা দিয়ে আমরা আমাদের রেজাল্টের সাথে HTTP স্ট্যাটাস (যেমন: OK বা Not Found) পাঠাতে পারি।
-
RequestParam: ইউআরএল (URL) থেকে কোনো মান (যেমন ক্যাটাগরি নাম) পড়ার পদ্ধতি।
পার্ট ২: আইডি থেকে প্রশ্ন পাওয়া (Fetching Questions by ID)
একবার যখন আইডিগুলো পাওয়া যায়, তখন কুইজ সার্ভিস সেই আইডিগুলো পাঠিয়ে আমাদের কাছে মূল প্রশ্নগুলো (অপশনসহ কিন্তু উত্তর ছাড়া) চাইবে।
ডিজাইন কনসেপ্ট (Wrapper): আমরা সরাসরি Question অবজেক্ট পাঠাবো না, কারণ তাতে সঠিক উত্তর (Answer) থাকে। আমরা চাই না ইউজার ব্রাউজারের 'Inspect Element' করে উত্তর দেখে ফেলুক। তাই আমরা QuestionWrapper ব্যবহার করি।
কোড উদাহরণ:
Java
for (Integer id : questionIds) {
Question question = questionDao.findById(id).get();
QuestionWrapper wrapper = new QuestionWrapper();
wrapper.setId(question.getId());
wrapper.setQuestionTitle(question.getQuestionTitle());
wrapper.setOption1(question.getOption1());
// এভাবে ৪টি অপশন সেট করা হয়...
wrappers.add(wrapper);
}
- ব্যাখ্যা: এই লুপটি প্রতিটি আইডি দিয়ে ডেটাবেস থেকে প্রশ্ন খুঁজে বের করে এবং শুধু প্রয়োজনীয় তথ্যগুলো (আইডি, টাইটেল, অপশন) একটি নতুন লিস্টে রাখে।
পার্ট ৩: স্কোর গণনা (Calculating Score)
ইউজার যখন কুইজ শেষ করে সাবমিট করবে, তখন তাদের দেওয়া উত্তরগুলো চেক করে আমাদের স্কোর বলতে হবে।
কিভাবে কাজ করে: কুইজ সার্ভিস থেকে একটি লিস্ট আসে যেখানে প্রতিটি প্রশ্নের আইডি এবং ইউজারের দেওয়া উত্তর থাকে। আমরা ডেটাবেস থেকে ওই আইডির সঠিক উত্তর বের করে দুইটা মিলিয়ে দেখি।
কোড উদাহরণ:
Java
int right = 0;
for (Response response : responses) {
Question question = questionDao.findById(response.getId()).get();
if (response.getResponse().equals(question.getRightAnswer())) {
right++;
}
}
return new ResponseEntity<>(right, HttpStatus.OK);
- ব্যাখ্যা: এখানে আমরা প্রতিটি ইউজারের উত্তরের সাথে ডেটাবেসের উত্তরের তুলনা করছি। যদি মিলে যায় তবে
rightভেরিয়েবলের মান ১ বাড়িয়ে দিচ্ছি। শেষে মোট সঠিক উত্তরের সংখ্যা ফেরত পাঠাচ্ছি।
বিশ্লেষণ ও শেষ কথা (Analysis & Conclusion)
ক্রিয়েটরের মূল উদ্দেশ্য: টেলুসকো (Telusko) এখানে দেখাতে চেয়েছেন কীভাবে একটি মনোলিথিক (সব কোড এক জায়গায়) অ্যাপকে ভেঙে মাইক্রোসার্ভিসে রূপান্তর করতে হয়। ডেটা আদান-প্রদান সহজ করার জন্য অবজেক্টের বদলে আইডি ব্যবহার করা এবং সিকিউরিটির জন্য র্যাপার (Wrapper) ব্যবহার করা এখানে মূল কৌশল।
বাস্তব প্রেক্ষাপট ও পরামর্শ: বাস্তব জীবনে যখন হাজার হাজার ইউজার একসাথে কুইজ দিবে, তখন এই কোডটি আরও উন্নত করা যায়: ১. Caching: একই ক্যাটাগরির প্রশ্নের আইডি বারবার ডেটাবেস থেকে না খুঁজে ক্যাশে (যেমন Redis) রাখা যেতে পারে। ২. Batch Processing: স্কোর গণনার সময় একেকটি প্রশ্নের জন্য বারবার ডেটাবেসে না গিয়ে একবারে সব প্রশ্নের উত্তর নিয়ে আসা (Select IN clause) আরও দ্রুত কাজ করবে।
বিকল্প ব্যবস্থা: আপনি যদি জাভা ব্যবহার না করতে চান, তবে পাইথনের FastAPI বা Node.js দিয়েও একইভাবে এই সার্ভিসটি বানাতে পারেন। মাইক্রোসার্ভিসের মূল কনসেপ্ট সব ল্যাঙ্গুয়েজেই একই থাকে।
পুরো বিষয়টি বুঝতে পারলে আপনি এখন সহজেই একটি ডাইনামিক এবং সিকিউর কুইজ সার্ভিস ডিজাইন করতে পারবেন!
[
Creating a Question Service Part-2 | Microservice
Telusko · 32K views
](http://www.youtube.com/watch?v=K4Iz6eAF18s)

মন্তব্যসমূহ
একটি মন্তব্য পোস্ট করুন
আপনার সমস্যাটি কমেন্ট করে আমাদের জানান :-d