สรุปปี 2567: บทเรียน Tech, สุขภาพเตือนภัย, และการจัดระเบียบการเงินครั้งใหญ่
ปี 2024 กับชีวิตแบบ “ไม่หวือหวา แต่อยู่รอด” 😅
ปีนี้เป็นปีที่ท้าทายมาก เพราะได้กลับมาใช้ภาษาอังกฤษในการทำงานอีกครั้ง แม้จะยังไม่คล่องปรื๋อเหมือนเจ้าของภาษา แต่ก็ต้องปรับตัวให้ทัน ที่สำคัญคือได้เรียนรู้ศัพท์เฉพาะทางที่แปลกใหม่ในวงการการเงินและบัญชี บางครั้งแม้แต่แปลเป็นภาษาไทยแล้วก็ยังทำเอาผมงงเป็นไก่ตาแตกเลยทีเดียว 555
📚 ชีวิตการงานที่พลิกโฉม: จาก Software Engineer สู่โลก FinTech
แม้ว่าความรู้ด้าน Software Engineer และ DevOps จะมีจางๆ ไปบ้าง แต่ปีนี้ก็ได้กลับมาปัดฝุ่นและเรียนรู้สิ่งใหม่ๆ มากมาย:
- ฝึกภาษาอังกฤษทุกวัน: ได้กลับมาทำงานร่วมกับเพื่อนร่วมงานชาวต่างชาติ ทำให้ต้องฝึกทักษะการสื่อสารภาษาอังกฤษเป็นประจำ
- คลังศัพท์ใหม่: ได้เรียนรู้ศัพท์เฉพาะทางด้านการเงิน การธนาคาร สินเชื่อ และบัตรเครดิต
- มุมมองการทำงานที่แตกต่าง: ได้เห็นวิธีการแก้ปัญหาและมุมมองการทำงานใหม่ๆ ที่หลากหลาย
ELK Stack & Data Pipeline
ปีนี้ได้พัฒนาและเรียนรู้ระบบ Monitoring สำหรับ Batch Jobs โดยใช้ ELK Stack ซึ่งมีขั้นตอนที่ซับซ้อน:
-
การออกแบบ Data Pipeline
- เริ่มจากการวิเคราะห์ข้อมูลที่ต้องการจาก batch jobs
- ออกแบบ schema ใน Elasticsearch
- วางแผนการ transform ข้อมูลใน Logstash
-
การพัฒนา Logstash Pipeline
- ตั้งค่าให้ดึงข้อมูลจาก Database ทุกชั่วโมงเพื่อนำเข้าสู่ระบบ
input { jdbc { jdbc_driver_library => "postgresql-42.2.5.jar" jdbc_driver_class => "org.postgresql.Driver" jdbc_connection_string => "jdbc:postgresql://localhost:5432/batch_db" jdbc_user => "${DB_USER}" jdbc_password => "${DB_PASSWORD}" schedule => "0 0 * * * *" # ทุกชั่วโมง statement => " SELECT job_id, job_name, start_time, end_time, status, error_message FROM batch_job_execution WHERE start_time >= :sql_last_value " } } -
การสร้าง Kibana Dashboard
- แสดง Job Status Distribution (Success/Failed)
- ดูแนวโน้มระยะเวลาที่ใช้ในการทำงาน (Show Job Duration Trends)
- ตั้งค่า Alert เมื่อ job ใช้เวลานานผิดปกติ
- รวมถึงการ Monitor error rate และ patterns
-
การวิเคราะห์ Performance
- ดู trends ของ execution time
- ระบุ jobs ที่มีปัญหาบ่อย
- วิเคราะห์ช่วงเวลาที่ระบบมี load สูง
Technical Note:
- ใช้ index lifecycle management จัดการข้อมูลเก่า
- สร้าง alert rules เพื่อแจ้งเตือนปัญหา
- ทำ dashboard template สำหรับ reuse
Security & Authentication
🔄 การรื้อฟื้นและเปลี่ยนผ่านวิธีการจัดการข้อมูลลับ (Secret Management Refactoring)
จากประสบการณ์เดิมในการจัดการข้อมูลลับ ผมได้ดำเนินการ รื้อฟื้นความรู้ และ ปรับปรุงวิธีการ ที่ใช้ในการบริหารจัดการ Secrets ภายใน Microservices ให้เปลี่ยนผ่านไปสู่สถาปัตยกรรมที่เน้นความมั่นคงปลอดภัยแบบ Zero Trust โดยใช้ HashiCorp Vault เป็นกลไกหลักในการควบคุมการเข้าถึง โครงการนี้มุ่งเน้นการแก้ไขจุดอ่อนของวิธีการแบบดั้งเดิม (เช่น การใช้ Environment Variables หรือ Hardcoded Values) และสร้างกลไกการเข้าถึงที่โปร่งใสและตรวจสอบได้
การปรับปรุงวิธีการครั้งสำคัญนี้ ประกอบด้วยหลักการและแนวทางปฏิบัติเชิงเทคนิคดังนี้:
- Refactoring Path Structure: ออกแบบและปรับโครงสร้างการจัดเก็บ Secrets ให้เป็นแบบลำดับชั้น (Hierarchical Path) ที่ชัดเจน (เช่น
<env>/<team>/<service>) เพื่อรองรับการกำหนดสิทธิ์แบบแยกส่วน (Segregation) และป้องกันการเข้าถึงข้าม Environment - Migration to Kubernetes Authentication: เปลี่ยนวิธีการยืนยันตัวตนของ Microservices จาก Credentials แบบดั้งเดิม ไปใช้ Kubernetes Auth Method ซึ่งอนุญาตให้ Pod ยืนยันตัวตนด้วย Service Account Token โดยอัตโนมัติ ทำให้ไม่ต้องฝังข้อมูลลับในโค้ดอีกต่อไป
- Enforcing Least Privilege (Vault Policy): กำหนดและบังคับใช้ Vault Policy อย่างเข้มงวดตามหลักการ สิทธิ์น้อยที่สุดที่จำเป็น โดยผูก Policy ที่อนุญาตให้
readได้เท่านั้น เข้ากับ Vault Role เพื่อจำกัดขอบเขตการเข้าถึงของแต่ละ Service Account - Audit & Lifecycle Management: วางระบบ Audit Log เพื่อบันทึกทุกกิจกรรมการเข้าถึง Secrets และเตรียมพร้อมสำหรับกลไก Rotation Policy และการตรวจสอบ Token Lifecycle เพื่อลดความเสี่ยงจากการรั่วไหลของ Lease Token
การเปลี่ยนผ่านครั้งนี้ช่วยเสริมความแข็งแกร่งด้าน Security Posture ของระบบอย่างมีนัยสำคัญ
🔗 สำหรับรายละเอียดเชิงลึกเกี่ยวกับโครงสร้าง Path, Policy, และ Flow การทำงานทั้งหมด สามารถอ่านเพิ่มเติมได้ที่: Secret Management Deep Dive: Production-Grade Security
File Security & Data Integrity
🔒 การประยุกต์ใช้ PGP Encryption สำหรับการจัดการ Interface File ข้ามระบบ
ในปีนี้ ได้ทำการ รื้อฟื้นความรู้ และปรับปรุงกระบวนการรับส่ง Interface File ที่มีความสำคัญสูง โดยใช้มาตรฐานการเข้ารหัสแบบ PGP (Pretty Good Privacy) กระบวนการนี้ครอบคลุมการแลกเปลี่ยนข้อมูลกับ บริษัทคู่ค้าภายนอก และ หน่วยงานพันธมิตรภายในองค์กร ซึ่งต้องให้ความสำคัญสูงสุดกับ:
- ความลับของข้อมูล (Confidentiality): ต้องมั่นใจว่าไฟล์ถูกอ่านได้โดยผู้รับที่ถูกต้องเท่านั้น
- ความสมบูรณ์ของข้อมูล (Data Integrity): ข้อมูลต้องไม่ถูกแก้ไขระหว่างทาง
สิ่งที่ได้เรียนรู้และบทเรียนสำคัญในปีนี้:
- Key Management Is Critical: บทเรียนสำคัญคือการจัดการ Private Key และ Passphrase อย่างเป็นระบบ โดยเราได้ใช้ HashiCorp Vault เป็นศูนย์กลางในการจัดเก็บ Key Pairs แทนการเก็บ Keys แบบกระจัดกระจาย ทำให้การบริหารจัดการวงจรชีวิตของกุญแจ (Key Lifecycle Management) มีความปลอดภัยและเป็นมาตรฐาน
- PGP Operational Flow: เข้าใจถึงความซับซ้อนของ Flow การเข้ารหัส (Public Key ของผู้รับ) และการถอดรหัส (Private Key ของเรา + Passphrase) และสามารถผสานกระบวนการนี้เข้ากับ Microservice ได้อย่างราบรื่น
- Proactive Monitoring: เรียนรู้การตั้งค่า Monitoring และ Audit Log เพื่อติดตามสถานะ Key Expiry และตรวจจับความผิดปกติในการเข้ารหัส/ถอดรหัสไฟล์ ซึ่งเป็นสิ่งจำเป็นอย่างยิ่งในการทำงานกับข้อมูลที่มีความอ่อนไหว
การจัดการ Interface File ด้วย PGP Encryption ที่มีการบริหาร Keys อย่างเป็นระบบผ่าน Vault ทำให้มั่นใจได้ว่าการแลกเปลี่ยนข้อมูลข้ามระบบเป็นไปตามมาตรฐานความปลอดภัยสูงสุดตลอดทั้งปี
🔗 อ่านรายละเอียดเชิงลึก: ระบบรับส่งไฟล์แบบปลอดภัยด้วย PGP Encryption
AWS Authentication: การยืนยันตัวตนด้วย Key-Based Signature 🔐
🔑 หลักการและกระบวนการ (Asymmetric Authentication Flow)
ได้เรียนรู้และพัฒนาระบบการยืนยันตัวตนแบบ Asymmetric Key-based Signature ระหว่าง Microservice กับ AWS ร่วมกับทีม Security โดยเน้นการใช้ลายเซ็นดิจิทัลแทนการใช้ Access Key/Secret Key แบบดั้งเดิม เพื่อเพิ่มระดับความปลอดภัยและความน่าเชื่อถือ โดยมีขั้นตอนหลักดังนี้:
1. การสร้างและการจัดการ Key Pair (Key Management)
- สร้าง Key Pair (SSH/RSA): สร้าง Key Pair ที่ปลอดภัย (เช่น RSA 3072-bit หรือสูงกว่า) ซึ่งไม่ซ้ำกันสำหรับ Service Identity ของแต่ละ Microservice เพื่อให้สามารถระบุตัวตนและพิสูจน์แหล่งที่มาของ Request ได้
- การจัดเก็บ Private Key ใน Vault: จัดเก็บ Private Key ไว้ใน HashiCorp Vault เท่านั้น ห้ามจัดเก็บในโค้ดหรือ Environment Variable โดย Microservice จะใช้ Service Account Token ในการดึง Private Key มาใช้เพื่อ เซ็น (Sign) Request ณ Runtime
- Key Lifecycle Management: กำหนดนโยบายจัดการวงจรชีวิตของ Keys รวมถึงการบังคับใช้ Key Rotation ตามระยะเวลาที่กำหนด (เช่น ทุก 90 วัน) เพื่อลดความเสี่ยงจากการรั่วไหลของ Key
2. การจัดการสิทธิ์และการผสานรวมกับ AWS IAM
- Upload Public Key: นำ Public Key ที่สร้างขึ้นไปผูกกับ AWS IAM User หรือ Role ที่ถูกสร้างขึ้นสำหรับ Microservice นั้นๆ เพื่อให้ AWS ใช้ในการตรวจสอบลายเซ็น
- กำหนดสิทธิ์แบบ Least Privilege (POLP): กำหนด IAM Policy ที่เข้มงวดและให้สิทธิ์การเข้าถึงทรัพยากร AWS เฉพาะที่จำเป็น ต่อการทำงานของ Microservice นั้นๆ เท่านั้น
- การผูก Key กับ Role: Public Key จะทำหน้าที่เป็นหลักฐานในการยืนยันตัวตน ทำให้ AWS ทราบว่า Request ที่มีลายเซ็นถูกต้องมาจาก Microservice ที่ผูกกับ IAM Role นั้นๆ
3. การพัฒนาระบบ Digital Signature (Sign & Verify)
- พัฒนาระบบ Sign Request: Microservice จะต้องมี Component ที่ทำหน้าที่ เซ็นลายเซ็นดิจิทัล (Digital Signature) บน Canonical Request โดยใช้ Private Key ที่ดึงมาจาก Vault และแนบลายเซ็นนี้ไปกับ Request ที่ส่งไปยัง AWS (เช่น ใน Header
Authorizationหรือ Header เฉพาะ) - Verify Signature บน AWS: AWS จะใช้ Public Key ที่ผูกกับ IAM ในการตรวจสอบความถูกต้องของลายเซ็นและ Request Payload หากลายเซ็นไม่ตรงหรือไม่ถูกต้อง AWS จะ ปฏิเสธ Request ทันที
- Key Management Component: พัฒนา Logic ภายใน Microservice เพื่อจัดการการดึง Key จาก Vault, การเรียกใช้ Cryptographic Library, และการจัดการ Error ที่เกิดขึ้นระหว่างกระบวนการ Sign
💡 สิ่งที่ได้เรียนรู้ (Lessons Learned): การทำงานร่วมกับทีม Security ทำให้ได้เรียนรู้ถึงความสำคัญของการใช้ Asymmetric Key ในการพิสูจน์ตัวตน ซึ่งเป็นวิธีที่ปลอดภัยสูง เนื่องจาก Private Key ไม่เคยส่งผ่านเครือข่าย และสามารถใช้หลักการ Least Privilege ควบคุมสิทธิ์การเข้าถึงทรัพยากร AWS ได้อย่างรัดกุม
SQL Skills
📊 พัฒนาทักษะการเขียน SQL Query
ได้กลับมาทบทวนและฝึกฝนการเขียน SQL ให้มีประสิทธิภาพมากขึ้น โดยมีหัวข้อหลักดังนี้:
- การใช้ Index อย่างมีประสิทธิภาพ -
- การเขียน Complex Queries
- การใช้ JOIN หลากหลายรูปแบบ
- การ Optimize Query Performance
เข้าใจแต่ละหัวข้อ:
-
การใช้ Index
- เลือกใช้ index ให้เหมาะกับ query pattern
- เข้าใจความต่างระหว่าง clustered (จัดเรียงข้อมูลจริงในตาราง) vs non-clustered index (สร้างโครงสร้างแยก)
- ระวัง index ที่ไม่จำเป็นเพราะกระทบ write performance และ storage
-
Complex Queries
- ใช้ HAVING กรอง aggregate results (เช่น กรองผลลัพธ์หลัง GROUP BY)
- ใช้ DISTINCT ลดข้อมูลซ้ำอย่างมีประสิทธิภาพ
- ใช้ subqueries ทั้งแบบ correlated และ non-correlated 🔗 ดูเพิ่มเติม
-
การใช้ JOIN
- INNER JOIN เชื่อมข้อมูลที่มีความสัมพันธ์ (เฉพาะข้อมูลที่ match กัน)
- LEFT/RIGHT JOIN กรณีต้องการข้อมูลฝั่งใดฝั่งหนึ่งครบถ้วน
- FULL OUTER JOIN สำหรับการวิเคราะห์ข้อมูลที่ขาดหาย (รวมข้อมูลทั้งหมดของทั้ง 2 ตาราง)
-
Query Optimization
- ลด full table scan ด้วย proper indexing
- ใช้ EXPLAIN/EXPLAIN ANALYZE วิเคราะห์ execution plan
- แยก aggregate queries เป็น materialized views 🔗 ดูเพิ่มเติม
📚 Further Reading:
- Understanding Subqueries & Performance: sql-subquery-analysis.md
- Working with Materialized Views: sql-materialized-views.md
🚗 ชีวิตประจำวันที่พลิกผัน: จากนั่งทำงานสู่การเดินทางผจญภัย
ปีนี้ชีวิตประจำวันเปลี่ยนไปมากทีเดียว:
การเดินทาง
- ชีวิตติดรถไฟฟ้า: ต้องเดินทางเข้าออฟฟิศลูกค้าแทบทุกวัน โดยใช้รถไฟฟ้าสายสีเหลืองสลับกับรถไฟใต้ดิน
- เพิ่มความเร็วด้วย Grab Bike: ช่วงหลังเริ่มใช้ Grab Bike บ่อยขึ้น เพราะเร็วกว่า แต่ก็ต้องแลกมาด้วยค่าเดินทางที่เพิ่มขึ้นมาก 😅
การแต่งตัว
- เสื้อโปโลกับยีนส์กลายเป็นชุดทำงานหลัก พร้อมกับรองเท้า Sketcher ที่แม้จะไม่สวยแต่ช่วยให้เดินได้ทั้งวันโดยไม่ปวดเท้า
- ผมเซอร์ๆ แบบคนไม่มีเวลาดูแลตัวเอง
🏥 สุขภาพที่ส่งสัญญาณเตือน
ปีนี้ถือว่าเป็นปีที่ร่างกายเตือนหนักมาก:
โรคเก๊าท์ และปัญหาตับ
- เก๊าท์กำเริบหนัก: อาการกำเริบถึง 11 ครั้ง โดยหนักมากในช่วงครึ่งปีแรก แม้จะพยายามคุมอาหารแต่ก็ยังมีพลาดอยู่บ้าง
- ปัญหาตับ: ยังคงมีอาการตับอักเสบอยู่ แต่ข่าวดีคือผลตรวจเลือดและตับช่วงปลายปี (กันยายนถึงตุลาคม) พบว่า ไขมันพอกตับได้หายไปแล้ว
อาการทั่วไป และตัวช่วย
- อาการอ่อนเพลีย: รู้สึกเพลียง่ายและง่วงนอนบ่อยกว่าปกติมาก
- ตัวช่วย: ต้องพึ่งวิตามินหลายตัว ทั้งวิตามินซี, วิตามินบี, น้ำมันตับปลา, และแมกนีเซียม
- ข้อดีหนึ่งเดียว: ดื่มแอลกอฮอล์น้อยลงมาก แต่อาการป่วยต่างๆ ก็ยังคงอยู่ (คาดว่าคงสะสมมานานเกินไป)
ข้อดีเดียวของปี
- ดื่มแอลกอฮอล์น้อยลงมาก
- แต่อาการต่างๆ ก็ยังมา (คงสะสมมานานเกินไป)
💰 จัดระเบียบการเงินใหม่เพื่อความมั่นคง
ปีนี้ได้จัดระเบียบการเงินใหม่เพื่อสร้างความยั่งยืน:
การวางแผน และการลงทุน
- เคลียร์หนี้เก่า: เริ่มต้นปีด้วยการเคลียร์ภาระการเงินเก่าๆ
- วางแผนลงทุนใหม่: ตั้งค่า DCA (Dollar Cost Averaging) ในกองทุนรวมผ่านแอปธนาคาร โดยเลือกทั้งกองทุนลดหย่อนภาษีและกองทุนต่างประเทศที่สนใจ ซึ่งช่วยให้การลงทุนเป็นไปอย่างอัตโนมัติทุกเดือนและไม่ต้องคอยจำว่าต้องลงทุนเมื่อไหร่
การจัดการรายจ่ายที่ง่ายขึ้น
- แยกบัญชีชัดเจน: แยกบัญชีสำหรับเก็บเงินค่าเบี้ยประกัน
- จ่ายตัวเองก่อน: ทันทีที่เงินเดือนเข้า จะทำการแบ่งเงินเก็บและแบ่งไปลงทุนในกองทุนทันที วิธีนี้ช่วยให้ไม่ต้องกังวลเมื่อถึงงวดที่ต้องจ่าย
💭 สรุปและบทเรียนสำคัญ
ปี 2567 เป็นปีแห่งการเรียนรู้และการปรับตัวครั้งใหญ่จริงๆ ครับ แม้จะมีอุปสรรคเรื่องสุขภาพเข้ามากระทบ แต่ผมก็ยังพัฒนาตัวเองในหลายๆ ด้านได้สำเร็จ เรียกได้ว่าเป็นปีที่ “ไม่หวือหวา แต่ก็อยู่รอด” มาได้ด้วยการจัดการที่ดีขึ้น
🙏 ปล. ถ้าใครมีเคล็ดลับดูแลสุขภาพดีๆ ช่วยแนะนำหน่อยนะครับ ตอนนี้พร้อมเปิดรับฟังทุกคำแนะนำจริงๆ ครับ 😅