Thuta Learning
Cloud & Deployment
BasicDevOps & Toolsbeginner

Local Development vs Production

ဒီခန်းပြီးရင် ဘာတတ်သွားမလဲ

  • Local Development vs Production concept ကို နားလည်ရှင်းပြနိုင်ရန်
  • Diagram ကို ဖတ်ပြီး architecture ထဲမှာ request/data ဘယ်လိုစီးဆင်းသလဲ ခြေရာခံနိုင်ရန်
  • ကိုယ့် project အတွက် ဘယ်လို ဆုံးဖြတ်သင့်သလဲ ရှင်းပြနိုင်ရန်

နားလည်ထားရမယ့် အချက်

Localhost ဆိုတာ software ရေးဖို့ ကမ္ဘာပေါ်မှာ အလုံခြုံဆုံး နေရာပါ။ ကိုယ့် machine ပေါ်မှာ project run နေချိန် ကိုယ်တစ်ယောက်တည်းသာ မြင်ရပြီး crash ဖြစ်ရင်တောင် ပြန် restart လုပ်ရုံပါပဲ။

အချက်Local vs Production
VisibilityLocal: ကိုယ်တစ်ယောက်တည်း ကြည့်ရတယ်။ Production: အင်တာနက်ပေါ်က ဘယ်သူမဆို ရောက်နိုင်တယ်။
Risk of failureLocal: crash ဖြစ်ရင် restart ရုံပါပဲ။ Production: outage, အရောင်းဆုံးရှုံးမှု, data ပေါက်ကြားမှုတောင် ဖြစ်နိုင်တယ်။
DataLocal: fake (သို့) sample data။ Production: user အစစ်တွေရဲ့ data။

ဒီကွာဟချက်ကနေ software မှာ အသုံးအများဆုံး စကားစုတစ်ခု ပေါ်လာတာပါ — "my machine မှာတော့ အလုပ်လုပ်တယ်"။ Environment variable, OS, config, network latency, traffic ပမာဏ ကွာခြားချက်တွေကြောင့် code က production မှာ ကွာခြားစွာ ကျင့်ဆောင်နိုင်ပါတယ်။

Production ကလည်း localhost မှာ မလိုအပ်တဲ့ HTTPS, monitoring, logging, reliability တွေကို တောင်းဆိုပါတယ်။ ဒါက ကြောက်စရာ မဟုတ်ဘဲ လေးစားထိုက်တာကို ပြသချင်တာပါ။ ဒီ lesson ဟာ ဒီ course တစ်ခုလုံးမှာ ထပ်ကြာအောင် ပြန်တွေ့ရမယ့် သတိပေးချက်ကို စိုက်ထူပေးပါတယ်။

text
LOCALHOST VS PRODUCTION
-----------------------
 DEVELOPER'S LAPTOP                    THE INTERNET
 -------------------                   -------------
 http://localhost:3000                 https://thutatech.com
 only you can see it                   anyone can reach it
 crashing is fine, just restart        must stay up and secure
 fake or sample data                   real user data

လက်တွေ့ scenario နဲ့ ချိတ်ကြည့်မယ်

အောက်က code က software ရေးရာမှာ ကျယ်ကျယ်ပြန့်ပြန့် အသုံးပြုတဲ့ pattern တစ်ခုရဲ့ အသေးဆုံး version ကို ပြပါတယ် — app ဟာ ဘယ် environment မှာ run နေလဲ ဖတ်ပြီး၊ အဲဒီအဖြေအပေါ် အခြေခံပြီး behavior ကို ပြောင်းလဲပေးခြင်း ဖြစ်ပါတယ်။ detectEnvironment function က platform ပေးထားတဲ့ special variable တစ်ခုကို စစ်ပြီး၊ variable မရှိရင် default value ကို ဘေးကင်းစွာ ပြန်ပေးပါတယ်။ getApiUrl ကတော့ အဖြေအပေါ်မူတည်ပြီး app က တကယ် live ဖြစ်နေရင် production API address ကို၊ မဟုတ်ရင် local address ကို ပြန်ပေးပါတယ်။

