Skip to content

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)

#บทสอนอะไร
0Spring คืออะไรปัญหาก่อน Spring, IoC, DI, Bean, Spring vs Spring Boot
1First Spring Boot Appสร้าง project, REST endpoint, อธิบายทุก annotation, validation, exception handler
2Database + JPAPostgreSQL, Entity, Repository, query methods, transaction, relation, N+1
3Security + JWTAuthentication vs Authorization, BCrypt, JWT, role-based, CORS
4TestingJUnit 5 + Mockito + AssertJ, @DataJpaTest, @WebMvcTest, Testcontainers¹ (= รัน DB จริงใน Docker ระหว่าง test)
5Production ReadinessLogging, 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 ไว้เปิดดูภายหลัง

#บทสอนอะไรเมื่อไหร่ควรอ่าน
6AOP + Bean ScopeAspect (= แยกโค้ดที่ตัดผ่านหลายที่ออกมาเป็นก้อนเดียว), Pointcut (= บอกว่า intercept จุดไหน), Advice (= โค้ดที่รันตอน intercept), scope ของ bean, @Primary, @Conditionalเมื่ออยากเข้าใจว่าทำไม @Transactional ทำงาน หรืออยากเขียน logger/audit แบบ cross-cutting
7OAuth2OAuth2 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)
8Microservices + Spring CloudEureka (= ทะเบียน service), Gateway, OpenFeign, Config Server, Circuit Breaker (= ตัดวงจรกัน fail), Tracingเมื่อระบบใหญ่ ต้องแยกเป็นหลาย service
9Spring 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
10Reactive (WebFlux + R2DBC)Project Reactor, Mono/Flux, backpressure (= กลไกที่ฝั่งรับบอกให้ฝั่งส่งชะลอลงเพื่อไม่ให้รับข้อมูลเกินที่จะรับไหว), WebClient, SSE, WebSocketถ้าเริ่มโปรเจกต์ใหม่ ข้ามได้ — Virtual Thread (Java 21+) แก้ปัญหาเดิมไปแล้ว แต่ถ้าทำงานกับ codebase reactive เดิม หรือต้องการ streaming (SSE/WebSocket) ปริมาณสูง ควรอ่าน
11CachingSpring Cache, Caffeine (= cache ในเครื่อง), Redis (= cache ข้าม service), patterns, stampede/penetration/avalanche (3 ปัญหาคลาสสิคของ cache), multi-tierเมื่อระบบช้าเพราะ DB ถูกถามซ้ำ ๆ
12Messaging (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)
13Batch + Scheduling@Scheduled, ShedLock (= ล็อกไม่ให้รันซ้ำใน cluster), Quartz cluster, Spring Batch (chunk/restart/skip/partition), K8s CronJobเมื่อต้องประมวลผลข้อมูลใหญ่ตามเวลา (รายงาน/ETL)
14GraphQLSchema-first, @QueryMapping, DataLoader (แก้ N+1), Subscriptions, security, persisted queries, Federationเมื่อ frontend อยากเลือก field ที่ต้องการเอง (ไม่ fix แบบ REST)
15Native 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)
16Spring AIChatClient, prompt template, structured output, RAG (= search + LLM) + pgvector, function calling, cost/observability/safetyเมื่อต้องต่อ LLM (ChatGPT/Claude) เข้ากับระบบ
17ModulithModular 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