Tech Stack @ Krungsri Nimble
สวัสดีครับ ผมจอม Engineering Manager จาก บริษัท กรุงศรี นิมเบิล จำกัด ตั้งใจเขียนบทความนี้เพื่อเล่าถึง Technology Stack ที่เราใช้สำหรับการสร้าง platform ของเราในปัจจุบัน เพื่อเป็นคำตอบสำหรับคนที่สงสัยว่า Krungsri Nimble ทำอะไรบ้าง แล้วใช้เทคโนโลยีอะไร และคนที่สนใจร่วมงานกับเรา
บริษัท กรุงศรี นิมเบิล เป็น Tech Company ในเครือธนาคารกรุงศรีอยุธยา จำกัด (มหาชน) โดยเรามุ่งเน้นให้ทุกคนสามารถเข้าถึงบริการทางการเงินโดยอาศัยเทคโนโลยีเข้ามาเพื่อช่วยแก้ปัญหาทำให้ลูกค้ามีความสะดวกสบาย มีประสบการณ์ในการใช้บริการที่ราบรื่นในทุกๆด้าน ซึ่งผลิตภัณฑ์หลักของเราที่ทุกคนน่าคงรู้จักกันดี คือ แอปพลิเคชัน KMA Krungsri Mobile App ที่ตอบโจทย์ไลฟ์สไตล์และความสะดวกสบายในชีวิตประจำวัน ด้วยบริการต่าง ๆ มากมาย ครอบคลุมทุกเรื่องการเงิน ทั้งบริการชำระค่าน้ำ ค่าไฟ ค่าบัตรเครดิต หรือจ่ายบิลไหน ๆ ก็ทำได้ง่าย ๆ พร้อมฟังก์ชันสแกนบาร์โค้ดและคิวอาร์โค้ด บริการโอนเงินผ่านแอป บริการโอนเงินต่างประเทศ รวมถึงการใช้บริการ Digital Content และ แอปพลิเคชัน KBOL Krungsri Biz Online บริการ Digital Banking สำหรับนิติบุคคล บุคคลธรรมดา รวมถึงลูกค้าธุรกิจทุกระดับ รองรับธุรกรรมทางการเงินสำหรับธุรกิจทุกรูปแบบ ไม่ว่าจะเป็นการโอนเงิน จ่ายเงินเดือน ชำระค่าสินค้าและบริการ จัดการสินเชื่อธุรกิจ และยังมี application อื่นๆ อีกมากมายที่ช่วยอำนวยความสะดวกทั้งลูกค้าและพนักงานในองค์กร
อ่านเพิ่มเติมได้ที่นี้ ทำความรู้จัก Mobile Banking หนึ่งใน Application หลักของคนยุคใหม่ที่ถูกสร้างขึ้นโดย Krungsri Nimble Team | by Krungsri Nimble | Krungsri Nimble | Medium
Technology Stack สำคัญอย่างไร
Technology Stack คือ เทคโนโลยีที่องค์กรใช้สร้างเว็บหรือแอปพลิเคชันบน mobile/web application ซึ่งเป็นการผสมกันระหว่างภาษาการเขียนโปรแกรม, Frameworks, Libraries, Patterns, Servers, การออกแบบ UI / UX, ซอฟต์แวร์ต่างๆ รวมไปถึงเครื่องมือที่นักพัฒนาใช้ และการที่มาแชร์ Technology Stack ให้ทุกคนได้ทราบ จะมีข้อดีสำหรับ บริษัท และ บุคคลภายนอก ที่กำลังสนใจในตัวบริษัท ซึ่งขอแบ่งออกเป็น 2 ส่วน
บริษัท (Company)
บริษัท (Company) -> บริษัทที่สื่อสารออกมาอย่างชัดเจนว่าใช้เทคโนโลยีอะไรในการพัฒนาเป็นสิ่งที่สามารถตอบโจทย์กับลูกค้าที่อยากจะมาใช้บริษัทการมากยิ่งขึ้น เนื่องจากหากทราบข้อมูลเหล่านี้นั้น จะสามารถเปรียบเทียบกันกับเจ้าอื่น ๆ ในตลาดได้ และ อาจจะเป็นช่วยในการตัดสินใจเมื่อเห็นได้เลย เช่นกัน
บุคคลภายนอก (Outsiders)
บุคคลภายนอก (Outsiders) -> บุคคลภายนอกอาจจะเป็นนักพัฒนา (Developer) เมื่อเราพยายามจะลองมองหาโอกาสใหม่ๆ คงเป็นสิ่งที่สำคัญ และต้องคิดมากพอสมควร ตัวอย่างเช่น ย้ายไปแล้วที่ใหม่จะเข้ากับเราได้ไหม หรือ ย้ายไปแล้ว Tech ที่บริษัทนั้นใช้จะตรงกับเราจริง ๆ ไหม หรือ เราสามารถปรับตัวเองให้เข้ากับ บริษัทใหม่ได้ไหม และเป็นสิ่งที่ดึงดูดความสนใจของนักพัฒนาเข้ามานั้นเอง
เบื้องหลังของบริการทั้งหมดที่เล่าไป ปัจจุบันนี้ Application Services ของกรุงศรี นิมเบิลเกือบทั้งหมดทำงานเป็น microservices ครับ (*** ย้ำเกือบทั้งหมด) จะอยู่ในรูปแบบ container ทั้ง On-Premise และ On-Cloud นั้นเอง เลยจำเป็นต้องมี Technology หรือ Tools ต่างๆเข้ามาช่วยให้ทำงานได้สะดวก รวดเร็วและปลอดภัยมากขึ้น ตัวอย่างเช่น เรื่องการ monitor แต่ละจุดของ application services เราต้องหา monitoring tools อย่างเช่น datadog, dynatrace เข้ามาช่วยในส่วนนี้, ส่วนเรื่องของการทำ CI/CD pipeline เราได้นำเครื่องมือต่างๆเช่น Jenkins, Terraform, ArgoCD หรือ Container orchestrator อย่าง Kubernetes เข้ามาช่วยเรื่องของ automation ซึ่งมันจะส่งผลทำให้สามารถ Release feature ต่างๆขึ้น Production ได้เร็วมาก
ทางกรุงศรี นิมเบิล มีการใช้ Technology และ Tools อะไรกันบ้าง โดยที่จะแบ่งออกเป็นกลุ่มเพื่อให้เข้าใจง่ายๆ Client Side & Server Side
Programming Languges
- Flutter :ใช้เป็นการพัฒนา mobile application
- Angular :ใช้เป็นพื้นฐานของ frontend development
- Dotnet core : ใช้เป็นพื้นฐานของ backend development
- Java Spring boot : ใช้เป็นพื้นฐานของ backend development
- golang : ใช้เป็นการทำ backend ที่ต้องการ high scale workload และ reduce memory
- nodejs : ใช้เป็น supporting tools
Testing
- xUnit :ใช้ทำ unit test ของ dotnet core
- jUnit :ใช้ทำ unit test ของ spring boot
- Robot framework selenium : ใช้ทำ Automate testing
Databases
- SQL Server : เก็บข้อมูลตาม application design
- PostgreSQL: เก็บ config และเป็น application database สำหรับบางงาน
Containerized
- docker:ใช้ทำ application container ของด้วย docker image อยู่เสมอ
- kubernetes : deployment ใช้ k8s จัดการทั้งหมด ตั้งแต่ images alpha เราใช้ service, deployment, configmap, secretKey, cronjob เป็นต้น
- harbor : self hosted docker images เราใช้สิ่งนี้เก็บ docker image ที่เรา build และดึงไปใช้ เมื่อต้องการ deploy
- nexus : self hosted artifact เราใช้สิ่งนี้เก็บ file publish ที่เรา build และดึงไปใช้ เมื่อต้องการ deploy
CI/CD
- Argo : implement ทำ gitops concept
- Jenkins : build and deploy application / services ทำ pipeline รัน jobs
- Ansible : build and deploy application / services on-premise
Observations
- fluentd : log shipper ใช้ทำ log streaming กับ elasticsearch
- opentelemetry : ทำเรื่องของ tracaibility เพื่อตรวจสอบการทำงาน application / services
- sentry :ใช้เก็บ exception app/web และ alert เข้า discord
- elasticsearch : kibana เอาไว้ดู application logs ที่ส่งจากทุกๆ containers โดยเราเอา fluentd
Collaboration
- miro : collaboration board วาด overview flow customer journey
- draw.io : วาด architecture design
Management Tools
- Jira : Scrum on sprint
- Confluent : Document sharing knowledge base of squad
การพัฒนา กรุงศรี นิมเบิล เราใช้แนวทาง Agile เพราะซอฟต์แวร์ที่พัฒนามีความเปลี่ยนแปลงบ่อยครั้ง และกระบวนการควบคุมคุณภาพโค้ดอาศัยการทำ Code review ภายในทีม (Squad) รวมไปถึงใช้เครื่องมืออย่าง Jenkins CI สำหรับ build/test/dependency check/code quality/security check เพื่อเพิ่มความเร็วและทำให้ process เป็นไปอย่าง automate แนวทางนี้ทำให้กระบวนการทำงานมีประสิทธิภาพ Build code ออกมาได้อย่างมีคุณภาพ
ส่วนของการจัดการ deployment ทางเราใช้ GitOps ด้วย ArgoCD ที่จะคอยดูว่ามีอัพเดตหรือไม่ ระบบเหล่านี้อาศัย Kubernetes เป็นพื้นฐานซึ่งก็น่าจะเป็นมาตรฐานใหม่ และอีกทางก็จะเป็น Jenkins ที่ใช้ทำ CI/CD
บทสรุป
บทความนี้น่าจะทำให้เห็น Technology Stack ของทาง บริษัท กรุงศรี นิมเบิล มากขึ้นนะครับ จริงๆ แล้วภายในบริษัท เรายังมีโปรเจค และมีอีกหลายทีม ที่อาจจะใช้เทคโนโลยีที่ไม่ได้กล่าวถึงในบทความ
และจะเห็นว่า Technology Stack ที่ บริษัท กรุงศรี นิมเบิล ใช้กันอยู่ ส่วนใหญ่ก็เป็นเทคโนโลยีที่นิยมใช้กันอยู่แล้วในท้องตลาด เพื่อให้ได้มีประสิทธิภาพ มากที่สุดเพื่อรองรับการใช้งานให้ได้
การเลือกเทคโนโลยีหรืออะไรก็ตามมาใช้ใน platform ของเรานั้น ก็ขึ้นอยู่กับหลายปัจจัย เช่นเรื่อง technical knowledge ที่ทีมพัฒนา และเรื่อง Budget หรือเรื่องของ business ด้วยเหตุนี้ ส่วนที่สำคัญอย่างมากของเราอย่างหนึ่งในการเลือกเทคโนโลยี ไม่ว่าจะเลือกอะไรเข้ามาใช้ก็ตาม เราจำเป็นต้องมีเลยคือความรู้และเข้าใจในเทคโนโลยีหรือเครื่องมือที่เรานำมาใช้ แบบรู้กว้าง รู้ลึก และรู้จริง เพราะให้เราคำนึงว่าสิ่งที่เรากำลังพัฒนาอยู่คือ บริการทางการเงินที่ส่งผลกับชีวิตประจำวันของผู้ใช้บริการจำนวนมาก ดังนั้นเราจึงต้องเข้าใจในลึกและรู้ว่าเราจะแก้ปัญหาทุกรูปแบบที่อาจเกิดขึ้นและส่งผลกระทบเป็นวงกว้างได้
หวังว่าบทความนี้จะเป็นประโยชน์ไม่มากก็น้อยสำหรับคนที่เข้ามาอ่านครับ ผิดพลาดประการใดขออภัยมา ณ ที่นี้ด้วยครับ