การที่ทุกอย่าง ( ทั้ง 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 ?
- ใช้ Runtime เดียวกัน: เมื่อคุณสั่งรันโปรเจกต์ ทั้งหน้าเว็บ ( UI ) และระบบหลังบ้านจะทำงานภายใต้ Java Process ( JVM ) ตัวเดียวกัน
- แชร์ Resource เดียวกัน: ใช้ CPU และ RAM ก้อนเดียวกันบนเครื่อง Server
- 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 รุนแรง ) อาจจะทำให้ทั้งระบบรันไม่ได้
อ่านเพิ่มเติม