1021 คำ
5 นาที
IT Foundation EP.05 — Web Technologies
สารบัญ

Series: IT Foundation — พื้นฐาน IT สำหรับยุค AI (ภาษาคน)

  1. EP.01 — รากฐานคอมพิวเตอร์
  2. EP.02 — พื้นฐาน Computer Science
  3. EP.03 — ซอฟต์แวร์ทำงานยังไง
  4. EP.04 — Architectures
  5. EP.05 — Web Technologies ← คุณอยู่ตรงนี้
  6. EP.06 — Security พื้นฐาน
  7. EP.07 — Performance & Testing
  8. EP.08 — Dev/Deploy/Ops
  9. EP.09 — Security ขั้นสูง
  10. EP.10 — Project Management

เกริ่น#

ตอนที่แล้ว (EP.04) เราคุยกันเรื่อง Architecture — แบบแปลนของระบบ ว่าจะสร้างเป็นบ้านเดี่ยวก้อนเดียว (Monolith) หรือเป็นหมู่บ้านที่มีหลายหลัง (Microservices) จะเก็บข้อมูลไว้ในตู้เซฟแบบตาราง (SQL) หรือในกล่องเอกสาร (NoSQL) แบบแปลนบอกเรา “โครงร่าง” ของร้าน

ตอนนี้เราจะเปลี่ยนจากสถาปนิกเป็นผู้จัดการร้านแล้วครับ — เพราะพอมีแบบแปลนแล้ว ก็ถึงเวลาเลือก “เครื่องมือ” ที่ช่างจะใช้จริงๆ ปัญหาคือร้านเครื่องมือในโลก IT ใหญ่มาก เดินเข้าไปแล้ววิงเวียน เต็มไปด้วยชื่อแปลกๆ ทั้ง React, Vue, Node.js, Python, Go, REST, GraphQL… ฟังเหมือนชื่อตัวละครในเกม

ตอนนี้ผมจะพาทัวร์โกดังเครื่องมือ แบ่งเป็น 3 โซนใหญ่ — เครื่องมือตกแต่งหน้าร้าน (Frontend), เครื่องจักรหลังบ้าน (Backend), และกล่องพัสดุที่วิ่งไปมาระหว่างสองฝั่ง (Data Flow) จบตอนนี้คุณจะแยกออกว่าเครื่องมือไหนทำอะไร และทำไมทีม dev ถึงทะเลาะกันเรื่องเลือกเครื่องมือได้ทั้งวัน

Frontend Technologies — เครื่องมือหน้าบ้าน#

Code editor แสดง React JSX + Tailwind class

หน้าตา source code ของเว็บสมัยใหม่ — JSX + Tailwind syntax บน dark theme editor

Frontend คือทุกอย่างที่ลูกค้าเห็นและสัมผัสผ่านเบราว์เซอร์ เปรียบเหมือน “การตกแต่งภายในร้าน” — ป้ายราคา การจัดวาง สีผนัง ไฟ ดนตรี ทุกอย่างที่ทำให้ลูกค้ารู้สึก “อยากอยู่ต่อ” หรือ “อยากกดปิดแท็บ”

วัตถุดิบดั้งเดิม — HTML / CSS / JavaScript#

3 สิ่งนี้คือรากฐาน อะไรที่เรียกว่าเว็บเบราว์เซอร์เปิดได้ ล้วนลงมาเหลือ 3 ตัวนี้หมด

  • HTML เปรียบเหมือน อิฐและโครงสร้างบ้าน บอกว่า “ตรงนี้เป็นหัวข้อ ตรงนี้เป็นปุ่ม ตรงนี้เป็นรูป” เช่นเขียน <button>กดสั่งซื้อ</button> ก็จะได้ปุ่มหนึ่งอัน
  • CSS เปรียบเหมือน สี วอลเปเปอร์ เฟอร์นิเจอร์ บอกว่า “ปุ่มนั้นเป็นสีแดง ตัวหนังสือใหญ่ ขอบมน” เช่น button { background-color: red; font-size: 20px; }
  • JavaScript (JS) เปรียบเหมือน ระบบไฟฟ้าและกลไก บอกว่า “พอกดปุ่ม ให้เด้งข้อความขอบคุณขึ้นมา” เช่น button.onclick = () => alert("ขอบคุณ!");

