Skip to content

rushmi0/Jungmha

Repository files navigation

Jungmha คือแพลตฟอร์มที่มุ่งเน้นให้บริการตัวกลางสำหรับคนที่รักสุนัข บางครั้งอาจไม่สามารถหรือไม่มีเวลาดูแลหรือพาเพื่อนสุนัขของเขาไปเดินเล่น และสำหรับผู้ที่มีความสามารถและความประสงค์ที่จะรับจ้างนำสุนัขไปเดินเล่น


ผู้ใช้บริการ

สามารถค้นหาคนที่พื้นที่ใกล้ตนเองได้ และกำการจองช่วงเวลาได้ตามตารางของของคนรับจ้างก็ต่อเมื่อได้ลงทะเบียนแล้ว

ผู้รับจ้าง

ในส่วนของรับจ้างสามารถปรับแก้ไขข้อมูลรายละเอียดราคาหรือพื้นที่ให้บริการ และยังสามารถยอมรับหรือปฏิเสธการจองได้


Backend ผมออกแบบ โดยแบ่งออกเป็นส่วนการทำงาน 4ชั้น

ชั้นที่ 1 Service

  • ✨ ส่วนของการจัดส่งข้อมูล ที่จะให้บริการต่างๆแก่ Frontend

ชั้นที่ 2 Business Logic

  • ✨ สำหรับการทำงานของ Method หรือ ส่วนการคำนวณต่างๆ

ชั้นที่ 3 Connect and Execute SQL statement

  • ✨ ในส่วนนี้จะเป็นการเชื่อมกับฐานข้อมูลและดำเนินการ SQL และ จัดเตรียมรูปแบบข้อมูล ที่จะส่งให้ ขั้นที่ 2 ไปคำนวณต่อ

ชั้นที่ 4 Database

  • ✨ ฐานข้อมูลนี้คือก้อนของข้อมูล ที่มีการเก็บข้อมูลต่างๆไว้ และในส่วนนนี้ยังมีการ เขียนโปรแกรมทำอะไรบ้างอย่างกับข้อมูล เพื่อให้ฐานข้อมูลฉลาดขึ้น จะได้ลดภาระ หรือลดโค้ดในชั้นที่ 2 และ 3

Tech Stack

Backend

IntelliJ SonarQube SonarQube Micronaut GraalVM Kotlin PostgreSQL Docker fedora

Frontend

WebStorm Visual Studio Code Tailwind CSS Daisy UI JavaScript React Node.js Vite

Sequence Diagram

ระบบลงทะเบียนและเข้าสู่ระบบ

Account Register

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

Elliptic Curve

ใช้ Elliptic Curve และเส้นโค้ง Secp256k1 ในการสร้าง Public Key เป็นรูปแบบบีบอัดขนาด 33 Bytes

Important

Private Key นั้นสร้างโดยนำ Password มา Hash ด้วย Sha256 ทั้งหมด 7,200 รอบ เพื่อถ่วงเวลาพวกที่จะมา brute force

ECDH Share Key

ต่อไปใช้ ECDH Key Exchange เพื่อสร้าง Private Key ใหม่ โดยในกระบวนการนี้ Client และ Server จะแลกเปลี่ยน Public Key เพื่อสร้างกุญแจที่ใช้ในการเข้ารหัสข้อมูล

ChaCha20

สุดท้ายใช้ ChaCha20 เพื่อเข้ารหัสข้อมูล โดยใช้ Private Key ที่ได้จากขั้นตอน ECDH

Log in

การเข้าสู่ระบบเพื่อเข้าใช้งานนั้น Client ต้องสร้างลายเซ็นดิจิตอล และส่งไปให้ Server เมื่อทาง Server ตรวจสอบเลยเซ็นแล้วพบว่าถูกต้อง จากนั้นจะส่ง Access token กลับไปให้ Client

วิธีการทำงาน

ECDSA

นำข้อความที่กำหนดมา Hash ด้วย Sha256 เพียงครั้งเดียว แล้วนำ Private Key มาใช้สร้างลายเซ็นแบบ ECDSA แล้วส่งไปให้ Server เพื่อรับ Access token

Important

ลายเซ็นที่สร้างขึ้นใช้งานได้ครั่งเดียวเท่านั้น ไม่สามารถใช้ซ้ำได้


ขั้นตอนการติดตั้งและใช้งาน

เริ่มต้นด้วยการคัดลอกโปรเจ็กต์จาก GitHub และเข้าไปยังไดเร็กทอรีของโปรเจ็กต์ที่คุณได้คัดลอก

git clone https://github.com/rushmi0/Jungmha.git
cd Jungmha

ติดตั้ง GraalVM Community Edition สำหรับ JDK17

  1. ดาวน์โหลด GraalVM จากลิงก์นี้: GraalVM CE Builds
  2. ติดตั้ง GraalVM ตามขั้นตอนการติดตั้งที่เหมาะสมกับระบบปฏิบัติการที่ใช้

กำหนดตัวแปรสภาพแวดล้อม

กำหนดตัวแปร JAVA_HOME และปรับ PATH เพื่อให้ระบบรู้ถึงที่ติดตั้งของ GraalVM

export JAVA_HOME=/home/$(whoami)/to/path/graalvm-ce-17.0.9
export PATH=$JAVA_HOME/bin:$PATH
source ~/.zshrc  # หรือใช้ .bashrc หากใช้ bash

คำสั่งในการใช้ GraalVM ในการคอมไพล์ไปเป็น native binaries

การใช้ GraalVM เพื่อคอมไพล์โปรแกรมเป็นไฟล์ native binaries ทำให้โปรแกรมสามารถทำงานได้โดยไม่ต้องใช้ Java Virtual Machine (JVM) อีกต่อไป นี่คือคำสั่งใน Gradle เพื่อใช้งาน GraalVM ในการคอมไพล์โปรแกรม

คำสั่งนี้จะใช้ GraalVM เพื่อคอมไพล์โปรแกรมไปเป็น native binaries

chmod +x run_native-image.sh
./run_native-image.sh

คำสั่งนี้จะใช้ GraalVM เพื่อคอมไพล์โปรแกรมไปเป็น native binaries โดยมีการปรับปรุงเพิ่มเติมในกระบวนการคอมไพล์เพื่อให้ได้ผลที่เร็วและมีประสิทธิภาพมากที่สุดที่เป็นไปได้

chmod +x run_jvm.sh
./run_jvm.sh

การใช้งานสำหรับ Docker

🔧 ⚙️ Just-in-time (JIT) compilation

แปลงไปเป็น bytes code แล้วใช้ Java Virtual Machine (JVM) ในการรันโปรแกรม

docker compose up -d jungmhaDB jungmha-jvm-app

🔧 ⚙️ Ahead-of-time (AOT) compilation

แปลงโค้ดไปเป็น native binaries ของแพลตฟอร์มนั้นๆ แล้วรันได้โดยตรง ดังนี้

docker compose up -d jungmhaDB jungmha-native-image

เอกสารการใช้งาน API