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

পোস্টগুলি

[Master Post] Carrier Classes & Discussing Syntax - Inside Java Podcast 52

URL: https://youtu.be/b6cXuA84c9g?t=0 Title: Carrier Classes & Discussing Syntax - Inside Java Podcast 52 Topics:- JavaOne-এ জাভা ল্যাঙ্গুয়েজের ভবিষ্যৎ এবং প্রজেক্ট আম্বার নিয়ে আড্ডা জাভাতে রেকর্ড (Records) এবং তার ফিচারগুলোর ব্যবচ্ছেদ জাভাতে ক্যারিয়ার ক্লাস এবং ডিকনস্ট্রাকশন এর বিবর্তন জাভা প্রোগ্রামিংয়ে Reconstruction, Marshalling এবং ভবিষ্যতের পথচলা ল্যাঙ্গুয়েজ ডিজাইনে সিনট্যাক্স আলোচনার চ্যালেঞ্জসমূহ জাভা ফিডব্যাক এবং স্ট্রাকচার্ড কনকারেন্সি: বিবর্তনের গল্প জাভা প্রোগ্রামিংয়ের নতুন চমক: লোকাল ভেরিয়েবল ডিক্লেয়ারেশন এবং ক্লোজিং

ল্যাঙ্গুয়েজ ডিজাইনে সিনট্যাক্স আলোচনার চ্যালেঞ্জসমূহ

Introduction এই ভিডিওর নির্দিষ্ট অংশটিতে জাভা (Java) ল্যাঙ্গুয়েজের আর্কিটেক্ট ব্রায়ান গেটস (Brian Goetz) আলোচনা করেছেন যে, কেন একটি প্রোগ্রামিং ল্যাঙ্গুয়েজের নতুন ফিচার তৈরির সময় 'সিনট্যাক্স' বা কোড দেখতে কেমন হবে—তা নিয়ে আলোচনা করাটা বেশ বিরক্তিকর এবং অনেক সময় ক্ষতিকর হয়ে দাঁড়ায়। আমরা ডেভেলপাররা সাধারণত কোডের চেহারা (Syntax) আগে দেখি, কিন্তু ল্যাঙ্গুয়েজ ডিজাইনারদের কাছে সেই ফিচারের মূল অর্থ বা কাজ (Semantics) বেশি গুরুত্বপূর্ণ। এই আলোচনায় সিনট্যাক্স নিয়ে তর্কের নেতিবাচক দিক এবং কীভাবে সঠিক ফিডব্যাক দিতে হয়, তা সহজভাবে তুলে ধরা হয়েছে। সিনট্যাক্স নিয়ে আলোচনার সমস্যাগুলো (The Problem with Syntax Discussions) রেফারেন্স: [ 27:23 ] - [ 30:03 ] ব্রায়ান ব্যাখ্যা করেছেন যে, সিনট্যাক্স অত্যন্ত গুরুত্বপূর্ণ কারণ ডেভেলপাররা সারাদিন কোডের দিকে তাকিয়ে থাকে। কিন্তু সিনট্যাক্স নিয়ে আলোচনা প্রায়ই "মূল্যহীন" (worthless) হয়ে যায়। এর প্রধান তিনটি কারণ রয়েছে: ১. মতামত ভিত্তিক (Opinion-based): সিনট্যাক্স অনেকটা পছন্দের মতো। কেউ হয়তো পছন্দ করেন কটলিন (Kotlin) বা স্কালা (Scala)-র ...

জাভা প্রোগ্রামিংয়ের নতুন চমক: লোকাল ভেরিয়েবল ডিক্লেয়ারেশন এবং ক্লোজিং

Introduction বন্ধুরা, কেমন আছো সবাই? আজকে আমরা জাভা প্রোগ্রামিংয়ের খুব চমৎকার এবং আধুনিক একটি বিষয় নিয়ে আলোচনা করবো। আমরা যারা কোডিং করি, তারা জানি যে কোড যত ছোট এবং পরিষ্কার (Clean) হয়, কাজ করতে তত সুবিধা হয়। এই ভিডিওতে জাভা ল্যাঙ্গুয়েজ আর্কিটেক্ট ব্রায়ান গ্যাটস (Brian Goetz) আমাদের জানাচ্ছেন যে, জাভাতে এখন ভেরিয়েবল ডিক্লেয়ার করা বা তৈরি করা আরও কত সহজ হতে যাচ্ছে। বিশেষ করে 'Enhanced Local Variable Declarations' বা 'Imperative Pattern Matching' নিয়ে এখানে বিস্তারিত বলা হয়েছে। সহজ কথায়, আগে যে কাজ করতে আমাদের অনেক লাইন কোড লিখতে হতো, এখন তা এক লাইনেই সম্ভব! ১. এনহ্যান্সড লোকাল ভেরিয়েবল ডিক্লেয়ারেশন (Enhanced Local Variable Declarations) ভিডিওর [ 42:08 ] থেকে [ 46:15 ] অংশে এই বিষয়টি নিয়ে আলোচনা করা হয়েছে। আগে যখন আমরা কোনো অবজেক্ট বা রেকর্ড থেকে ডাটা বের করতে চাইতাম, তখন আমাদের আলাদা আলাদা করে মেথড কল করতে হতো। কিন্তু নতুন এই ফিচারে আমরা ভেরিয়েবল ডিক্লেয়ার করার সময়ই সরাসরি ডাটাগুলোকে আলাদা করে নিতে পারবো। ভিডিও রেফারেন্স: [ 42:58 ] সহজ ব্যাখ্যা: মনে করো তোমার ...

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

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

