Skip to main content

สรุปสิ่งที่เรียนรู้มาทั้งหมด

แนะนำเรื่องพื้นฐานอื่นๆเพิ่มเติมสำหรับการ Deploy production

และนี่คือพื้นฐานของการ Deploy งาน Backend Application 1 ตัว โดย Step ที่จะมีก็จะเป็นตามนี้

  1. ทำการสร้าง Dockerfile config เพื่อทำการ build ออกมาเป็น image
  2. ทำการ setting database ที่ใช้สำหรับเก็บข้อมูล
  3. ทำการนำ image ไปหาที่สำหรับการ Deploy เป็น Container ออกมาบน Cloud
  4. บริหารจัดการส่วนของ Secret และ ENV (ในหัวข้อนี้จะพาเล่นแค่ส่วน ENV ซึ่งจริงๆ หากเป็น Secret key ควรใช้ service อื่นๆมาช่วยเก็บข้อมูลเช่น Secret Manager ของ GCP หรือ Valut)
  5. บริหารส่วนของ CI/CD เพื่อเพิ่มส่วนของ Trigger การ build + deploy งาน (ในหัวข้อนี้ มีโอกาสเราจะมาเล่าเพิ่มเติมในอนาคต เนื่องจากเป็นหัวข้อที่ต้องปูพื้นฐานสำคัญของ Devops เพิ่มเติมอีกที)