ถ้าร้านคุณเล็ก HTML+CSS+JS เขียนดิบๆ ก็พอแล้ว แต่พอร้านใหญ่ขึ้น มีหลายสิบหน้า หลายสิบปุ่ม มีทีม 10 คนช่วยกันเขียน มันจะกลายเป็น spaghetti code — เส้นก๋วยเตี๋ยวพันกัน แก้ตรงนี้พังตรงโน้น หาเจ้าของโค้ดไม่เจอ นี่คือเหตุผลที่เราต้องขยับไปใช้ Framework

Keywords ที่ต้องคุ้น: HTML5, CSS3, ES6+ (JavaScript รุ่นใหม่), DOM (Document Object Model — โครงสร้างต้นไม้ของหน้าเว็บ)

Modern Frameworks — React / Vue / Angular (ผนังสำเร็จรูป)#

Framework คือชุดเครื่องมือที่ช่วยให้เราเขียนเว็บเป็นระเบียบ หัวใจของมันคือ Component — การรวม HTML+CSS+JS ของปุ่มหรือชิ้นส่วนหนึ่งเป็นก้อนเดียว แล้วก๊อปเอาไปใช้ซ้ำได้

เปรียบเหมือนการสร้างบ้านด้วย เฟอร์นิเจอร์ IKEA หรือ Lego — แทนที่จะเลื่อยไม้ทำโซฟาใหม่ทุกห้อง เราสร้างแม่พิมพ์โซฟาไว้ 1 ตัว แล้วยกไปวางห้องไหนก็ได้ เปลี่ยนสีเปลี่ยนขนาดตามโอกาส

ตัวอย่าง Component ใน React หน้าตาแบบนี้

<ProductCard name="iPhone 15" price="30,000" />

เห็นมั้ยครับ 1 บรรทัด ได้การ์ดสินค้าพร้อมรูป ราคา ปุ่มกดซื้อครบ ถ้าหน้าเว็บมีสินค้า 50 ชิ้น ก็เขียน 50 บรรทัด จบ

ตัวเลือก Framework ยอดนิยมสามตัว:

  • React — ยืดหยุ่นที่สุด นิยมที่สุดในโลก ทีม dev หาง่าย มีปัญหาอะไรกูเกิลเจอคำตอบเกือบทุกครั้ง ถือเป็น safe choice ของธุรกิจส่วนใหญ่
  • Vue.js — ง่ายกว่า เบากว่า เรียนรู้เร็ว เหมาะกับโปรเจกต์เล็กถึงกลาง หรือทีมที่ไม่อยากคิดเยอะ
  • Angular — เป็นระเบียบจัด มีกฎเกณฑ์ชัดเจน เหมาะกับองค์กรใหญ่ ธนาคาร บริษัทประกัน ที่ต้องการความ enterprise

Keywords: Components, Virtual DOM, SPA (Single Page Application — เว็บที่ไม่รีเฟรชทั้งหน้าเวลากดลิงก์), JSX, Props

Full-Stack Frameworks — Next.js (ครบวงจร)#

ยุคใหม่มีเทรนด์ที่น่าสนใจ — เครื่องมือตัวเดียวทำได้ทั้งหน้าบ้านและหลังบ้านในที่เดียว ตัวดังที่สุดคือ Next.js

ปัญหาที่ Next.js แก้ให้คือ — เว็บ React ยุคแรกๆ Google มองไม่เห็น เพราะเว็บโหลดเสร็จแล้วค่อยให้ JavaScript ไปสร้างเนื้อหาที่หลัง พอ Google ส่งบอทมาอ่าน บอทเห็นหน้าเปล่าๆ ก็คิดว่าเว็บไม่มีอะไร ไม่ติดอันดับ

Next.js แก้ด้วยเทคนิคชื่อ SSR (Server-Side Rendering) — ให้เซิร์ฟเวอร์ประกอบหน้าเว็บเสร็จก่อนส่งให้เบราว์เซอร์ พอ Google มาอ่านก็เห็นเนื้อหาครบเลย ไม่ต้องรอ

อีกข้อดีคือ file-based routing — สร้างไฟล์ชื่อ about.js ไว้ในโฟลเดอร์ /pages/ ปุ๊บ ได้ URL www.website.com/about ปั๊บ ไม่ต้องไปเขียนตารางเส้นทางเองให้ปวดหัว