জাভা প্রোগ্রামিংয়ে Reconstruction, Marshalling এবং ভবিষ্যতের পথচলা

Introduction এই ভিডিওর নির্দিষ্ট অংশটিতে (২০:৪০ থেকে ২৭:২৩) জাভা ল্যাঙ্গুয়েজ আর্কিটেক্ট ব্রায়ান গোয়েটজ (Brian Goetz) জাভার অত্যন্ত গুরুত্বপূর্ণ কিছু ফিচার নিয়ে আলোচনা করেছেন। মূল আলোচনাটি ছিল Project Amber -এর অধীনে আসা Reconstruction (পুনর্গঠন) , Marshalling (ডেটা আদান-প্রদান) এবং জাভা ল্যাঙ্গুয়েজকে আরও সহজ করার জন্য ভবিষ্যতের পরিকল্পনা নিয়ে। মূলত রেকর্ড (Record) ক্লাসের সুবিধাগুলো কীভাবে সাধারণ ক্লাসগুলোতেও নিয়ে আসা যায়, সেই কারিগরি বিষয়গুলোই এখানে সহজভাবে তুলে ধরা হয়েছে। Reconstruction বা অবজেক্ট পুনর্গঠন ভিডিও রেফারেন্স: [ 20:40 ] এখানে ব্রায়ান 'Withers' বা 'Reconstruction' নিয়ে কথা বলেছেন। আমরা জানি জাভাতে Record ক্লাসগুলো সাধারণত ইমিউটেবল (Immutable) বা অপরিবর্তনীয় হয়। এখন ধরুন, আপনার কাছে একটি অবজেক্ট আছে এবং আপনি চাচ্ছেন সেটির সব ডেটা ঠিক রেখে শুধু একটি মান পরিবর্তন করে নতুন একটি অবজেক্ট তৈরি করতে। একেই বলা হচ্ছে Reconstruction। সহজ ব্যাখ্যা: মনে করুন আপনার কাছে একটা লাল রঙের প্লাস্টিকের চেয়ার আছে। আপনি চাচ্ছেন ঠিক একই ডিজাইনের কিন্তু নীল রঙের একটা চে...

জাভাতে ক্যারিয়ার ক্লাস এবং ডিকনস্ট্রাকশন এর বিবর্তন

Introduction এই ভিডিওতে ওরা জাভা ল্যাঙ্গুয়েজের নতুন কিছু ফিচার নিয়ে কথা বলেছে। বিশেষ করে 'Carrier Classes' (বা Component Classes) কী এবং এগুলো কীভাবে জাভাতে ডাটা হ্যান্ডেল করার পদ্ধতি বদলে দিচ্ছে, তা নিয়ে আলোচনা করা হয়েছে। রেকর্ড (Records) আসার পর জাভাতে কোড লেখা অনেক সহজ হয়েছে, কিন্তু সাধারণ ক্লাসগুলোকে কীভাবে রেকর্ডের মতো সুবিধা দেওয়া যায়, সেই বিবর্তনটাই এখানে মূল বিষয়। ক্যারিয়ার ক্লাসের প্রথম প্রস্তাব (First Proposal) রেফারেন্স: [ 14:14 ] শুরুতে আইডিয়া ছিল যে, একটা ক্লাসের হেডারেই (Header) আমরা বলে দেব যে এই ক্লাসের ভেতর কী কী কম্পোনেন্ট আছে। এর মাধ্যমে জাভা অটোমেটিকালি equals , hashCode , এবং toString মেথডগুলো তৈরি করে দেবে। বিস্তারিত: রেকর্ড ক্লাসে যেমন ব্র্যাকেটের ভেতর সব ভেরিয়েবল লিখে দেওয়া হয়, ক্যারিয়ার ক্লাসেও অনেকটা সেরকম করার চেষ্টা করা হয়েছিল। এতে সুবিধা হতো যে আপনাকে বারবার একঘেয়ে কোড (Boilerplate code) লিখতে হতো না। কিন্তু ব্রায়ান গেটজ (Java Architect) খেয়াল করলেন যে, এতে সিস্টেমটা অনেক জটিল হয়ে যাচ্ছে। কারণ এটি ক্লাসের ওপর অনেক বেশি সীমাবদ্ধতা তৈরি করছি...

