สรุปปี 2567: บทเรียน Tech, สุขภาพเตือนภัย, และการจัดระเบียบการเงินครั้งใหญ่

Theeruttop (Toppy)

ปี 2024 กับชีวิตแบบ “ไม่หวือหวา แต่อยู่รอด” 😅

ปีนี้เป็นปีที่ท้าทายมาก เพราะได้กลับมาใช้ภาษาอังกฤษในการทำงานอีกครั้ง แม้จะยังไม่คล่องปรื๋อเหมือนเจ้าของภาษา แต่ก็ต้องปรับตัวให้ทัน ที่สำคัญคือได้เรียนรู้ศัพท์เฉพาะทางที่แปลกใหม่ในวงการการเงินและบัญชี บางครั้งแม้แต่แปลเป็นภาษาไทยแล้วก็ยังทำเอาผมงงเป็นไก่ตาแตกเลยทีเดียว 555

📚 ชีวิตการงานที่พลิกโฉม: จาก Software Engineer สู่โลก FinTech

แม้ว่าความรู้ด้าน Software Engineer และ DevOps จะมีจางๆ ไปบ้าง แต่ปีนี้ก็ได้กลับมาปัดฝุ่นและเรียนรู้สิ่งใหม่ๆ มากมาย:

  • ฝึกภาษาอังกฤษทุกวัน: ได้กลับมาทำงานร่วมกับเพื่อนร่วมงานชาวต่างชาติ ทำให้ต้องฝึกทักษะการสื่อสารภาษาอังกฤษเป็นประจำ
  • คลังศัพท์ใหม่: ได้เรียนรู้ศัพท์เฉพาะทางด้านการเงิน การธนาคาร สินเชื่อ และบัตรเครดิต
  • มุมมองการทำงานที่แตกต่าง: ได้เห็นวิธีการแก้ปัญหาและมุมมองการทำงานใหม่ๆ ที่หลากหลาย

ELK Stack & Data Pipeline