Management view: ถ้าทำเว็บ E-commerce ที่ต้องแข่งกันติด Google หน้าแรก หรือเว็บสื่อที่ขายด้วย SEO — Next.js คือตัวเลือกที่เกือบจะไม่มีคู่แข่งในตอนนี้

Keywords: SSR, SSG (Static Site Generation — สร้างหน้าเว็บไว้ล่วงหน้าเป็นไฟล์), SEO Friendly, Hydration

State Management — Redux / Zustand (ความจำระยะสั้น)#

ปัญหาที่หลายคนนึกไม่ถึง — พอเว็บซับซ้อนขึ้น มีหลายหน้า หลายปุ่ม หลายส่วนที่ต้องรู้ข้อมูลเดียวกัน (เช่น “ลูกค้าที่ล็อกอินคือใคร” “ในตะกร้ามีกี่ชิ้น”) ถ้าต่างส่วนต่างเก็บข้อมูลของตัวเอง ข้อมูลจะ ตีกัน

เคสคลาสสิก: หน้าแรกบอก “ของชิ้นนี้มีสต็อก” แต่ตอนไปกดจ่ายเงิน หน้าเช็กเอาท์บอก “ของหมดแล้ว” ลูกค้ามองหน้ากันในครอบครัว กำลังจะจ่ายเงินอยู่ดีๆ เจอของหายไป

State Management คือ กระดานไวท์บอร์ดกลางห้องครัว — ทุกคนเดินมาดูได้ว่าข้อมูลล่าสุดเป็นยังไง ใครแก้กระดาน คนอื่นเห็นทันที ไม่ต้องกระซิบบอกกันทีละคน

ตัวอย่างข้อมูลบนกระดาน:

{
"user": { "name": "Somchai" },
"cart": { "items": 3, "total": 1500 }
}

เครื่องมือยอดนิยม: Redux (ดั้งเดิม จริงจัง มีพิธีกรรมเยอะ), Zustand (เบาและทันสมัย), Context API (ของที่มากับ React อยู่แล้ว)

Keywords: Global State, Store, Single Source of Truth

Accessibility & SEO — มาตรฐานที่ห้ามข้าม#

ร้านในโลกจริง กฎหมายบังคับให้มีทางลาดสำหรับรถเข็น มีป้ายชัดเจน ห้ามกีดกันคนพิการ ในโลกเว็บก็เหมือนกัน

  • Accessibility (a11y) — “ทางลาดคนพิการ” ของเว็บ ทำให้คนตาบอด คนที่ใช้แอปอ่านหน้าจอ (screen reader) คนที่ใช้แต่คีย์บอร์ด เข้าถึงเว็บเราได้ หลายประเทศมีกฎหมายบังคับ (เช่น ADA ในอเมริกา) ถ้าไม่ทำ โดนฟ้องได้จริง
  • SEO — “ป้ายโฆษณาหน้าร้าน” ที่เขียนให้บอท Google อ่านออก ถ้าบอทเข้าใจว่าเว็บเราเกี่ยวกับอะไร Google ก็ส่งคนมาหาเราฟรี

ตัวอย่างง่ายๆ:

  • โค้ดแย่: <div>ปุ่มกด</div> — Google กับ screen reader ไม่รู้ว่าเป็นปุ่ม
  • โค้ดดี: <button aria-label="Submit Order">ยืนยัน</button> — บอกชัดว่าเป็นปุ่มและปุ่มนี้ทำอะไร

Keywords: WCAG (มาตรฐานคนพิการระดับโลก), Semantic HTML, Meta Tags, Alt Text, ARIA Attributes

Backend Technologies — เครื่องจักรหลังบ้าน#

ถ้า Frontend คือหน้าร้าน Backend คือ ครัว โกดัง ห้องบัญชี ระบบไฟฟ้า ที่ลูกค้ามองไม่เห็น แต่ถ้าไม่มี ร้านเสิร์ฟอาหารจริงๆ ไม่ได้

ภาษาของเซิร์ฟเวอร์ — Node.js / Python / Go#

เวลาคนพูดว่า “ทีม backend เขียนด้วยภาษาอะไร” เขาหมายถึง 3 ค่ายหลักที่ครอบครองตลาด

