ป้ายกำกับ: Decoupled

Monolithic ArchitectureMonolithic Architecture

การที่ทุกอย่าง ( ทั้ง Database Config, Logic การทำงาน, และหน้าตา UI / HTML ) ถูกรวมอยู่ในโปรเจกต์เดียวกันและรันอยู่ใน Server ตัวเดียวกันแบบนี้ เราเรียกว่า Monolithic Architecture ( หรือเรียกสั้นๆ ว่า Monolith )


Monolithic Architecture คืออะไร ?

มันคือรูปแบบการสร้างซอฟต์แวร์ที่ส่วนประกอบทั้งหมด ( User Interface, Business Logic, Database Access) ถูกรวมเข้าด้วยกันเป็นหน่วยเดียว ( Single Unit ) เวลาคุณสั่ง Build คุณจะได้ไฟล์ก้อนเดียว ( เช่น .jar ใน Spring Boot ) แล้วนำไปรันที่เดียวจบ

ส่วนประกอบ ( Components )

  • Frontend: ใช้ Template Engine อย่าง Thymeleaf ( เปรียบได้กับ Blade ใน Laravel ) เพื่อสร้าง HTML บน Server แล้วส่งไปให้ Browser
  • Backend: จัดการสิทธิ์ ( Security ), ติดต่อ Database (SQL Server), และควบคุม Flow การทำงาน

API

สามารถใช้ API ควบคู่ไปกับ Web Controller ( Thymeleaf ) ได้ในโปรเจกต์เดียวกันครับ

  • Controller -> สำหรับส่งหน้าเว็บ ( HTML )
  • RestController -> สำหรับส่งข้อมูล ( JSON ) ให้ Mobile App หรือระบบอื่นมาดึงข้อมูลไปใช้

ทำไมเราถึงเรียกว่า Monolith ?

  1. ใช้ Runtime เดียวกัน: เมื่อคุณสั่งรันโปรเจกต์ ทั้งหน้าเว็บ ( UI ) และระบบหลังบ้านจะทำงานภายใต้ Java Process ( JVM ) ตัวเดียวกัน
  2. แชร์ Resource เดียวกัน: ใช้ CPU และ RAM ก้อนเดียวกันบนเครื่อง Server
  3. Deploy พร้อมกัน: เวลาคุณแก้ไข Code แค่ปุ่มเดียวในหน้า Login คุณต้อง Build และ Restart ระบบใหม่ทั้งหมด ( ทั้งก้อน )

สรุปสั้นๆ: คือการสร้าง “ระบบที่สมบูรณ์ในตัวมันเอง”


เมื่อไหร่ที่มันจะไม่ใช่ Monolith ?

มันจะเปลี่ยนไปเป็น Decoupled Architecture หรือ Microservices ก็ต่อเมื่อ

  • คุณแยก Frontend ออกไปเขียนด้วย React / Vue แล้วรันบน Server คนละตัวกับ Spring Boot ( คุยกันผ่าน API เท่านั้น )
  • คุณแยก Database ออกไปเป็นหลาย ๆ ก้อนตามฟังก์ชันงาน

เปรียบเทียบกับรูปแบบอื่น

รูปแบบลักษณะการทำงาน
Monolithเหมือน Laravel ที่ใช้ Blade + Controller จบในที่เดียว รันบน Server ตัวเดียว
Decoupled / Separatedแยกเป็น Backend ( API ) และ Frontend ( React /Vue / Next.js) คุยกันผ่าน JSON
Microservicesแยก Backend ออกเป็นหลาย ๆ โปรเจกต์ย่อย ( เช่น บริการ Login, บริการ Order ) แยกฐานข้อมูลกัน

ข้อดีและข้อเสียของ Monolith


ข้อดี

  • Simple: พัฒนาง่าย ไม่ต้องปวดหัวกับการตั้งค่า CORS หรือการยิง API ข้ามเครื่อง
  • Performance: การดึงข้อมูลทำได้เร็วเพราะทุกอย่างอยู่ในหน่วยความจำเดียวกัน
  • Deployment: เอาไฟล์ไปรันที่ Server แค่ที่เดียว จบ
  • เหมาะกับการทำ Prototype อย่างน้อยลดความยุ่งยากในการจัดการ service, API

ข้อเสีย

  • Scalability: ถ้าคนใช้เยอะจนเว็บอืด คุณต้องขยาย ( Scale ) ทั้งก้อน ไม่สามารถขยายเฉพาะส่วนได้
  • Tight Coupling: ถ้าส่วนใดส่วนหนึ่งพัง ( เช่น หน้าจอมี Error รุนแรง ) อาจจะทำให้ทั้งระบบรันไม่ได้

อ่านเพิ่มเติม