আপনার AI-তৈরি অ্যাপের কি সত্যিকারের ব্যাকএন্ড দরকার? একটা যোগ করার আগে যেভাবে বুঝবেন
সত্যিকারের ব্যাকএন্ড আপনার ঠিক তিনটে কাজের জন্য দরকার — পেমেন্ট সামলানো, API কী আর সিক্রেট ব্রাউজারের বাইরে রাখা, আর একাধিক ইউজার একই ডেটা একসঙ্গে এডিট করলে একমাত্র সত্যের উৎস হিসেবে কাজ করা।
যে মুহূর্তে সন্দেহটা শুরু হয়
ব্যাকএন্ড আসলে এমন কোড যা ব্রাউজার ছাড়া অন্য কোথাও চলে — এমন সব কাজ করে যা ব্রাউজারের করার কথা নয়, যেমন টাকা কাটা বা সিক্রেট গোপন রাখা, আর ডেটাবেসের সাথে কথা বলে। বেশিরভাগ AI-তৈরি অ্যাপ ইতিমধ্যেই এর কিছুটা করছে, যদিও দেখতে আপনার ভাবনার মতো নাও লাগতে পারে।
আপনার অ্যাপ চলছে। ইউজার সাইন আপ করছে। ফিচার শিপ হচ্ছে। তারপর হঠাৎ একটা খটকা লাগতে শুরু করে: একটা “সত্যিকারের ব্যাকএন্ড” থাকা উচিত না? সবাই তো ব্যাকএন্ড নিয়ে কথা বলে। সিরিয়াস অ্যাপের ব্যাকএন্ড থাকে। আপনার বিল্ডার আপনাকে দিয়েছে React-এ TypeScript-এর একটা জিনিস, আর আপনার মনে হতে শুরু করেছে হয়তো এটা যথেষ্ট… প্রফেশনাল না।
আসল সত্যিটা হলো: এই খটকাটা সাধারণত ভুল। ব্যাকএন্ড যা করে তার কোনোটাই জাদু নয়, আর আপনার AI-তৈরি অ্যাপ হয়তো ইতিমধ্যেই সেটা করছে। যদি না করে থাকে, ব্যাকএন্ড যোগ করলে আসল সমস্যাটা ঠিক হবে না — যা সত্যিই ভাঙা আছে সেটা।
এই পোস্টটা এই পার্থক্যটা বোঝা নিয়ে।
ব্যাকএন্ড আসলে কী কাজের?
ব্যাকএন্ড ঠিক তিনটে কারণে থাকে: টাকা সামলানো, সিক্রেট নিরাপদ রাখা, আর একাধিক মানুষ একই ডেটা এডিট করলে একমাত্র সত্যের উৎস হিসেবে কাজ করা।
টাকা সামলানো। যদি আপনার অ্যাপ পেমেন্ট নেয় বা ইউজারের কাছ থেকে টাকা কাটে, পেমেন্ট প্রসেসর একটা ব্যাকএন্ড অবশ্যই দাবি করে। আপনার ব্রাউজার সরাসরি আপনার সিক্রেট API কী দিয়ে Stripe-এ হিট করতে পারে না (তাহলে ক্লায়েন্ট-সাইড কোডে কী রাখতে হতো, যেটা যে কেউ দেখতে পারবে)। তাই আপনার এমন একটা সার্ভার লাগবে যেটা কী নিরাপদ রাখে, ব্রাউজার থেকে রিকোয়েস্ট নেয়, আর ইউজারের হয়ে Stripe-এর সাথে কথা বলে। সেটাই ব্যাকএন্ড। এটা জমকালো হতে হবে না — বেশিরভাগ অ্যাপের জন্য একটা মাত্র Node ফাংশনই যথেষ্ট — কিন্তু থাকতেই হবে।
সিক্রেট নিরাপদ রাখা। API কী, ডেটাবেস পাসওয়ার্ড, অথ টোকেন — এগুলো ব্রাউজারে রাখা যায় না কারণ আপনার অ্যাপ ব্যবহার করা যে কেউ সেগুলো পড়তে পারবে। যদি আপনার AI-তৈরি অ্যাপের এমন কোনো বাইরের সার্ভিস কল করতে হয় যেটার অথেন্টিকেশন লাগে, ব্রাউজার একা সেটা করতে পারে না। অ্যাপ আপনার ব্যাকএন্ডের সাথে কথা বলতে পারে, যার কাছে কী থাকে, যেটা বাইরের সার্ভিসকে কল করে। আপনার সিক্রেট সিক্রেটই থেকে যায়।
ডেটার জন্য একমাত্র সত্যের উৎস। যদি দুজন ইউজার একসাথে আপনার অ্যাপ ব্যবহার করে আর দুজনেই একই ডেটা বদলাতে চায়, কার পরিবর্তন জিতবে সেটা ঠিক করার জন্য একটা কেন্দ্রীয় কর্তৃপক্ষ দরকার। ব্রাউজার রেফারির কাজ করতে পারে না — দুটো ব্রাউজার একে অপরকে দেখতে পায় না। তাই এমন একটা সার্ভার দরকার যেটা বলবে “অ্যালিস নামের পরিবর্তনটা পাবে, ববের এসেছিল ৩০ মিলিসেকেন্ড পরে তাই তারটা প্রযোজ্য হবে না।” সেই সার্ভারটাই ব্যাকএন্ড। এজন্যই ডেটাবেস অংশটা গুরুত্বপূর্ণ — এমন একটা জায়গা দরকার যেখানে সব ডেটা আসলেই থাকে।
লক্ষ্য করুন কোনটা এই তালিকায় নেই: পারফরম্যান্স, প্রফেশনালিজম, স্কেলেবিলিটি, সবার-আছে-তাই। এগুলোই সেই অনুভূতি যা আপনাকে অপ্রয়োজনীয় জটিলতা যোগ করতে প্রলুব্ধ করে।
কীভাবে বুঝবেন আপনার আসলেই ব্যাকএন্ড দরকার?
তিনটে সংকেত বোঝায় আপনার আসলেই একটা দরকার: অ্যাপ এমন কোনো কারণে স্লো যেটা ব্রাউজার একা ঠিক করতে পারবে না, ইউজার দেখতে বা বাধা দিতে পারে না এমন জায়গায় কোড চালাতে হবে, অথবা দুজন ইউজার একে অপরের ডেটা ওভাররাইট করছে। কোনটা, যদি আদৌ কোনোটা, আপনার ক্ষেত্রে প্রযোজ্য সেটা কীভাবে বুঝবেন দেখুন।
“এটা স্লো।” যদি ইউজাররা স্লো হওয়ার অভিযোগ করে, সমস্যাটা সাধারণত এই তিনটের একটা: ব্রাউজার বেশি কাজ করছে (CPU-নির্ভর, খারাপ অ্যালগরিদম, বেশি DOM রেন্ডার করছে), নেটওয়ার্ক স্লো (দুঃখজনক কিন্তু সত্যি), অথবা ডেটাবেস স্লো (অনেক বেশি কোয়েরি, ভুল ইনডেক্স — আপনার AI-তৈরি অ্যাপ ইতিমধ্যেই একটা ডেটাবেসের সাথে কথা বলছে, সাধারণত একটা ভালো ডেটাবেসের সাথে)। সত্যিকারের ব্যাকএন্ড ব্রাউজারের CPU কাজ ঠিক করবে না। সত্যিকারের ব্যাকএন্ড নেটওয়ার্ক লেটেন্সি ঠিক করবে না (পদার্থবিজ্ঞান কঠিন)। ব্যাকএন্ড ক্যাশিং বা স্মার্টার কোয়েরি প্যাটার্ন যোগ করে ডেটাবেস কোয়েরিতে সাহায্য করতে পারে, কিন্তু আপনার বিল্ডার সম্ভবত সেটা আগেই ভেবে রেখেছে।
সত্যিকারের স্লোনেসের একটা গল্প: একটা টুডু অ্যাপ লিস্ট লোড করতে ধীর ছিল। ডেভেলপার ভাবলেন “আমার একটা সত্যিকারের ব্যাকএন্ড দরকার।” আসল সমস্যা: অ্যাপটা প্রতিবার সব ৫,০০০ টুডু লোড করছিল, শুধু প্রথম ৫০টা “আরও লোড করুন” বাটন দিয়ে লোড করার বদলে। ব্যাকএন্ড না ছুঁয়েই এক বিকেলে ঠিক হয়ে গেল। ব্যাকএন্ড সমস্যাটা ছিল না।
“আমি এমন কোড চালাতে চাই যা ইউজারের দেখা উচিত না।” এটাই একমাত্র কারণ যেটা আসলেই যুক্তিসঙ্গত, আর এটা আপনার ভাবনার চেয়ে বিরল। উদাহরণ: ইউজার সাইন আপ করার পর একটা ইমেইল পাঠানো (আপনি চান সেই কোড চলুক এমনকি তারা ট্যাব বন্ধ করে দিলেও), রাতভর ফাইল প্রসেস করা একটা ব্যাকগ্রাউন্ড জব চালানো, নির্দিষ্ট সময় অন্তর একটা বাইরের API কল করা। এগুলো বৈধ কারণ। কোথাও একটা সার্ভারে কিছু একটা চলা দরকারই। কিন্তু সেটা অথেন্টিকেশন, রাউটিং, আর ডেটাবেসসহ পূর্ণাঙ্গ ব্যাকএন্ড হতে হবে না। এটা একটা মাত্র “ক্লাউড ফাংশন” হতে পারে যা নির্দিষ্ট সময় অন্তর চলে বা ওয়েবহুক দিয়ে কল হয়। পুরো ব্যাকএন্ডের চেয়ে অনেক সহজ।
“একাধিক ইউজার একই সময়ে একই ডেটা বদলাচ্ছে আর আমি আপডেট হারাচ্ছি।” এটা আসল সমস্যা। যদি আপনি দেখেন “অ্যালিসের এডিট গায়েব হয়ে গেছে” বা “দুজন একই ফর্ম এডিট করেছে আর দ্বিতীয়জনের পরিবর্তন প্রথমজনেরটা চাপা দিয়ে দিয়েছে,” তাহলে আপনার একটা কনটেনশন সমস্যা আছে। কিছু ডেটাবেস এটা অন্যগুলোর চেয়ে ভালো সামলায়, আর কিছু AI বিল্ডার এমন ডেটাবেসকে ডিফল্ট হিসেবে ধরে যেগুলো ভালো সামলায় না। কিন্তু সমাধান সবসময় পুরো একটা ব্যাকএন্ড না — এটা হতে পারে আপনার ডেটাবেস বদলানো, লকিং যোগ করা, বা অপটিমিস্টিক কনকারেন্সি যোগ করা (একটা জমকালো শব্দ যার মানে “পুরনো ভার্সন নম্বর রাখা আর আপডেটের অনুমতি দেওয়ার আগে তুলনা করা”)। আপনার বিল্ডারকে জিজ্ঞেস করুন তারা ডেটাবেস বদলাতে পারে কিনা বা ভার্সন ট্র্যাকিং যোগ করতে পারে কিনা। হয়তো আপনার ব্যাকএন্ড না, একটা স্মার্টার ডেটাবেস সেটআপ দরকার।
কোনটা ব্যাকএন্ড সমস্যার মতো দেখায় কিন্তু আসলে না?
তিনটে জিনিস ভুল করে ব্যাকএন্ড সমস্যা মনে করা হয়, কিন্তু আসলে না: JavaScript একই জায়গায় থাকা, আলাদা কোনো API লেয়ার না থাকা, আর নির্দিষ্ট কোনো ইস্যু ছাড়াই সাধারণ নিরাপত্তার চিন্তা।
“কোডটা JavaScript আর সব এক জায়গায়।” অনেক সফল অ্যাপ ব্রাউজারে JavaScript, একটা আসল ডেটাবেসের সাথে কথা বলছে (Firebase, Supabase, MongoDB Atlas, আপনার বিল্ডার যা সেট আপ করেছে সেটাই)। আলাদা কোনো “সত্যিকারের ব্যাকএন্ড” সার্ভার নেই। সবকিছু কাজ করছে। কোড এক ভাষায় এক জায়গায় থাকা মানে এই না যে এটা আসল না। JavaScript কাজ করে।
“আলাদা কোনো API লেয়ার নেই।” আপনার ব্রাউজার সরাসরি আপনার ডেটাবেসের সাথে কথা বলছে। অনেকের প্রথম প্রতিক্রিয়া হয় “এটা ঠিক না, মাঝখানে একটা API থাকা উচিত।” কিন্তু যদি সেই API শুধুই “এই টেবিল থেকে সিলেক্ট করে রিটার্ন করা” বা “এই টেবিলে ইনসার্ট করা” হয়, তাহলে মাঝের লেয়ারটা কিছুই যোগ করছে না। এটা শুধু বাড়তি ওভারহেড। আপনার ডেটাবেস নিজেই ইতিমধ্যে একটা API। পারলে সরাসরি কল করুন।
“আমি নিরাপত্তা নিয়ে চিন্তিত।” বেশিরভাগ AI-তৈরি অ্যাপ যুক্তিসঙ্গত ডিফল্টসহ আসে: পাসওয়ার্ড হ্যাশ করা থাকে, SQL ইনজেকশন সম্ভব না (ডেটাবেস লাইব্রেরিই সেটা আটকায়), সিক্রেট ক্লায়েন্টের বাইরে রাখা থাকে। যদি আপনি সত্যিই চিন্তিত থাকেন, তাহলে যেটা করা উচিত সেটা হলো আপনার বিল্ডারকে জিজ্ঞেস করা তারা এই জিনিসগুলো করছে কিনা, রিফ্লেক্সের মতো একটা ব্যাকএন্ড যোগ করে দেওয়া না। একটা খারাপভাবে বানানো ব্যাকএন্ড ভালোভাবে বানানো একটা ফ্রন্টএন্ডের চেয়ে বেশি ভালনারেবল।
সৎ ডিসিশন ট্রি
অনুমান না করে এটা কীভাবে বের করবেন তা এখানে:
-
আপনার অ্যাপ কি এখন যা করছে সেটা ব্যাকএন্ড ছাড়াই করতে পারে? যদি হ্যাঁ হয়, ২ নম্বরে যান। যদি না হয়, আপনার ইতিমধ্যেই একটা ব্যাকএন্ড আছে (বা একটা বানাতে হবে)। এগিয়ে যান। (আপনার AI-তৈরি অ্যাপের হয়তো ইতিমধ্যেই একটা আছে।)
-
আপনি যা যোগ করতে চান সেটা কি এমন কিছু যা ব্রাউজার মৌলিকভাবে করতে পারে না? টাকা কাটা? অবশ্যই। ইমেইল পাঠানো? হ্যাঁ। সিক্রেট কী দিয়ে বাইরের API কল করা? হ্যাঁ। আর কিছু? সম্ভবত না। যদি এটা এমন কিছু হয় যা ব্রাউজার করতে পারত কিন্তু স্লো, ৩ নম্বরে যান। যদি এটা এমন কিছু হয় যা ব্রাউজার পারে না, আপনার ব্যাকএন্ড দরকার।
-
আসল সমস্যাটা ঠিক করলে স্লোনেসটা কি চলে যায়? কম জিনিস লোড করা? স্মার্টার ক্যাশিং? রিকোয়েস্ট ব্যাচ করা? আরও ভালো ডেটাবেস ব্যবহার করা? ট্রিকটা হলো: প্রথমে বের করুন আসলে কী স্লো। সুস্পষ্ট সমাধানগুলো শেষ করার পরই শুধু ব্যাকএন্ড যোগ করুন। কারণ ব্যাকএন্ড যোগ করা একটা স্লো অ্যালগরিদম ঠিক করে না — এটা শুধু সেটাকে অন্য একটা মেশিনে সরিয়ে দেয়।
-
আপনি ব্যাকএন্ড যোগ করলে সেটা কি আসলেই সমস্যা সমাধান করে? এটাই ফাঁদ। আপনি “পারফরম্যান্স উন্নত করতে” ব্যাকএন্ড যোগ করলেন, আর লেটেন্সি খারাপ হয়ে গেল কারণ এখন আপনি আপনার ব্যাকএন্ডে নেটওয়ার্ক কল করছেন, যেটা ডেটাবেসে নেটওয়ার্ক কল করছে, যেটা আপনি ব্রাউজার থেকে এক ধাপেই করতে পারতেন। আগে মাপুন। পরে যোগ করুন।
আপনার পুরো ব্যাকএন্ড দরকার, নাকি শুধু একটা ক্লাউড ফাংশন?
আপনি যা চান সেটা যদি একটা মাত্র ফাংশনের ভেতর ধরে যায় যেটা কয়েক সেকেন্ড চলে তারপর থেমে যায়, তাহলে আপনার একটা ক্লাউড ফাংশন দরকার, পুরো ব্যাকএন্ড না। এখানে স্মেল টেস্টটা দেখুন।
ভাবুন আপনি ব্যাকএন্ডকে কী করাতে চান। এখন কল্পনা করুন সেটাকে একটা মাত্র JavaScript ফাংশন (হয়তো ১০০ লাইন) হিসেবে লিখছেন যেটা কল হলে কয়েক সেকেন্ড চলে, তারপর থেমে যায়। এটা কি সেই বাক্সে ধরে যায়?
- পেমেন্ট ওয়েবহুক সামলানো? হ্যাঁ।
- একটা ওয়েলকাম ইমেইল পাঠানো? হ্যাঁ।
- আপলোডের আগে একটা ফাইল ভ্যালিডেট করা? হ্যাঁ।
- একটা রাতের রিপোর্ট চালানো? হ্যাঁ (কিছুটা — আপনি এটাকে নির্দিষ্ট সময়ে কল করবেন)।
যদি উত্তর হ্যাঁ হয়, আপনার “সত্যিকারের ব্যাকএন্ড” দরকার নেই। আপনার একটা ক্লাউড ফাংশন দরকার। Vercel, AWS Lambda, Google Cloud Functions, যেটাই হোক। এটা সস্তা, সহজ, আর আপনাকে একটা সার্ভার লালন-পালন করতে হয় না।
যদি উত্তর না হয় — যদি আপনার এমন কিছু দরকার হয় যেটা সবসময় চলে, হাজার হাজার রিকোয়েস্ট সামলায়, জটিল বিজনেস লজিকসহ — তাহলে আপনি একটা সত্যিকারের ব্যাকএন্ডের কথা ভাবছেন আর সেই আলোচনাটা বেশি গুরুত্বপূর্ণ। কিন্তু সত্যি বলতে, AI দিয়ে মানুষ যেসব অ্যাপ বানায় তার জন্য এটা বিরল। “ব্যাকএন্ড কাজ” বলে যা মনে হয় তার বেশিরভাগই আসলে “এই API কল করো” বা “এই ডেটা সেভ করো,” যেটা আপনার বিল্ডার সম্ভবত ইতিমধ্যেই সামলাচ্ছে।
আপনার বিল্ডারকে যে আসল প্রশ্নটা জিজ্ঞেস করা উচিত
কিছু যোগ করার আগে, আপনার বিল্ডারকে একটা প্রশ্ন জিজ্ঞেস করুন: এখন এমন কী ভাঙা আছে যেটা একটা ব্যাকএন্ড আসলেই ঠিক করবে?
যদি তাদের কাছে একটা নির্দিষ্ট উত্তর থাকে — “আমাদের টাকা কাটতে হবে,” “আমাদের সিক্রেট কী দিয়ে একটা API কল করতে হবে,” “আমাদের ডেটা কনটেনশন আছে” — দারুণ। আপনি জানেন কী বানাতে যাচ্ছেন।
যদি উত্তর হয় “আসল অ্যাপের তো ব্যাকএন্ড থাকে,” সেটা একটা অনুভূতি, কারণ না। এটা সেই একই অনুভূতি যা আপনাকে এমন একটা অ্যাপে ইউজার অ্যাকাউন্ট যোগ করাতে চায় যেটা কেউ শেয়ার করে না, বা পনেরোটা টেবিলের একটা ডেটাবেস স্কিমা যখন আসলে আপনার তিনটে জিনিস আছে। এটা স্কোপ ক্রিপের গন্ধ, ব্যাকএন্ডের টুপি পরে।
বেশিরভাগ সফল একক ব্যক্তির অ্যাপে আপনার কল্পনার মতো “সত্যিকারের ব্যাকএন্ড” নেই। তাদের একটা ডেটাবেস আছে (আপনার বিল্ডার সম্ভবত সেটা সেট আপ করেছে)। হয়তো নির্দিষ্ট সময়ে চলা একটা-দুটো ফাংশন আছে। কিন্তু ব্রাউজারে চলা কোডটাই কাজ করে, সরাসরি ডেটাবেসের সাথে কথা বলে, আর মাঝখানে কোনো লেয়ার ছাড়াই ফিচার শিপ করে।
আপনার অ্যাপ সম্ভবত যেমন আছে তেমনই ঠিক আছে। যে অনুভূতিটা বলছে এটা ঠিক না, সেটা সাধারণত উচ্চাকাঙ্ক্ষার শব্দ, সত্যের না। ব্যাকএন্ড যোগ করুন যখন এটা একটা আসল সমস্যা সমাধান করে, আপনার মনে হচ্ছে বলে না।
পরেরবার যখন কোনো ফিচার নিয়ে ভাবছেন, জিজ্ঞেস করুন: এটা কি এমন কিছু যা ব্রাউজার মৌলিকভাবে করতে পারে না? নাকি এটা এমন কিছু যা আমার মনে হচ্ছে ব্যাকএন্ড দরকার কারণ শব্দটা যথেষ্ট শুনেছি? এই দুটো প্রশ্নের উত্তর আলাদা, আর তার মধ্যে শুধু একটাই আপনার কাজ।