Node.js (มักคู่กับ Express) — ใช้ภาษาเดียวกับหน้าบ้าน คือ JavaScript ข้อดีคือทีมเล็กเขียนทั้งหน้าบ้านหลังบ้านได้ด้วยภาษาเดียว สลับคนไปมาได้ เป็นที่นิยมมากในสาย Startup

app.get('/', (req, res) => res.send('Hello World'))

Python (มักคู่กับ FastAPI หรือ Django) — อ่านง่ายเหมือนภาษาอังกฤษ เด็กมัธยมก็เดาได้ว่าโค้ดกำลังทำอะไร เป็นที่นิยมสุดๆ ในสาย AI / Data Science เพราะเครื่องมือ AI เกือบทั้งโลกเขียนด้วย Python

def read_root(): return {"msg": "Hello World"}

Go (Golang) — โค้ดเขียนยากกว่าสองตัวบน แต่รันเร็วระดับสายฟ้า จัดการ traffic จำนวนมหาศาลได้สบาย เป็นที่นิยมในสาย Finance, High-Load System, บริษัทที่ต้องการประสิทธิภาพสุดๆ (Google, Uber, Cloudflare ใช้เยอะ)

Management view: ไม่มีภาษาไหนถูกหรือผิด เลือกตาม 2 ข้อ — (1) ทีมคุณถนัดอะไร (2) โจทย์ธุรกิจต้องการอะไร ถ้าทีมเล็ก อยากได้เร็ว — Node.js ถ้าจะเน้น AI — Python ถ้ารีดประสิทธิภาพต้องการ — Go

Keywords: Runtime Environment, Asynchronous I/O, Concurrency, Strong Typing vs Dynamic Typing

API Technology — ท่อส่งข้อมูลระหว่างหน้าบ้านกับหลังบ้าน#

API คือวิธีที่ Frontend “สั่งของ” จาก Backend ลองเปรียบเทียบแบบภาษาร้านอาหาร

REST API — เมนูตามสั่ง คือมาตรฐานโลก ใช้กันมาเกือบ 20 ปีแล้ว จุดอ่อนคือบางทีขอของแค่ชิ้นเดียว แต่ครัวส่งมาเป็นชุดใหญ่ เรียกว่า over-fetching — เช่นขอแค่ “ชื่อลูกค้า” ครัวส่งมาทั้งชื่อ นามสกุล ที่อยู่ เบอร์โทร วันเกิด รหัสสมาชิก ยาวเป็นหางว่าว

GraphQL — บุฟเฟต์ตักเอง คือ API แบบใหม่ที่ลูกค้าระบุได้เป๊ะๆ ว่าต้องการฟิลด์ไหนบ้าง ขอแค่ชื่อก็ได้แค่ชื่อ

query { user { name } }

ข้อดี: ประหยัด bandwidth ยืดหยุ่นสูง — ข้อเสีย: เซ็ตอัพซับซ้อนกว่า ทีมต้องเก่งขึ้น

Webhooks — กริ่งหน้าบ้าน คืออีกโมเดลหนึ่ง แทนที่ frontend จะถามซ้ำๆ ว่า “ของมาหรือยัง ของมาหรือยัง” ระบบภายนอกจะกดกริ่งบอกเราเองเมื่อมีอะไรเกิดขึ้น เช่น Stripe แจ้งเตือนเมื่อลูกค้าโอนเงินเสร็จ, GitHub แจ้งเตือนเมื่อมีคน push โค้ดใหม่

Keywords: Endpoint, HTTP Verbs (GET/POST/PUT/DELETE), Over-fetching, Schema, Event-Driven

Job Schedulers — Cron Jobs (นาฬิกาปลุกอัตโนมัติ)#

บางงานไม่ต้องรอลูกค้ากดปุ่ม แต่ต้องทำตามเวลาเอง — สรุปยอดขายทุกเที่ยงคืน, ล้างข้อมูลเก่าทุกอาทิตย์, ส่งอีเมลต่ออายุสมาชิกทุกเดือน งานเหล่านี้เราใช้ Cron Job

Cron Job คือนาฬิกาปลุกในระบบ ตั้งไว้ว่าจะปลุกกี่โมง กี่วัน แล้วพอถึงเวลาระบบจะเรียกงานนั้นขึ้นมาทำเองโดยอัตโนมัติ