နောက်ဆုံးလိုင်းက verbose logging ဖြစ်ပြီး develop နေချိန် on ထား production မှာ off ထားသင့်တဲ့ setting အတိအကျပါပဲ၊ ရှေ့ lesson ကို ပဲ့တင်ထပ်နေတာပါ။ ဒီ function ကို defensive ပုံစံနဲ့ ရေးထားတာ သတိပြုပါ — environment variable mechanism ရှိမရှိ အရင်စစ်ပြီးမှ ထိတွေ့တာမို့ ဒီ mechanism မရှိတဲ့ context မှာ crash မဖြစ်ပါ။

Real project တွေမှာ ဒီလို defensive အလေ့အထက အလွန်အရေးကြီးပါတယ် — code တစ်ခုတည်းက execution context အမျိုးမျိုးမှာ run တတ်လို့ပါ။ ဒီ pattern သေးသေးလေး — environment ကို ရှာ၊ ပြီးမှ ပြောင်း — ဟာ database ဘယ်ခုနဲ့ ချိတ်မလဲ၊ secret ဘယ်ခုကို load လုပ်မလဲ၊ feature ဘယ်ခုကို production ရောက်မှ on လုပ်မလဲ ဆုံးဖြတ်ပုံနဲ့ တိုက်ရိုက် ကြီးထွားလာတာပါ။

Local != Production

Localhost မှာ အလုပ်လုပ်တာဟာ production မှာလည်း အလုပ်လုပ်မယ်လို့ ဘယ်တော့မှ မယူဆပါနှင့်။ Environment variable, network, database, security ကွာခြားချက်တွေက local မှာ ဘယ်တော့မှ မတွေ့ရဘဲ production ရောက်မှသာ ပေါ်လာတတ်ပါတယ်။

အတူတူ စမ်းရေးကြည့်မယ်

javascript
function detectEnvironment() {
  if (typeof process !== "undefined" && process.env && process.env.NODE_ENV) {
    return process.env.NODE_ENV;
  }
  return "development";
}

function getApiUrl(env) {
  return env === "production"
    ? "https://api.thutatech.com"
    : "http://localhost:4000";
}

const currentEnv = detectEnvironment();
console.log(`Detected environment: ${currentEnv}`);
console.log(`API URL: ${getApiUrl(currentEnv)}`);
console.log(`Verbose logging enabled: ${currentEnv !== "production"}`);
You should see
Detected environment: development
API URL: http://localhost:4000
Verbose logging enabled: true

၅ မိနစ် စမ်းကြည့်

detectEnvironment() က "production" ပြန်ပေးမယ်ဆိုရင် output က ဘယ်လို ပြောင်းမလဲ စာရွက်ပေါ်မှာ ကြိုတွက်ကြည့်ပါ၊ ပြီးမှ code ထဲက return "development" ကို return "production" လို့ ပြင်ပြီး run ပြီး စစ်ဆေးကြည့်ပါ။

သတိလေးတစ်ချက်

Localhost မှာ အလုပ်လုပ်တာကို production readiness ရဲ့ သက်သေအဖြစ် ယူဆမိခြင်း

Environment variable, database, network setting ကွာခြားချက်တွေကို deploy မလုပ်ခင် စစ်ဆေးဖို့ မေ့ကျန်ခြင်း

MDN: How do you set up a local testing server?Cloud & Deployment

ဒီနေရာမှာ လူအများမှားတတ်တယ်

  • Localhost မှာ အလုပ်လုပ်တာကို production readiness ရဲ့ သက်သေအဖြစ် ယူဆမိခြင်း
  • Environment variable, database, network setting ကွာခြားချက်တွေကို deploy မလုပ်ခင် စစ်ဆေးဖို့ မေ့ကျန်ခြင်း
  • Localhost မှာ အလုပ်လုပ်တာနဲ့ Production မှာ အလိုအလျောက်အလုပ်လုပ်မယ်လို့ မယူဆပါနှင့် — environment, network, database, security ကွာခြားချက်တွေ ရှိနိုင်ပါတယ်။

လေ့ကျင့်ခန်း

detectEnvironment() က "production" ပြန်ပေးမယ်ဆိုရင် output က ဘယ်လို ပြောင်းမလဲ စာရွက်ပေါ်မှာ ကြိုတွက်ကြည့်ပါ၊ ပြီးမှ code ထဲက return "development" ကို return "production" လို့ ပြင်ပြီး run ပြီး စစ်ဆေးကြည့်ပါ။

You'll know it worked when: Detected environment: development API URL: http://localhost:4000 Verbose logging enabled: true