জাভাতে রেকর্ড (Records) এবং তার ফিচারগুলোর ব্যবচ্ছেদ

Introduction এই ভিডিওতে জাভা ল্যাঙ্গুয়েজ আর্কিটেক্ট ব্রায়ান গেটস (Brian Goetz) আলোচনা করেছেন কীভাবে জাভার 'Records' ফিচারটিকে আরও উন্নত করা যায়। রেকর্ড সাধারণত ডেটা সংরক্ষণের জন্য ব্যবহৃত হয়, কিন্তু এর কিছু সীমাবদ্ধতা আছে। ব্রায়ান ব্যাখ্যা করেছেন যে তারা রেকর্ডকে ভেঙে এর ভেতরের পাওয়ারফুল ফিচারগুলো সাধারণ ক্লাসেও (Regular Classes) দেওয়ার চেষ্টা করছেন, যাতে প্রোগ্রামারদের কষ্ট কম হয় এবং কোড আরও পরিষ্কার থাকে। ১. রেকর্ড কি এবং এর সীমাবদ্ধতা (What is Record and its limits) ভিডিও রেফারেন্স: [ 00:42 ] থেকে [ 07:00 ] পর্যন্ত। রেকর্ড জাভাতে এমন এক ধরনের ক্লাস যা মূলত ডেটা ধরে রাখার জন্য তৈরি। আপনি যখন একটি রেকর্ড ডিক্লেয়ার করেন, জাভা অটোমেটিক আপনার জন্য কিছু জিনিস তৈরি করে দেয়: Accessors: ডেটা পড়ার মেথড। Constructor: অবজেক্ট তৈরির উপায়। Equals, HashCode, TwoString: ডেটা তুলনা এবং প্রিন্ট করার ডিফল্ট মেথড। সমস্যা: ব্রায়ান বলছেন, রেকর্ড একটি "বোনাস কম্বো প্যাক" এর মতো। যদি আপনার কাজ এই প্যাকেজের ভেতর না পড়ে, তবে আপনি আবার সেই পুরনো অনেক কোড (Boilerplat...

JavaOne-এ জাভা ল্যাঙ্গুয়েজের ভবিষ্যৎ এবং প্রজেক্ট আম্বার নিয়ে আড্ডা

Introduction এই ভিডিওতে ওরাকলের জাভা ল্যাঙ্গুয়েজ আর্কিটেক্ট ব্রায়ান গেটস (Brian Goetz) এবং উপস্থাপক জাভা ওয়ান (JavaOne) কনফারেন্সের ঠিক আগে একটি অনানুষ্ঠানিক পরিবেশে বসে জাভার বর্তমান এবং ভবিষ্যৎ নিয়ে আলোচনা করেছেন। মূল আলোচনাটি আবর্তিত হয়েছে Project Amber -কে ঘিরে, যা জাভা প্রোগ্রামারদের কাজের গতি বাড়াতে এবং কোডকে আরও সহজ করতে কাজ করে যাচ্ছে। বিশেষ করে 'Records' এবং নতুন 'Carrier Classes'-এর ধারণা নিয়ে এখানে বিস্তারিত কথা বলা হয়েছে। প্রজেক্ট আম্বার (Project Amber) এর ভূমিকা [ 01:24 ] ব্রায়ান গেটস ব্যাখ্যা করেছেন যে, Project Amber হলো জাভার একটি বিশেষ প্রজেক্ট যার লক্ষ্য হলো ছোট ছোট ফিচারের মাধ্যমে ডেভেলপারদের উৎপাদনশীলতা (Productivity) বাড়ানো। সহজ ব্যাখ্যা: সহজ কথায়, জাভাকে আরও আধুনিক এবং সহজ করার জন্য যে ছোট ছোট পরিবর্তনগুলো আনা হয় (যেমন: Text Blocks, Records), সেগুলোই এই প্রজেক্টের অংশ। এটি বড় কোনো পরিবর্তন (যেমন জেনেরিক্স) নয়, বরং কোড লেখা যাতে আরও আনন্দদায়ক হয় সেই চেষ্টা করে। বিগিনার টিপস: * Productivity: সহজ কথায়, কম সময়ে বা কম পরিশ্রমে বেশি কাজ কর...

[Master Post] Microservice Tutorial using Java

URL: https://www.youtube.com/playlist?list=PLsyeobzWxl7rRyGcqgZ3MP5pWGPwUvprI Title: Microservice Tutorial using Java Topics:- মাইক্রোসার্ভিসেস কী এবং এটি কেন ব্যবহার করা হয়? ক্লাউড কম্পিউটিং: সহজ ভাষায় এ টু জেড গাইড ব্লু গ্রিন ডেপ্লয়মেন্ট: নিরবচ্ছিন্নভাবে সফটওয়্যার আপডেট করার আধুনিক পদ্ধতি Cloud Native বনাম Cloud Ready: ১২ ফ্যাক্টর অ্যাপের সহজ গাইড স্প্রিং বুট ব্যবহার করে কুইজ অ্যাপ তৈরি (পার্ট ১) Spring Boot ব্যবহার করে একটি কুইজ অ্যাপ তৈরি (পার্ট ২) স্প্রিং বুট ব্যবহার করে কুইজ অ্যাপ তৈরি: পার্ট ৩ (মাইক্রোসার্ভিসেস) স্প্রিং বুট কুইজ অ্যাপ: রেসপন্স এনটিটি এবং এক্সেপশন হ্যান্ডলিং স্প্রিং বুট ব্যবহার করে কুইজ অ্যাপ তৈরি: মাইক্রোসার্ভিস টিউটোরিয়াল স্প্রিং বুট ব্যবহার করে কুইজ অ্যাপ তৈরি (মাইক্রোসার্ভিস পার্ট ৬) স্প্রিং বুট মাইক্রোসার্ভিস দিয়ে কুইজ অ্যাপে ডেটা ফেচ করা স্প্রিং বুট ব্যবহার করে কুইজ অ্যাপের রেজাল্ট ক্যালকুলেশন মাইক্রোসার্ভিস আর্কিটেকচার: মনোলিথিক থেকে আধুনিক পদ্ধতিতে রূপান্তর মাইক্রোসার্ভিস প্রজেক্টে কুয়েশ্চেন সার্ভিস (Questio...

স্প্রিং বুট ব্যবহার করে কুইজ অ্যাপ তৈরি: পার্ট ৩ (মাইক্রোসার্ভিসেস)

ভূমিকা (Introduction) এই ভিডিওতে আমরা একটি কুইজ অ্যাপ্লিকেশন তৈরির পরবর্তী ধাপগুলো শিখব। মূলত এখানে দেখানো হয়েছে কীভাবে ডাটাবেস থেকে নির্দিষ্ট ক্যাটাগরি (যেমন: Java, Python) অনুযায়ী প্রশ্ন খুঁজে বের করা যায় এবং কীভাবে নতুন প্রশ্ন সিস্টেমে যোগ (Add) করা যায়। এটি একটি Microservices Tutorial সিরিজের অংশ, যেখানে Spring Boot এবং Spring Data JPA ব্যবহার করে ব্যাকএন্ডের কাজগুলো সহজ করা হয়েছে। পার্ট ১: ক্যাটাগরি অনুযায়ী প্রশ্ন খোঁজা (Fetching Questions by Category) আগের পর্বে আমরা সব প্রশ্ন একসাথে আনা শিখেছিলাম। কিন্তু বাস্তবে আমাদের হয়তো শুধু 'Java' বা 'Python'-এর প্রশ্ন দরকার হতে পারে। রেফারেন্স: ভিডিওর শুরু থেকে ০৫:৫০ পর্যন্ত দেখুন বিস্তারিত আলোচনা: ১. Controller-এ পরিবর্তন: আমরা একটি নতুন মেথড তৈরি করি যা ইউজার থেকে একটি 'Category' ইনপুট নেবে। ২. Path Variable: ব্রাউজারের লিঙ্কে (URL) যখন আমরা কোনো মান পাঠাই (যেমন: /question/category/java ), তখন সেই 'java' শব্দটিকে কোডে ধরার জন্য @PathVariable অ্যানোটেশন ব্যবহার করা হয়। ৩. JPA Magic: মজার ব্যা...

মাইক্রোসার্ভিস আর্কিটেকচারে API Gateway এর সহজ ব্যবহার

Introduction আজকের এই আলোচনায় আমরা শিখব মাইক্রোসার্ভিস (Microservices) প্রজেক্টে API Gateway কেন এবং কীভাবে ব্যবহার করতে হয়। ধরুন আপনার অনেকগুলো ছোট ছোট সার্ভিস আছে (যেমন: কুইজ সার্ভিস, কোশ্চেন সার্ভিস), এখন ইউজার যদি আলাদা আলাদা পোর্টের মাধ্যমে এই সার্ভিসগুলোতে এক্সেস করতে চায়, তবে সেটা খুব ঝামেলার কাজ। এই ঝামেলা দূর করতেই আসে API Gateway। এটি পুরো সিস্টেমের একটি 'মেইন গেট' বা প্রবেশদ্বার হিসেবে কাজ করে। [ 00:31 ] কেন আমাদের API Gateway প্রয়োজন? ইউজার যখন আপনার অ্যাপ্লিকেশন ব্যবহার করে, সে চায় একটি মাত্র লিঙ্কের মাধ্যমে সব কাজ করতে। কিন্তু মাইক্রোসার্ভিসে প্রতিটি সার্ভিসের আলাদা নাম ও পোর্ট (যেমন: 8080, 8090) থাকে। এছাড়া ইউজারকে বারবার প্রতিটি সার্ভিসে লগইন (Authentication) করতে বলাটা বিরক্তিকর। সহজ ভাষায়: API Gateway হলো এমন একটি জায়গা যেখানে ইউজার একবার নক করবে, আর গেটওয়ে ঠিক করে দেবে ইউজারকে কোন সার্ভিসে পাঠাতে হবে। এটি সিকিউরিটি এবং লগ মেইনটেইন করার কাজও সহজ করে দেয়। [ 01:22 ] কঠিন শব্দের ব্যাখ্যা: Authentication (অথেন্টিকেশন): ব্যবহারকারীর পরিচয় যাচাই করা (যে...

মাইক্রোসার্ভিসে লোড ব্যালেন্সিং এর সহজ পাঠ

Introduction হ্যালো! আজ আমরা জানবো মাইক্রোসার্ভিস আর্কিটেকচারে "লোড ব্যালেন্সিং" (Load Balancing) কী এবং এটি কীভাবে কাজ করে। সহজ কথায় বলতে গেলে, যখন কোনো ওয়েবসাইটে বা অ্যাপে অনেক বেশি মানুষ একসাথে ঢুকে পড়ে, তখন সেই চাপ সামলানোর জন্য আমরা অনেকগুলো সার্ভার ব্যবহার করি। এই চাপের ভাগাভাগিটাকেই বলা হয় লোড ব্যালেন্সিং। ভিডিওটিতে দেখানো হয়েছে কীভাবে স্প্রিং বুট (Spring Boot) ব্যবহার করে আমরা খুব সহজেই এটি সেটআপ করতে পারি। ১. লোড ব্যালেন্সিং কী? প্রথমে আমরা মূল ধারণাটি বুঝে নিই। নিচের ভিডিও রেফারেন্সটি এই আলোচনার ভিত্তি: ভিডিও রেফারেন্স: Load Balancing in Microservices [ 00:00 ] বিস্তারিত আলোচনা: কল্পনা করুন একটি জনপ্রিয় বিরিয়ানির দোকান। সেখানে যদি একজন মাত্র লোক অর্ডার নেয়, তবে অনেক ভিড় জমে যাবে। কিন্তু যদি সেখানে তিনজন লোক অর্ডার নেয়, তবে কাস্টমাররা ভাগ হয়ে যাবে এবং কাজ দ্রুত হবে। একেই বলে Horizontal Scaling (সার্ভারের সংখ্যা বাড়ানো)। আমার চিন্তা: লোড ব্যালেন্সার হলো একজন ট্রাফিক পুলিশের মতো, যে ঠিক করে দেয় কোন রিকোয়েস্ট কোন সার্ভারে যাবে যাতে কোনো একটি সার্ভারের ওপর ...

মাইক্রোসার্ভিস প্রজেক্টের কুইজ এবং কোশ্চেন সার্ভিস সম্পন্ন করা

ইন্ট্রোডাকশন: এই ভিডিওতে দেখানো হয়েছে কীভাবে একটি মাইক্রোসার্ভিস আর্কিটেকচারে কুইজ সার্ভিস (Quiz Service) এবং কোশ্চেন সার্ভিস (Question Service) একে অপরের সাথে যোগাযোগ করে একটি পূর্ণাঙ্গ সিস্টেম তৈরি করে। আমরা এখানে মূলত দুটি গুরুত্বপূর্ণ কাজ সম্পন্ন করব: কুইজের প্রশ্নগুলো নিয়ে আসা এবং কুইজ শেষে প্রাপ্ত নম্বর (Score) গণনা করা। ১. কুইজের প্রশ্নগুলো খুঁজে বের করা (Get Quiz Questions) ভিডিও রেফারেন্স: [ 01:00 ] আমরা যখন কোনো কুইজ খেলতে চাই, তখন আমাদের কাছে শুধু কুইজের আইডি থাকে। কিন্তু সেই কুইজের ভেতরে কী কী প্রশ্ন আছে, সেটা থাকে 'কোশ্চেন সার্ভিস'-এর কাছে। এখানে কুইজ সার্ভিস একটি ইন্টারফেসের মাধ্যমে কোশ্চেন সার্ভিসকে অনুরোধ পাঠায়। সহজ ব্যাখ্যা: মনে করুন, আপনি একটা রেস্টুরেন্টে গিয়ে মেনু কার্ড চাইলেন। ওয়েটার (Quiz Service) নিজে রান্না জানে না, সে রান্নাঘর থেকে (Question Service) মেনু বা খাবার নিয়ে এসে আপনাকে দেয়। এখানেও কুইজ সার্ভিস শুধু আইডিগুলো পাঠায় আর কোশ্চেন সার্ভিস আসল প্রশ্নগুলো ফেরত দেয়। সহজ করে বোঝা (Difficult Words): Wrapper (র‍্যাপার): এটি একটি বিশেষ বক্সের মত...

মাইক্রোসার্ভিস কমিউনিকেশন: একটি সার্ভিস থেকে অন্য সার্ভিসে কল করার সহজ নিয়ম

Introduction আজকের এই আলোচনায় আমরা শিখব কীভাবে একটি Microservice অন্য একটি Microservice -এর সাথে যোগাযোগ করে। সহজ কথায়, একটা সফটওয়্যারের ছোট অংশ যখন অন্য একটা অংশের সাহায্য চায়, তখন তারা নিজেদের মধ্যে কীভাবে কথা বলে, সেটাই এখানে দেখানো হয়েছে। আমরা এখানে 'Quiz Service' এবং 'Question Service'-এর মধ্যে সংযোগ স্থাপন এবং সেটি পরীক্ষা করার বাস্তব উদাহরণ দেখব। ১. প্রজেক্ট সেটআপ এবং টেস্টিং (Postman-এর মাধ্যমে) প্রথমে আমাদের দেখতে হবে প্রজেক্টটি ঠিকমতো চলছে কি না। এর জন্য আমরা Postman ব্যবহার করি, যা দিয়ে এপিআই (API) টেস্ট করা হয়। রেফারেন্স: [ 00:15 ] বিস্তারিত ব্যাখ্যা: এখানে কুইজ তৈরি করার জন্য একটি রিকোয়েস্ট পাঠানো হচ্ছে। মাইক্রোসার্ভিসে প্রতিটি সার্ভিসের জন্য আলাদা পোর্ট (Port) থাকে। এই প্রজেক্টে কুইজ সার্ভিসটি 8090 পোর্টে চলছে। সহজ ব্যাখ্যা: মনে করুন, আপনি একটি রেস্টুরেন্টে গিয়ে খাবার অর্ডার করছেন। আপনার টেবিল নম্বর হলো পোর্ট, আর মেনু কার্ড হলো ইউআরএল (URL)। কঠিন শব্দ: Postman (পোস্টম্যান) - এটি একটি টুল যা দিয়ে চেক করা যায় যে আপনার তৈরি করা কোড বা এপি...

মাইক্রোসার্ভিসে ফেং (Feign) ক্লায়েন্ট ব্যবহার করে সহজে যোগাযোগ

হ্যালো! আজকের এই আলোচনায় আমরা শিখবো কীভাবে মাইক্রোসার্ভিস আর্কিটেকচারে দুই বা ততোধিক সার্ভিসের মধ্যে খুব সহজে যোগাযোগ করা যায়। সাধারণত মাইক্রোসার্ভিসে এক সার্ভিস থেকে অন্য সার্ভিসকে কল করার জন্য আমরা RestTemplate ব্যবহার করি, কিন্তু সেটি বেশ জটিল হতে পারে। এই ভিডিওতে দেখানো হয়েছে কীভাবে Feign Client ব্যবহার করে কোড না লিখে বা আইপি-পোর্ট নিয়ে চিন্তা না করেই অন্য সার্ভিসের মেথড ব্যবহার করা যায়। মাইক্রোসার্ভিস কমিউনিকেশন এবং ফেং (Feign) এর ভূমিকা ভিডিও রেফারেন্স: [ 00:40 ] যখন একটি মাইক্রোসার্ভিস (যেমন: Quiz Service) অন্য একটি মাইক্রোসার্ভিসের (যেমন: Question Service) ডেটা চায়, তখন তাদের মধ্যে একটি যোগাযোগের মাধ্যম লাগে। সহজ ব্যাখ্যা: মনে করো তুমি একটি রেস্টুরেন্টে গিয়েছো। তুমি (Quiz Service) খাবার অর্ডার দিতে চাও। এখন খাবারটি বানাবে শেফ (Question Service)। তোমার আর শেফ-এর মাঝে যে ওয়েটার কাজ করে, সেই হলো Feign । তোমাকে রান্নাঘরে গিয়ে শেফকে খুঁজতে হবে না, শুধু ওয়েটারকে বললেই সে শেফ-এর কাছ থেকে খাবার এনে দেবে। কঠিন শব্দের সহজ অর্থ: Feign Client: এটি একটি ডিক্লারেটিভ (Declarat...

মাইক্রোসার্ভিস আর্কিটেকচারে সার্ভিস রেজিস্ট্রি (Eureka Server) তৈরি

ইন্ট্রোডাকশন: আজকালকার সফটওয়্যার ডেভেলপমেন্টে যখন অনেকগুলো ছোট ছোট সার্ভিস বা মাইক্রোসার্ভিস একসাথে কাজ করে, তখন তারা একে অপরকে চিনবে কীভাবে? এই সমস্যা সমাধানের জন্যই প্রয়োজন একটি 'সার্ভিস রেজিস্ট্রি'। সহজ কথায়, এটি একটি ফোনের কন্টাক্ট লিস্টের মতো, যেখানে সব সার্ভিসের নাম এবং ঠিকানা (IP address ও Port) জমা থাকে। আজকের আলোচনায় আমরা শিখব কীভাবে Netflix Eureka Server ব্যবহার করে একটি সার্ভিস রেজিস্ট্রি তৈরি করতে হয় এবং কীভাবে অন্যান্য সার্ভিসগুলো এর সাথে যুক্ত হয়। ১. সার্ভিস রেজিস্ট্রি কী এবং কেন প্রয়োজন? রেফারেন্স: [ 00:00 ] যখন আপনার সিস্টেমে ১০-২০টি বা তার বেশি মাইক্রোসার্ভিস থাকে, তখন একটি সার্ভিস অন্যটির সাথে কানেক্ট করতে চাইলে তার নির্দিষ্ট ঠিকানা জানা কঠিন হয়ে পড়ে। এখানেই আসে Service Discovery বা সার্ভিস রেজিস্ট্রির ধারণা। সার্ভিস ডিসকভারি: এটি একটি কেন্দ্রীয় সার্ভার যেখানে সব মাইক্রোসার্ভিস নিজে থেকে এসে নাম লিখিয়ে (Register) যায়। ইউরেকা সার্ভার (Eureka Server): এটি নেটফ্লিক্সের তৈরি একটি ওপেন সোর্স টুল যা মাইক্রোসার্ভিস ম্যানেজ করতে সাহায্য করে। সহজ কথায় ব...

মাইক্রোসার্ভিসে সার্ভিস ডিসকভারি কেন প্রয়োজন? (Need of Service Discovery)

ইন্ট্রোডাকশন (Introduction): আজকালকার বড় বড় ওয়েবসাইট বা অ্যাপগুলো একটা বড় কোড দিয়ে না বানিয়ে অনেকগুলো ছোট ছোট ভাগে ভাগ করে বানানো হয়, যেগুলোকে আমরা Microservices বলি। কিন্তু সমস্যা হলো, এই ছোট ছোট সার্ভিসগুলো যখন একে অপরের সাথে কথা বলতে চায়, তখন তারা একে অপরকে খুঁজে পাবে কীভাবে? আজকের এই আলোচনায় আমরা শিখব কেন সার্ভিস ডিসকভারি (Service Discovery) দরকার এবং কীভাবে Eureka ও Feign Client আমাদের এই কাজে সাহায্য করে। ১. কুইজ সার্ভিস ফিক্স করা (Fixing the Quiz Service) ভিডিও রেফারেন্স: [ 00:00 ] শুরুতেই আমাদের অ্যাপ্লিকেশনের কুইজ সার্ভিস (Quiz Service) নিয়ে কাজ করতে হবে। যেহেতু আমরা আগের প্রজেক্ট থেকে কোড কপি করেছি, তাই অনেক অপ্রয়োজনীয় ইমপোর্ট (Imports) এবং এরর (Errors) থাকতে পারে। বিবরণ: আমাদের কুইজ সার্ভিসে এখন আর সরাসরি ডাটাবেস থেকে প্রশ্ন নেওয়ার সুযোগ নেই, কারণ প্রশ্নের জন্য আলাদা একটি Question Service আছে। তাই কোড থেকে সরাসরি ডাটাবেস কলগুলো সরিয়ে ফেলতে হবে। সহজ ব্যাখ্যা (DTO): এখানে DTO (Data Transfer Object) ব্যবহার করা হয়েছে। DTO কি? মনে করো তুমি বাজার থেকে অনেকগুলো...

মাইক্রোসার্ভিস ব্যবহার করে কুইজ সার্ভিস তৈরি করার সহজ নিয়ম

ইন্ট্রোডাকশন: আজকের এই আলোচনায় আমরা শিখব কীভাবে একটি Microservice Architecture -এ "Quiz Service" তৈরি করতে হয়। এর আগে আমরা "Question Service" তৈরি করেছিলাম। এখনকার লক্ষ্য হলো এমন একটি সিস্টেম বানানো যেখানে কুইজ সার্ভিসটি সরাসরি ইউজারের সাথে কথা বলবে এবং প্রয়োজনে ইন্টারনাল কাজের জন্য কোয়েশ্চন সার্ভিসের সাহায্য নেবে। সহজ কথায়, আমরা দুটি আলাদা সার্ভিসকে একে অপরের সাথে যোগাযোগ করানো শিখব। প্রোজেক্ট সেটআপ এবং কনফিগারেশন এই টপিকের ডিটেইলসে যাওয়ার আগে আপনি চাইলে নিচের ভিডিও রেফারেন্সটি দেখে নিতে পারেন যা এই পুরো প্রসেসটি হাতে-কলমে দেখিয়েছে: ভিডিও রেফারেন্স: Creating a Quiz Service | Microservice [ 00:00 ] বিস্তারিত আলোচনা: একটি নতুন মাইক্রোসার্ভিস শুরু করার জন্য আমাদের প্রথম কাজ হলো একটি নতুন স্প্রিং বুট প্রোজেক্ট তৈরি করা। ভিডিওতে start.spring.io ব্যবহার করে প্রোজেক্ট জেনারেট করা হয়েছে। প্রয়োজনীয় ডিপেন্ডেন্সি (Dependencies): ১. Spring Web: ওয়েব অ্যাপ্লিকেশন বা API বানানোর জন্য। ২. Spring Data JPA: ডাটাবেসের সাথে সহজে কাজ করার জন্য। ৩. PostgreSQL Driver: ডাটাব...

মাইক্রোসার্ভিস আর্কিটেকচারে কোয়েশ্চেন সার্ভিস রান এবং টেস্টিং

পরিচিতি (Introduction) এই কন্টেন্টে মূলত দেখানো হয়েছে কিভাবে একটি Microservice (বিশেষ করে 'Question Service') লোকাল মেশিনে রান করতে হয় এবং সেটি ঠিকঠাক কাজ করছে কি না তা Postman এবং Browser দিয়ে টেস্ট করতে হয়। মাইক্রোসার্ভিসের একটি বড় সুবিধা হলো স্কেলেবিলিটি (Scalability), অর্থাৎ প্রয়োজনে একই সার্ভিসের একাধিক কপি বা Instance চালানো। এখানে আমরা শিখব কিভাবে একই প্রজেক্টকে আলাদা আলাদা পোর্টে (যেমন: 8080 এবং 8081) একই সাথে রান করা যায়। টপিক ১: সার্ভিস রান করা এবং বেসিক টেস্টিং (Running and Basic Testing) ভিডিওর শুরুতে আগের তৈরি করা কোডগুলোকে রান করে দেখা হয়েছে। ডিফল্টভাবে স্প্রিং বুট (Spring Boot) প্রজেক্ট ৮০৮০ (8080) পোর্টে চলে। রেফারেন্স: [ 01:14 ] বিস্তারিত আলোচনা: যেকোনো ওয়েব সার্ভিস তৈরি করার পর সেটি চেক করতে হয় যে ডাটা ঠিকমতো আসছে কি না। ব্রাউজারে localhost:8080/question/allQuestions লিখলে যদি সব প্রশ্ন দেখা যায়, তবে বুঝতে হবে সার্ভিসটি সচল। তবে প্রফেশনাল টেস্টিংয়ের জন্য Postman ব্যবহার করা ভালো। Instance (ইন্সট্যান্স): সহজ কথায়, একটি সফটওয়্যারের একটি রানিং ক...

মাইক্রোসার্ভিস প্রজেক্টে কুয়িজ সার্ভিস তৈরি (পার্ট ২)

ইন্ট্রোডাকশন (Introduction): আজকের এই ব্লগে আমরা শিখবো কীভাবে একটি মাইক্রোসার্ভিস আর্কিটেকচারে 'Question Service' তৈরি করতে হয়। এটি মূলত একটি কুইজ অ্যাপ্লিকেশনের অংশ যেখানে আমরা দেখবো কীভাবে কুয়িজের জন্য প্রশ্ন জেনারেট করা হয়, আইডি দিয়ে প্রশ্ন খুঁজে বের করা হয় এবং ব্যবহারকারীর উত্তরের ভিত্তিতে স্কোর গণনা করা হয়। সহজ কথায়, এটি আপনার অ্যাপের সেই অংশ যা সব প্রশ্নের হিসাব-নিকাশ রাখবে। পার্ট ১: কুইজ জেনারেট করা (Generating Quiz Questions) রেফারেন্স: [ 00:40 ] - [ 05:18 ] এখানে আমাদের মূল লক্ষ্য হলো যখন কুইজ সার্ভিস বলবে "আমার ৫টি জাভা প্রশ্ন লাগবে", তখন এই সার্ভিসটি ডেটাবেস থেকে ৫টি র‍্যান্ডম প্রশ্নের আইডি খুঁজে বের করে দিবে। আমার চিন্তা ও বিশ্লেষণ: আগে আমরা পুরো প্রশ্নের অবজেক্ট পাঠাতাম, কিন্তু মাইক্রোসার্ভিসে ডেটা আদান-প্রদান কমানোর জন্য আমরা শুধু প্রশ্নের ID পাঠাচ্ছি। এতে নেটওয়ার্কের ওপর চাপ কম পড়ে। কোড উদাহরণ: Java @GetMapping("generate") public ResponseEntity<List<Integer>> getQuestionsForQuiz( @RequestParam String categoryN...