ตัวอย่างรหัส Cron (อ่านยากนิดหน่อยแต่ทรงพลัง):

0 0 * * * = ทำทุกเที่ยงคืน
0 */2 * * * = ทำทุก 2 ชั่วโมง
0 9 * * 1 = ทำทุกจันทร์เช้า 9 โมง

Use case ในชีวิตจริง: สรุปยอดขายส่ง Line กลุ่มผู้บริหาร, backup database ทุกคืน, ดึงราคาหุ้นทุก 5 นาที, ส่งใบแจ้งหนี้อัตโนมัติ

Keywords: Cron Expression, Background Worker, Task Queue, Automation

Data Flow & Integrity — การไหลของข้อมูลและความถูกต้อง#

เครื่องมือเก่งแค่ไหน ถ้าข้อมูลที่วิ่งไปมาระหว่างกันผิดเพี้ยน ก็จบ โซนนี้คือเรื่องของ กล่องพัสดุที่วิ่งไปมา และ กฎการส่งของ

JSON — กล่องพัสดุสากล#

JSON (อ่านว่า “เจสัน”) คือรูปแบบกล่องพัสดุที่ Frontend กับ Backend ใช้คุยกัน — เกือบทั้งโลกของเว็บใช้ตัวนี้

ทำไมถึงมาตรฐาน? เพราะ (1) น้ำหนักเบา (2) มนุษย์อ่านออกได้ (3) ทุกภาษาโปรแกรมมิงอ่านเขียนได้

ตัวอย่างกล่องพัสดุหนึ่งใบที่เก็บ “ออเดอร์”:

{
"orderID": "ORD-999",
"customer": "Somsri",
"isPaid": true,
"items": ["Lipstick", "Powder"]
}

อ่านรู้เรื่องทันทีใช่มั้ยครับ — นี่คือเหตุผลที่ JSON ครองโลก 20 ปี ยังไม่เห็นคู่แข่ง

Keywords: Key-Value Pair, Serialization (แปลงข้อมูลให้อยู่ในกล่อง), Parsing (แกะกล่อง), Schema Validation

Integrity Challenges — ปัญหาคลาสสิกสองเรื่อง#

จุดที่ทีม dev มักพลาดและกลายเป็นข่าวใหญ่ มักมาจากสองเรื่องนี้

Race Condition — แย่งกันเขียนพร้อมกัน

จินตนาการว่ามีสินค้าชิ้นสุดท้าย ลูกค้า 2 คนกดซื้อพร้อมกันในเสี้ยววินาทีเดียวกัน ถ้าระบบไม่ล็อก จะเกิดอะไร? — ทั้งคู่ได้รับ “สั่งซื้อสำเร็จ” แต่ของมีจริงแค่ชิ้นเดียว

เคสนี้เกิดจริงตลอด โดยเฉพาะในโปรโมชันที่คนแห่กดพร้อมกัน ทางแก้คือใช้ Queue (คิว — เข้าแถวก่อนหลัง) หรือ Locking (ล็อกฐานข้อมูลชั่วคราว ให้คนแรกที่มาถึงได้ก่อน)

Idempotency — กฎการกดซ้ำ (สำคัญสุดๆ)

เคสที่ใครก็เคยเจอ — เน็ตค้าง กดปุ่ม “จ่ายเงิน” แล้วหน้าจอแข็ง เลยกดย้ำอีก 2-3 ครั้ง ถ้าระบบไม่ฉลาด ลูกค้าอาจถูกตัดเงินซ้ำ 2-3 รอบ

ทางแก้คือใช้ Idempotency Key — ทุกคำขอจ่ายเงินแนบรหัสประจำคำขอ (เช่น TXN-123) มาด้วย ระบบจำรหัสนี้ไว้ ถ้ามีคำขอที่แนบรหัสเดิมเข้ามาซ้ำ — ตอบกลับผลเดิมทันที ไม่ทำงานซ้ำ

Request 1 (Key: TXN-123) → ตัดเงิน 500 → สำเร็จ
Request 2 (Key: TXN-123 อีกรอบ) → ระบบจำได้ → คืนผลเดิม "สำเร็จ" แต่ไม่ตัดเงินซ้ำ

