Basic Full Stack Web Application Development (1145101)
Course Objectives & Evaluation Structure
15-Week Learning Roadmap
Client-Server, DNS/IP, HTTP/HTTPS, REST Concepts, HTTPie Desktop & CLI, System Design Overview
Django MVT Architecture, ORM & Normalization, Views/Templates, Forms, Session Management & Midterm
Web Security (XSS/CSRF), Django REST Framework (DRF), JWT Token Auth, CORS & Caching Framework
Podman Containerization, Multi-Container Stack (Nginx + Gunicorn + Django + Postgres) & Project Presentation
Week 1 Detailed Agenda
ภาพรวมรายวิชา ปรัชญาการพัฒนาเว็บ และการแบ่งส่วนความรับผิดชอบระหว่าง Client กับ Server
หมายเลขไอพี Port การแปลงชื่อโดเมน การทำ DNS Caching และการทำงานของไฟล์ Hosts
โครงสร้าง Request/Response, HTTP Methods, Status Codes และการเข้ารหัส SSL/TLS
ทดลองใช้ Browser DevTools (Network Tab), cURL และตั้งค่าสภาพแวดล้อมบนเครื่องส่วนบุคคล
Client-Server Architecture Fundamentals
Initiates Requests
Processes & Responds
Client Technology Stack & Responsibilities
กำหนดโครงสร้างและองค์ประกอบของเนื้อหาบนหน้าเว็บ เช่น หัวข้อ ข้อความ ฟอร์มป้อนข้อมูล และลิงก์เชื่อมโยง
จัดการตกแต่งความสวยงาม จัดวางเลย์เอาต์ ควบคุมสี ฟอนต์ และจัดทำ Responsive Design รองรับทุกขนาดหน้าจอ
สร้างความตื่นตัวและโต้ตอบ (Interactivity) จัดการ DOM และส่ง HTTP Request แบบ asynchronous ผ่าน Fetch API
Server-Side Layers & Infrastructure
ทำหน้าที่รับ HTTP Connection, จัดการ SSL Termination, บริการไฟล์ Static และส่งต่อ Request ให้กับแอปพลิเคชัน
ประมวลผลตรรกะของระบบ ตรวจสอบสิทธิ์ผู้ใช้ (Authentication/Authorization) และจัดการเส้นทาง URL (Routing)
จัดเก็บข้อมูลอย่างถาวรและเป็นระเบียบ ทำงานผ่าน Django ORM เพื่ออ่าน เขียน และอัปเดตข้อมูลในฐานข้อมูล
The Complete Web Request-Response Lifecycle
กระบวนการทั้งหมดนี้เกิดขึ้นอย่างรวดเร็ว (มักใช้เวลาน้อยกว่า 100 มิลลิวินาทีในสภาพแวดล้อมที่ได้รับการปรับแต่งประสิทธิภาพ)
Understanding Statelessness in Web Communications
เซิร์ฟเวอร์ จะไม่จดจำ Context หรือสถานะ ของคำร้องขอก่อนหน้าเลย แต่ละ HTTP Request ที่ส่งเข้ามาจะถูกประมวลผลเสมือนเป็นคำร้องขอแรกและแยกเป็นอิสระต่อกันโดยสมบูรณ์
หาก HTTP เป็น Stateless เราต้องใช้กลไกพิเศษในการส่งข้อมูลระบุตัวตนแนบไปกับ ทุกๆ Request
Network Addressing Essentials
เปรียบเสมือนบ้านเลขที่ของเครื่องคอมพิวเตอร์ในระบบเครือข่าย
192.168.1.1 หรือ 142.250.199.14127.0.0.1 (หมายถึงเครื่องตนเอง)เปรียบเสมือนประตูหมายเลขห้องที่ให้บริการแอปพลิเคชันเฉพาะทาง
Domain Name System -- The Internet's Directory
มนุษย์จดจำชื่อข้อความได้ดี เช่น app.demo.com แต่เครื่องคอมพิวเตอร์และอุปกรณ์เครือข่ายสื่อสารกันผ่านหมายเลข IP Address เช่น 192.0.2.1 ดังนั้น DNS จึงทำหน้าที่เป็น สมุดโทรศัพท์ของอินเทอร์เน็ต (Internet Phonebook) ในการแปลงชื่อโดเมนเป็นหมายเลขไอพี
Step-by-Step DNS Resolution Process
เบราว์เซอร์และระบบปฏิบัติการตรวจสอบในหน่วยความจำแคชของเครื่องตนเองก่อน
หากไม่พบ จะส่งคำถามไปยัง DNS ของ ISP หรือ Public DNS (เช่น 8.8.8.8, 1.1.1.1)
ชี้เบาะแสต่อไปยัง TLD Server ตามนามสกุลโดเมน (เช่น .com, .org, .th)
ชี้เบาะแสไปยัง Authoritative Name Server ที่ดูแลโดเมนนั้นๆ โดยตรง
คืนค่าหมายเลข IP Address จริงของโดเมนนั้นกลับมาให้เครื่อง Client
บันทึก IP ลงใน Cache แล้วสร้าง HTTP Request เชื่อมต่อไปยัง IP นั้นทันที
Optimization & Local Domain Overrides
การค้นหา DNS จะถูกบันทึกไว้ในหน่วยความจำชั่วคราวเพื่อลด Latency และลดภาระทราฟฟิกบนเครือข่าย โดยมีค่า TTL (Time-To-Live) กำหนดระยะเวลาการเก็บแคชก่อนสอบถามใหม่
นักพัฒนาสามารถกำหนดชื่อโดเมนจำลองในเครื่องตนเองสำหรับทดสอบ (Local Development) ผ่านไฟล์ระบบ:
System Architecture: From Domain Name to Web Server Request
app.demo.comHypertext Transfer Protocol Overview & Evolution
Anatomy of an HTTP Request Message
Standard HTTP Verbs & Operations
Anatomy of an HTTP Response Message
HTTP Status Code Classifications & Common Codes
Media Types & Data Payload Formats in Web Applications
ใช้ในเว็บแอปพลิเคชันแบบ Monolith ที่เซิร์ฟเวอร์ประมวลผลและส่งเนื้อหาเป็นโค้ด HTML เพื่อให้เบราว์เซอร์วาดหน้าจอทันที
มาตรฐานยอดนิยมสำหรับการสื่อสารระหว่าง RESTful API และ Frontend Framework / Mobile Apps ข้อมูลมีขนาดเล็ก ประมวลผลรวดเร็ว
ใช้เมื่อมีการส่งข้อมูลจากแบบฟอร์มที่มีการแนบไฟล์อัปโหลด เช่น รูปภาพ หรือเอกสารต่างๆ ร่วมกับข้อมูลข้อความ
Security Risks in Unencrypted Web Communications
ข้อมูลที่ส่งผ่าน HTTP จะเป็นข้อความเปล่า (Plain Text) ทำให้ผู้ไม่หวังดีบนเครือข่ายเดียวกันสามารถใช้เครื่องมือ Network Sniffer ดักดูรหัสผ่าน หรือข้อมูลบัตรเครดิตได้โดยง่าย
ผู้โจมตีสวมรอยเป็นตัวกลางระหว่าง Client และ Server เพื่อดักจับ ปลอมแปลง หรือแก้ไขข้อมูลที่รับส่งโดยที่ทั้งสองฝ่ายไม่รู้ตัว
คำร้องขอหรือผลลัพธ์สามารถถูกแก้ไขระหว่างทาง เช่น การฝังโฆษณา สคริปต์อันตราย (Malicious Scripts) หรือเปลี่ยนหมายเลขบัญชีโอนเงิน
Data Encryption in Transit
ใช้กุญแจคู่เป็นหลัก: Public Key (สำหรับเข้ารหัส) และ Private Key (สำหรับถอดรหัส)
ใช้กุญแจดอกเดียวกัน (Session Key) ทั้งในการเข้ารหัสและถอดรหัสข้อมูล
Public Key Infrastructure (PKI) & Server Authentication
ทำหน้าที่คล้ายบัตรประชาชนของเว็บไซต์ บรรจุข้อมูลชื่อโดเมน Public Key และวันหมดอายุ เพื่อยืนยันว่า Client กำลังคุยกับเซิร์ฟเวอร์ตัวจริง
หน่วยงานกลางที่เป็นที่น่าเชื่อถือ (เช่น Let's Encrypt, DigiCert) ทำหน้าที่ตรวจสอบความเป็นเจ้าของโดเมนและลงลายมือชื่อดิจิทัลรับรอง
เบราว์เซอร์จะตรวจสอบใบรับรองย้อนกลับไปถึง Root CA ที่ฝังอยู่ในระบบปฏิบัติการ หากห่วงโซ่ถูกต้อง ป้ายกุญแจเขียวจะปรากฏบนเบราว์เซอร์
Establishing a Secure Encrypted Connection
กระบวนการจับมือนี้เกิดขึ้นบน TCP Port 443 ก่อนที่จะเริ่มส่ง HTTP Request แรก
Protecting Web Applications via HTTP Response Headers
บังคับให้เบราว์เซอร์เข้าถึงเว็บไซต์ผ่าน HTTPS เท่านั้น โดยปฏิเสธการเชื่อมต่อแบบ HTTP ในอนาคต
จำกัดแหล่งที่มาของสคริปต์และสคริปต์ภายนอก ป้องกันการโจมตีประเภท Cross-Site Scripting (XSS)
ป้องกันไม่ให้เบราว์เซอร์สุ่มเดาประเภทไฟล์ (MIME-sniffing) นอกเหนือจากที่กำหนดใน Content-Type
ป้องกันไม่ให้หน้าเว็บถูกนำไปแสดงผลใน `<iframe>` เพื่อป้องกันการโจมตีประเภท Clickjacking
Inspection & Debugging Tools: GUI vs CLI
เครื่องมือตรวจสอบในตัวเบราว์เซอร์ (Chrome, Firefox, Edge)
เครื่องมือระดับคำสั่งบน Terminal
Visual Network Traffic Inspection & Analysis
แสดง General Info (URL, Method, Status Code), Response Headers และ Request Headers ทั้งหมด
ตรวจสอบ Payload ข้อมูลที่ได้รับกลับมาจากเซิร์ฟเวอร์ ไม่ว่าจะเป็น HTML, JSON หรือรูปภาพ
วิเคราะห์ระยะเวลาในแต่ละขั้นตอน: DNS Lookup, Initial Connection, SSL Handshake, และ Waiting (TTFB)
กรองชนิดไฟล์ (Fetch/XHR, Doc, JS, CSS) และเปิด Preserve Log บันทึกทราฟฟิกข้ามหน้าเปลี่ยน URL
Command-Line HTTP Client for Developers
Hands-on CLI Examples: HTML vs JSON Response
HTTP/2 200 OKtext/html; charset=utf-8HTTP/2 200 OKapplication/jsonSingle PC Development Setup for Full-Stack Course
Windows (WSL2 / PowerShell), macOS Terminal หรือ Linux Terminal
ติดตั้ง Python เวอร์ชันล่าสุด พร้อมใช้งาน `venv` สำหรับจัดการแพ็กเกจประจำโปรเจกต์
เครื่องมือจัดการซอฟต์แวร์แบบ Command-Line บน Windows สำหรับติดตั้งเครื่องมือต่างๆ ได้สะดวกรวดเร็ว
Week 1 Key Takeaways & Core Concepts
แยกส่วน Frontend และ Backend เพื่อหลักการ Separation of Concerns
DNS แปลงชื่อโดเมนเป็น IP Address ปลายทางเพื่อเริ่มสร้าง Connection
Stateless Protocol เข้ารหัสความปลอดภัยข้อมูลระหว่างทางด้วย TLS/SSL
ใช้ตรวจทราฟฟิก Headers, Status Codes และ Payload Response
Weekly Lab Exercise & Self-Study Guidelines (5 Hours/Week)
curl -I ส่ง Request ไปยังเว็บไซต์ที่กำหนด แล้วบันทึกค่า Response HeadersREST Architecture, HTTPie CLI / Desktop & Scoop Installation