ปีนี้ได้พัฒนาและเรียนรู้ระบบ Monitoring สำหรับ Batch Jobs โดยใช้ ELK Stack ซึ่งมีขั้นตอนที่ซับซ้อน:

  1. การออกแบบ Data Pipeline

    • เริ่มจากการวิเคราะห์ข้อมูลที่ต้องการจาก batch jobs
    • ออกแบบ schema ใน Elasticsearch
    • วางแผนการ transform ข้อมูลใน Logstash
  2. การพัฒนา 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
        "
      }
    }
  3. การสร้าง Kibana Dashboard

    • แสดง Job Status Distribution (Success/Failed)
    • ดูแนวโน้มระยะเวลาที่ใช้ในการทำงาน (Show Job Duration Trends)
    • ตั้งค่า Alert เมื่อ job ใช้เวลานานผิดปกติ
    • รวมถึงการ Monitor error rate และ patterns
  4. การวิเคราะห์ 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) กระบวนการนี้ครอบคลุมการแลกเปลี่ยนข้อมูลกับ บริษัทคู่ค้าภายนอก และ หน่วยงานพันธมิตรภายในองค์กร ซึ่งต้องให้ความสำคัญสูงสุดกับ:

  1. ความลับของข้อมูล (Confidentiality): ต้องมั่นใจว่าไฟล์ถูกอ่านได้โดยผู้รับที่ถูกต้องเท่านั้น
  2. ความสมบูรณ์ของข้อมูล (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 ได้อย่างรัดกุม

🔗 อ่านรายละเอียดเพิ่มเติมเกี่ยวกับ AWS Authentication

SQL Skills

📊 พัฒนาทักษะการเขียน SQL Query

ได้กลับมาทบทวนและฝึกฝนการเขียน SQL ให้มีประสิทธิภาพมากขึ้น โดยมีหัวข้อหลักดังนี้:

  1. การใช้ Index อย่างมีประสิทธิภาพ -
  2. การเขียน Complex Queries
  3. การใช้ JOIN หลากหลายรูปแบบ
  4. การ Optimize Query Performance

เข้าใจแต่ละหัวข้อ:

  1. การใช้ Index

    • เลือกใช้ index ให้เหมาะกับ query pattern
    • เข้าใจความต่างระหว่าง clustered (จัดเรียงข้อมูลจริงในตาราง) vs non-clustered index (สร้างโครงสร้างแยก)
    • ระวัง index ที่ไม่จำเป็นเพราะกระทบ write performance และ storage
  2. Complex Queries

    • ใช้ HAVING กรอง aggregate results (เช่น กรองผลลัพธ์หลัง GROUP BY)
    • ใช้ DISTINCT ลดข้อมูลซ้ำอย่างมีประสิทธิภาพ
    • ใช้ subqueries ทั้งแบบ correlated และ non-correlated 🔗 ดูเพิ่มเติม
  3. การใช้ JOIN

    • INNER JOIN เชื่อมข้อมูลที่มีความสัมพันธ์ (เฉพาะข้อมูลที่ match กัน)
    • LEFT/RIGHT JOIN กรณีต้องการข้อมูลฝั่งใดฝั่งหนึ่งครบถ้วน
    • FULL OUTER JOIN สำหรับการวิเคราะห์ข้อมูลที่ขาดหาย (รวมข้อมูลทั้งหมดของทั้ง 2 ตาราง)
  4. Query Optimization

    • ลด full table scan ด้วย proper indexing
    • ใช้ EXPLAIN/EXPLAIN ANALYZE วิเคราะห์ execution plan
    • แยก aggregate queries เป็น materialized views 🔗 ดูเพิ่มเติม

📚 Further Reading:

🚗 ชีวิตประจำวันที่พลิกผัน: จากนั่งทำงานสู่การเดินทางผจญภัย

ปีนี้ชีวิตประจำวันเปลี่ยนไปมากทีเดียว:

การเดินทาง

  • ชีวิตติดรถไฟฟ้า: ต้องเดินทางเข้าออฟฟิศลูกค้าแทบทุกวัน โดยใช้รถไฟฟ้าสายสีเหลืองสลับกับรถไฟใต้ดิน
  • เพิ่มความเร็วด้วย Grab Bike: ช่วงหลังเริ่มใช้ Grab Bike บ่อยขึ้น เพราะเร็วกว่า แต่ก็ต้องแลกมาด้วยค่าเดินทางที่เพิ่มขึ้นมาก 😅

การแต่งตัว

  • เสื้อโปโลกับยีนส์กลายเป็นชุดทำงานหลัก พร้อมกับรองเท้า Sketcher ที่แม้จะไม่สวยแต่ช่วยให้เดินได้ทั้งวันโดยไม่ปวดเท้า
  • ผมเซอร์ๆ แบบคนไม่มีเวลาดูแลตัวเอง

🏥 สุขภาพที่ส่งสัญญาณเตือน

ปีนี้ถือว่าเป็นปีที่ร่างกายเตือนหนักมาก:

โรคเก๊าท์ และปัญหาตับ

  • เก๊าท์กำเริบหนัก: อาการกำเริบถึง 11 ครั้ง โดยหนักมากในช่วงครึ่งปีแรก แม้จะพยายามคุมอาหารแต่ก็ยังมีพลาดอยู่บ้าง
  • ปัญหาตับ: ยังคงมีอาการตับอักเสบอยู่ แต่ข่าวดีคือผลตรวจเลือดและตับช่วงปลายปี (กันยายนถึงตุลาคม) พบว่า ไขมันพอกตับได้หายไปแล้ว

อาการทั่วไป และตัวช่วย

  • อาการอ่อนเพลีย: รู้สึกเพลียง่ายและง่วงนอนบ่อยกว่าปกติมาก
  • ตัวช่วย: ต้องพึ่งวิตามินหลายตัว ทั้งวิตามินซี, วิตามินบี, น้ำมันตับปลา, และแมกนีเซียม
  • ข้อดีหนึ่งเดียว: ดื่มแอลกอฮอล์น้อยลงมาก แต่อาการป่วยต่างๆ ก็ยังคงอยู่ (คาดว่าคงสะสมมานานเกินไป)

ข้อดีเดียวของปี

  • ดื่มแอลกอฮอล์น้อยลงมาก
  • แต่อาการต่างๆ ก็ยังมา (คงสะสมมานานเกินไป)

💰 จัดระเบียบการเงินใหม่เพื่อความมั่นคง

ปีนี้ได้จัดระเบียบการเงินใหม่เพื่อสร้างความยั่งยืน:

การวางแผน และการลงทุน

  • เคลียร์หนี้เก่า: เริ่มต้นปีด้วยการเคลียร์ภาระการเงินเก่าๆ
  • วางแผนลงทุนใหม่: ตั้งค่า DCA (Dollar Cost Averaging) ในกองทุนรวมผ่านแอปธนาคาร โดยเลือกทั้งกองทุนลดหย่อนภาษีและกองทุนต่างประเทศที่สนใจ ซึ่งช่วยให้การลงทุนเป็นไปอย่างอัตโนมัติทุกเดือนและไม่ต้องคอยจำว่าต้องลงทุนเมื่อไหร่

การจัดการรายจ่ายที่ง่ายขึ้น

  • แยกบัญชีชัดเจน: แยกบัญชีสำหรับเก็บเงินค่าเบี้ยประกัน
  • จ่ายตัวเองก่อน: ทันทีที่เงินเดือนเข้า จะทำการแบ่งเงินเก็บและแบ่งไปลงทุนในกองทุนทันที วิธีนี้ช่วยให้ไม่ต้องกังวลเมื่อถึงงวดที่ต้องจ่าย

💭 สรุปและบทเรียนสำคัญ

ปี 2567 เป็นปีแห่งการเรียนรู้และการปรับตัวครั้งใหญ่จริงๆ ครับ แม้จะมีอุปสรรคเรื่องสุขภาพเข้ามากระทบ แต่ผมก็ยังพัฒนาตัวเองในหลายๆ ด้านได้สำเร็จ เรียกได้ว่าเป็นปีที่ “ไม่หวือหวา แต่ก็อยู่รอด” มาได้ด้วยการจัดการที่ดีขึ้น

🙏 ปล. ถ้าใครมีเคล็ดลับดูแลสุขภาพดีๆ ช่วยแนะนำหน่อยนะครับ ตอนนี้พร้อมเปิดรับฟังทุกคำแนะนำจริงๆ ครับ 😅