Management view: ถ้าธุรกิจของคุณเกี่ยวกับ “เงิน” หรือ “สต็อก” สองเรื่องนี้ต้องทดสอบทุกครั้งก่อนออกฟีเจอร์ใหม่ พลาดทีเดียวกลายเป็นข่าวได้

Keywords: ACID, Transaction, Locking, Idempotency Key, Data Consistency

Recap — เลือกวัสดุยังไงให้เหมาะกับงาน#

เมนูเซตแนะนำ (Tech Stack Sets)#

เพื่อให้เห็นภาพ ผมจัดเซตให้ดู 3 เซต

Set A — Startup Speed: Next.js + Node.js

  • ใช้ JavaScript ภาษาเดียวตลอดระบบ ทีมเล็ก สลับคนง่าย เริ่มเร็ว
  • เหมาะกับ: MVP, SaaS startup, เว็บ e-commerce ขนาดกลาง

Set B — Enterprise Stable: Angular + Java หรือ Go

  • โครงสร้างแข็ง มีกฎเกณฑ์ เสถียรกับ transaction มหาศาล
  • เหมาะกับ: ธนาคาร ประกัน บริษัทที่ต้องการเสถียรภาพระยะยาว

Set C — AI / Data Driven: React + Python (FastAPI/Django)

  • เชื่อมกับโมเดล AI ง่ายที่สุด เพราะเครื่องมือ AI ส่วนใหญ่อยู่ฝั่ง Python
  • เหมาะกับ: เว็บที่มีฟีเจอร์ AI, dashboard ข้อมูล, ระบบวิเคราะห์

Keywords ที่คุณจะเห็นบ่อย: MEAN Stack, MERN Stack, LAMP Stack (ชื่อเก่าของชุดเทคสแตกยอดนิยมในยุคต่างๆ)

สิ่งที่ผู้นำต้องจำ#

  1. No Silver Bullet — ไม่มีเครื่องมือไหนดีที่สุด มีแต่ “เหมาะที่สุดกับงานเรา” อย่าเชื่อคนที่บอกว่า “X ดีกว่า Y เด็ดขาด” เพราะเขากำลังขายของให้คุณ

  2. Code Quality สังเกตได้โดยไม่ต้องอ่านโค้ด — ลองเปิดดูโครงสร้างไฟล์ ถ้าเจอไฟล์เดียว 5,000 บรรทัด หรือชื่อไฟล์แบบ utils_final_v2_new.js นั่นคือสัญญาณของ Technical Debt (หนี้ทางเทคนิคที่สะสมไว้) ไม่ใช่เรื่องผิด แต่ต้องรู้ว่ามีอยู่

  3. Accessibility ไม่ใช่เรื่องบุญกุศล — เป็นมาตรฐานโลกและบางประเทศเป็นกฎหมาย อย่าให้ทีม dev ตัดออกเพื่อประหยัดเวลา

  4. ถ้าระบบแตะ “เงิน” หรือ “สต็อก” — ต้องเทส Race Condition และ Idempotency เสมอ นี่ไม่ใช่ข้อเสนอแนะ นี่คือเงื่อนไขบังคับ

Keywords: Technical Debt, Code Review, Documentation

ปิดตอน#

จบ EP.05 เรามีภาพครบแล้ว — EP.03 เราคุยเรื่องซอฟต์แวร์ทำงานยังไง (ร้านอาหาร), EP.04 เรื่อง architecture (แผนผังสาขา), EP.05 นี้ เรื่องเครื่องมือในครัว ทั้งฝั่งหน้าร้าน หลังบ้าน และกล่องพัสดุที่วิ่งไปมา

ร้านเราครบแล้วครับ เปิดขายได้ ลูกค้าเริ่มเข้ามา แต่ทันทีที่ร้านเริ่มดัง… โจรก็เริ่มจ้อง

ตอนหน้าเราจะคุยเรื่องภัยคุกคามและการป้องกันพื้นฐาน — SQL Injection, XSS, Phishing, รหัสผ่านที่ถูกต้อง ทำไมทีมคุณไม่ควรเก็บรหัสผ่านเป็นข้อความธรรมดา และทำไม “แฮ็ก” ส่วนใหญ่เกิดจากความขี้เกียจของคน ไม่ใช่เทคนิคของแฮกเกอร์

EP.06 — Security พื้นฐาน