เรื่องอื่นๆที่ควรคำนึงถึงด้วยก็จะมี

  • Security Auditing ทำการตรวจสอบ application ด้วยว่า Network ทุกอย่างถูกใช้งานอย่างถูกต้องหรือไม่
    • database สามารถเข้าถึงได้แค่เฉพาะคนที่ควรเข้าถึงได้หรือไม่
    • API มีการจำกัดการยิง req/s ไว้หรือไม่
    • มี API ตัวไหนที่สามารถดึงข้อมูลออกมาได้ ทั้งที่ไม่ควรจะดึงออกมาได้
    • practice security เพิ่มเติม ฟังได้ใน [หัวข้อ OWASP] (https://www.youtube.com/watch?v=XVbSl0R_T7M) กันนะครับ
  • CI/CD เพิ่ม process pipeline สำหรับการ Deploy เพื่อให้การ deploy งานเป็นไปอย่างอัตโนมัติมากขึ้น
    • CI (Continuous Integration) คือ practice ของ software development ที่อนุญาตให้เพิ่ม process บางอย่างเพิ่มเข้าไปตอน merge code เข้า repository ซึ่งปกติก็จะเป็น process การ build image กับ run test (พวก unit test)
    • CD (Continuous Deployment) คือ practice ของ software development ที่เพิ่ม process ในการทำ automatically test + deploy งานขึ้น production environment (เป็นตัวที่นำ image ที่ build แล้วขึ้นตัว Cloud แบบอัตโนมัติ)
    • ทั้ง 2 เรื่องนี้ CI/CD ถือเป็น practice สำคัญที่ช่วยทำให้ software process ทำงานได้ไวขึ้น และทำงานแบบอัตโนมัติมากขึ้น (สามารถลดอัตราความผิดพลาดจากการ deploy งานด้วยมือได้)
  • Monitoring การทำ Monitor ระบบว่า ระบบยังใช้งานได้ปกติดีหรือไม่ เสถียรปกติดีหรือไม่ (CPU, RAM) เพื่อให้แน่ใจว่า application ของเรานั้นยังทำงานได้เหมือนเดิม และสามารถส่ง Notification บางอย่างเมื่อระบบเรามีปัญหาออกมาได้
  • Logging การ design Log ออกมาเพื่อให้สามารถตรวจสอบปัญหาได้ไวขณะที่ application ใช้งาน
  • Backup เรื่องของการสำรองข้อมูลและการกู้คืนข้อมูล โดยต้องคำนึงถึงในกรณีที่ database อาจจะเจอปัญหาบางอย่างจากการใช้งานหรือจากการโจมตี ต้องยังสามารถนำข้อมูล database กลับมาได้ รวมถึงต้องมีระบบ Recovery ในกรณีที่ database มีปัญหาจนต้องนำ Backup กลับมาใช้ (ถ้าใช้ตัวอย่าง Cloud SQL จะมี feature เหล่านี้อยู่แล้ว)
  • Pricing รวมถึงเรื่องของค่าใช้จ่ายในการขึ้น Cloud เช่นเดียวกัน โดยปกติในปัจจุบัน Pricing จะมี 2 แบบใหญ่ๆคือ จ่ายแบบเหมา (เป็นแบบรายเดือน) กับ Pay per use (เช่น Cloud run ที่จะคิด Pricing ตามจำนวนชั่วโมงที่เปิดออกมา) เลือก Pricing ให้เหมาะสมกับตัวงานและการประเมินรายจ่ายด้วย
  • Software Quality ที่เหลือก็จะเป็นเรื่องของ Software Quality การทำ testing อย่างครอบคลุม และการทดสอบระบบอย่างถี่ถ้วนก่อนที่จะใช้งาน
    • ตัว code ได้ implement ตาม practice ของ security เรียบร้อย, มีการ encryption ข้อมูล sensitive ไว้แล้วเรียบร้อย (เช่น เข้า hash password, encrypt เลขบัตรประชาชน)
    • รวมถึง follow practice ของ OWASP เรียบร้อย
  • Scalability เป็นการมั่นใจว่า application สามารถรองรับ load ได้อย่างเหมาะสม
    • สามารถทดสอบเรื่องนี้ได้จากการทำ Load Test เพื่อเป็นการทดสอบ load ของระบบได้ (แต่ วิธีนี้จะไม่แนะนำกับ service ที่ Pay per use เนื่องจากจะเสีย Pricing จำนวนมากจากการทำ Load test)

และนี่ก็คือเรื่องราวทั้งหมดของการ Deploy งาน Go Application 1 ตัว (แบบพื้นฐาน) เรื่องอื่นๆ มีโอกาสเราจะมาเล่าเพิ่มเติมกันใน Session ของ Devops อีกที (เนื่องจากปริมาณเนื้อหาในแต่ละหัวข้อมีแน่นพอสมควร และขอยกไปไว้เป็น Session อื่นๆเพื่อความเข้าใจที่ครบถ้วนและเต็มอิ่มมากขึ้นเช่นกัน)

ปิดท้ายทั้งหมดก่อนจบ Course

และนี่ก็คือเรื่องราวทั้งหมดของ GO API Essential ทวนกันสักหน่อยว่าเราเรียนอะไรกันไปบ้าง

  • ตอนที่ 1: รู้จักกับ Go และ Syntax พื้นฐานของ Go
  • ตอนที่ 2: รู้จักกับ Data structures และ Control Structure ใน Go
  • ตอนที่ 3: รู้จักกับ Fiber และ Http server
  • ตอนที่ 4: รู้จักกับการต่อ database ด้วย postgreSQL
  • ตอนที่ 5: รู้จักกับ GORM และพื้นฐานการทำ Authentication
  • ตอนที่ 6: รู้จักกับพื้นฐานการเขียนโปรแกรมแบบ Concurrency ใน Go (ทั้ง goroutine & channel)
  • ตอนที่ 7: รู้จักกับ Hexagonal & Clean Architecture พื้นฐานการทำ Software application ใน Go ให้สวยงามยิ่งขึ้น
  • ตอนที่ 8: รู้จักกับ Unit Testing ใน Go
  • ตอนที่ 9: รู้จักพื้นฐานการ Deployment Go

ทั้ง 9 หัวข้อของ Course นี้เป็นหัวข้อที่ผมหยิบมาและมองว่าสามารถปูพื้นฐานหลายๆอย่างไว้เรียบร้อย หลายๆเนื้อหาเช่น Unit test หรือการทำ Deployment ต้องอาศัยประสบการณ์และเนื้อหาอื่นๆเพิ่มเติมประกอบการใช้งานจริง เพื่อให้สามารถทำออกมาได้ถูก practice ตาม software development ออกมาด้วยเช่นกัน

ขอให้ Course นี้ ทุกคนเห็นมุมมองการทำ Backend application มากขึ้น แล้วเจอกันใหม่ใน Course ต่อไปครับ 😁