โหมดมืด
Spring Boot
ส่วนหนึ่งของ Beginner Book | ต้องผ่าน Java บทที่ 1-8 ก่อน (~4 สัปดาห์, ครอบคลุม class, object, interface, generics, exception, collections)
💡 annotation = ป้ายกำกับขึ้นต้นด้วย
@(เช่น@Override) ที่บอก framework/compiler ให้ทำอะไรเป็นพิเศษ กับ code ตรงนั้น ๆ ในเล่มนี้จะเจอ annotation เยอะมาก เพราะ Spring ใช้มันแทน config แบบเก่า
หนังสือเล่มนี้พาคุณไปถึงไหน
อ่านจบ + ทำ checkpoint หมด คุณจะ:
- เข้าใจ "ทำไม Spring มี" — ปัญหาก่อน Spring คืออะไร
- เข้าใจ IoC + DI อย่างที่เห็นภาพ ไม่ใช่แค่ท่อง
- สร้าง REST API ที่ working — validate, exception, status code
- ต่อ database ด้วย Spring Data JPA — transaction, relation, N+1
- เพิ่ม security ด้วย JWT — login, role, CORS
- เขียน test ครบ layer (unit + repo + controller + integration + Testcontainers)
- Deploy บน Docker + production-ready (logging, actuator, secrets, caching)
- พร้อมเลือกบทขั้นสูง (microservices/reactive/messaging) ที่ตรงกับงานของคุณ
ก่อนเริ่ม — ต้องรู้อะไรก่อน
✅ Java พื้นฐาน — class, object, interface, generics, exception, collections (Java บทที่ 1-8) ✅ SQL พื้นฐาน — SELECT/INSERT/UPDATE/WHERE/JOIN (บท 2 ใช้เยอะ) ✅ Lambda + Stream (Java บทที่ 9) — ดีมากถ้ามี (บางบทใช้) — ถ้าจะอ่านบท 10 หรือ 11 จำเป็นต้องผ่าน Java บทที่ 9 ก่อน (บท 14, 16, 17 ก็ใช้ lambda/stream/generics หนักเหมือนกัน แนะนำผ่านบท 9 ก่อนเช่นกัน) ✅ Modern Java (record + sealed) — รู้ก็ดี ไม่รู้ก็ผ่าน
❌ ไม่ต้องรู้: Spring เก่า, Servlet, JSP, Tomcat configuration — Spring Boot จัดการให้
อ่านบทไหนก่อน — แบ่งเป็น 2 โซน
หนังสือเล่มนี้มี 18 บท (0-17) แต่ ไม่ต้องอ่านทั้งหมดตั้งแต่แรก แบ่งชัด ๆ ได้ 2 โซน:
- บท 0-5 = แกนหลักต้องอ่าน — พื้นฐานทั้งหมดที่ทำให้สร้าง backend ใช้งานได้จริง (REST API + DB + Security + Test + Deploy) อ่านเรียงตามลำดับ
- บท 6-17 = เลือกอ่านตามงาน (ข้ามไปก่อนได้) — เป็นหัวข้อเฉพาะทาง/ระดับลึก เลือกบทที่เกี่ยวกับงานจริงตอนนั้น มือใหม่ ไม่ต้องอ่านตอนนี้ แต่ละบทมีกล่อง "โซนขั้นสูง — ข้ามได้" บอกไว้ต้นบท
ถ้าเพิ่งเริ่ม: ตั้งเป้าแค่ บท 0-5 ให้จบก่อน แล้วลองทำโปรเจกต์เล็ก ๆ (เช่น Todo API) ส่วนบท 6-17 เก็บไว้เปิดทีหลังได้สบาย ๆ ไม่ต้องรีบ
เวลาที่ควรใช้ (เฉพาะบท 0-5 ที่เป็นแกนหลัก)
- เพิ่งจบ Java พื้นฐาน ไม่เคยทำ backend: 4-6 สัปดาห์ (วันละ 1-2 ชม. + ลงมือทำ)
- เคยทำ backend ภาษาอื่น (Node/Django/Rails): 2-3 สัปดาห์
- เคยใช้ Spring เก่า (XML config) อัพเดทมา Boot 3: ข้ามไปบทที่ 1, 2, 5 ก็พอ
ส่วนบท 6-17 ไม่นับรวมในช่วงนี้ ค่อยทยอยอ่านตอนทำงานจริง (1 บท ≈ 3-5 ชม.)
บทเรียน
โซนที่ 1 — แกนหลักต้องอ่าน (บท 0-5)
| # | บท | สอนอะไร |
|---|---|---|
| 0 | Spring คืออะไร | ปัญหาก่อน Spring, IoC, DI, Bean, Spring vs Spring Boot |
| 1 | First Spring Boot App | สร้าง project, REST endpoint, อธิบายทุก annotation, validation, exception handler |
| 2 | Database + JPA | PostgreSQL, Entity, Repository, query methods, transaction, relation, N+1 |
| 3 | Security + JWT | Authentication vs Authorization, BCrypt, JWT, role-based, CORS |
| 4 | Testing | JUnit 5 + Mockito + AssertJ, @DataJpaTest, @WebMvcTest, Testcontainers¹ (= รัน DB จริงใน Docker ระหว่าง test) |
| 5 | Production Readiness | Logging, Actuator (= endpoints ดู health/metrics), profile, Docker, caching เบื้องต้น (รายละเอียดเต็มในบท 11), observability (= ดูระบบขณะรัน), CI/CD |
¹ Testcontainers ต้องติดตั้ง Docker ก่อน: docker.com/get-started → ดาวน์โหลด Docker Desktop แล้วเปิดไว้ (รายละเอียดในบท 4)
💡 ศัพท์บท 0:
- IoC (Inversion of Control — กลับด้านการควบคุม) = แทนที่เราสร้าง object เอง ให้ Spring สร้างและจัดการให้
- DI (Dependency Injection — ฉีด dependency) = Spring ส่ง object ที่ class ต้องการเข้าให้โดยอัตโนมัติ
- Bean = object ที่ Spring สร้างและจัดการให้เราใช้ได้เลย
โซนที่ 2 — เลือกอ่านตามงาน (บท 6-17, ข้ามไปก่อนได้)
บทในโซนนี้มีศัพท์เทคนิคหนักและเจาะลึกระดับใช้งานจริง/ระดับ senior มือใหม่ข้ามไปก่อนได้ ค่อยกลับมาเปิดเป็นบท ๆ ตอนเจอปัญหานั้นจริงในงาน ไม่ต้องเข้าใจชื่อบทตอนนี้ — เก็บเป็น index ไว้เปิดดูภายหลัง
| # | บท | สอนอะไร | เมื่อไหร่ควรอ่าน |
|---|---|---|---|
| 6 | AOP + Bean Scope | Aspect (= แยกโค้ดที่ตัดผ่านหลายที่ออกมาเป็นก้อนเดียว), Pointcut (= บอกว่า intercept จุดไหน), Advice (= โค้ดที่รันตอน intercept), scope ของ bean, @Primary, @Conditional | เมื่ออยากเข้าใจว่าทำไม @Transactional ทำงาน หรืออยากเขียน logger/audit แบบ cross-cutting |
| 7 | OAuth2 | OAuth2 flows (กระบวนการขอสิทธิ์), OIDC (= OAuth2 + ข้อมูล identity ผู้ใช้), "Login with Google", Resource Server (= server ที่ protect ด้วย token), Keycloak, Client Credentials (= flow สำหรับ server-to-server) | เมื่อต้อง login ผ่าน 3rd party (Google/FB/Microsoft) |
| 8 | Microservices + Spring Cloud | Eureka (= ทะเบียน service), Gateway, OpenFeign, Config Server, Circuit Breaker (= ตัดวงจรกัน fail), Tracing | เมื่อระบบใหญ่ ต้องแยกเป็นหลาย service |
| 9 | Spring MVC ลึก | Servlet (= หน่วยรับ HTTP request พื้นฐานใน Java), DispatcherServlet, Filter (= ตัวกรอง request/response), Interceptor (= คล้าย Filter แต่ทำงานใน Spring layer), ControllerAdvice, ArgumentResolver, SSE (= server push event) | เมื่อต้อง custom request lifecycle, log/audit ทุก request, async response |
| 10 | Reactive (WebFlux + R2DBC) | Project Reactor, Mono/Flux, backpressure (= กลไกที่ฝั่งรับบอกให้ฝั่งส่งชะลอลงเพื่อไม่ให้รับข้อมูลเกินที่จะรับไหว), WebClient, SSE, WebSocket | ถ้าเริ่มโปรเจกต์ใหม่ ข้ามได้ — Virtual Thread (Java 21+) แก้ปัญหาเดิมไปแล้ว แต่ถ้าทำงานกับ codebase reactive เดิม หรือต้องการ streaming (SSE/WebSocket) ปริมาณสูง ควรอ่าน |
| 11 | Caching | Spring Cache, Caffeine (= cache ในเครื่อง), Redis (= cache ข้าม service), patterns, stampede/penetration/avalanche (3 ปัญหาคลาสสิคของ cache), multi-tier | เมื่อระบบช้าเพราะ DB ถูกถามซ้ำ ๆ |
| 12 | Messaging (Kafka + RabbitMQ) | Spring AMQP + Kafka, exchanges, partitions, consumer groups, idempotent (= ทำซ้ำได้ผลเหมือนเดิม), Outbox (= เทคนิคบันทึก event ลง DB ก่อนส่ง กัน event หาย), Saga (= กระบวนการ transaction ข้าม service), DLQ/DLT (Dead Letter Queue/Topic = ที่เก็บ message ที่ process ไม่สำเร็จ) | เมื่อต้องส่งข้อความ async ข้ามระบบ (email/notification/event) |
| 13 | Batch + Scheduling | @Scheduled, ShedLock (= ล็อกไม่ให้รันซ้ำใน cluster), Quartz cluster, Spring Batch (chunk/restart/skip/partition), K8s CronJob | เมื่อต้องประมวลผลข้อมูลใหญ่ตามเวลา (รายงาน/ETL) |
| 14 | GraphQL | Schema-first, @QueryMapping, DataLoader (แก้ N+1), Subscriptions, security, persisted queries, Federation | เมื่อ frontend อยากเลือก field ที่ต้องการเอง (ไม่ fix แบบ REST) |
| 15 | Native Image (GraalVM) | AOT (= compile ล่วงหน้า), Spring AOT processing, RuntimeHints, FaaS (Function as a Service = serverless — run code ตามคำขอ ไม่ต้องจัดการ server เอง เช่น AWS Lambda), trade-offs | เมื่อต้อง deploy แบบ startup เร็ว/RAM น้อย (Lambda, serverless) |
| 16 | Spring AI | ChatClient, prompt template, structured output, RAG (= search + LLM) + pgvector, function calling, cost/observability/safety | เมื่อต้องต่อ LLM (ChatGPT/Claude) เข้ากับระบบ |
| 17 | Modulith | Modular Monolith (= แบ่งโมดูลใน 1 app แทนแยก microservice), module boundary, @ApplicationModuleListener, Event Publication Registry | เมื่อระบบโตขึ้น แต่ยังไม่อยากแยกเป็น microservices |
Roadmap หลังจบบทที่ 17
⬇️ section นี้ อ่านตอนจบบท 17 — ถ้าเพิ่งเริ่มเรียน ข้ามไปได้เลย ไม่จำเป็นต้องรู้ตอนนี้
หัวข้อต่อยอดเพิ่มเติม (ไม่อยู่ในเล่มนี้):
- Domain-Driven Design (DDD) — Eric Evans · Vaughn Vernon · ผูกกับ Modulith (บท 17)
- gRPC + Protobuf — RPC ที่เร็ว/strict กว่า REST (
grpc-spring-boot-starter) - Kubernetes + Helm — orchestration, deployment, autoscaling
- Service Mesh (Istio / Linkerd) — sidecar pattern, mTLS (= TLS สองทาง ทั้ง client และ server พิสูจน์ตัวตนกัน), traffic management
- Event Sourcing + CQRS (= บันทึกทุก event แทนเก็บแค่ state ล่าสุด + แยก path read/write) — Axon Framework, EventStoreDB
- Chaos Engineering — Chaos Mesh, Litmus, Spring Cloud Chaos Monkey
- Performance tuning — JFR, async-profiler, Hibernate statistics, query plan analysis
(ถ้าคุณใช้ Obsidian vault ที่ตั้งค่าตาม course นี้ไว้แล้ว สามารถดูโน้ตที่ programming/frameworks/spring-boot/ เป็น reference เร็ว ๆ ของหัวข้อข้างต้น — ข้ามได้ถ้าไม่ได้ใช้ Obsidian)
🔤 Glossary · 📋 Style guide · 📅 last_verified: 2026-06-23