listGoAPI Essential
สรุปสิ่งที่เรียนรู้มาทั้งหมด
สารบัญ
แนะนำเรื่องพื้นฐานอื่นๆเพิ่มเติมสำหรับการ Deploy production
และนี่คือพื้นฐานของการ Deploy งาน Backend Application 1 ตัว โดย Step ที่จะมีก็จะเป็นตามนี้
- ทำการสร้าง
Dockerfileconfig เพื่อทำการ build ออกมาเป็น image - ทำการ setting database ที่ใช้สำหรับเก็บข้อมูล
- ทำการนำ image ไปหาที่สำหรับการ Deploy เป็น Container ออกมาบน Cloud
- บริหารจัดการส่วนของ Secret และ ENV (ในหัวข้อนี้จะพาเล่นแค่ส่วน ENV ซึ่งจริงๆ หากเป็น Secret key ควรใช้ service อื่นๆมาช่วยเก็บข้อมูลเช่น Secret Manager ของ GCP หรือ Valut)
- บริหารส่วนของ 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 ต่อไปครับ 😁
