Bối cảnh và vấn đề nghiên cứu

Trước bối cảnh thị trường lao động tại Việt Nam có sự bão hòa ở một số nhóm ngành truyền thống, nhu cầu nhân lực thuộc lĩnh vực Công nghệ Thông tin (CNTT) lại gia tăng nhanh chóng. Dẫn liệu từ Bộ Thông tin và Truyền thông được tác giả trích dẫn cho thấy, đến năm 2020, Việt Nam ước tính thiếu hụt hơn 500.000 nhân sự IT trong làn sóng chuyển dịch công nghệ. Bên cạnh đó, xu hướng phát triển phần mềm hiện đại hướng mạnh đến tính di động (portable), đa nền tảng (cross-platform), thời gian phản hồi tức thì và năng lực xử lý luồng dữ liệu lớn. Xu hướng tuyển dụng kỹ sư phần mềm đòi hỏi sự hiểu biết toàn diện về phát triển ứng dụng web cả phía máy khách (Front-end) lẫn máy chủ (Back-end) — tức mô hình phát triển Full-stack JavaScript.

Từ thực tế trên, đề tài khóa luận "Xây dựng website tìm việc IT trên nền tảng MEAN Stack" được thực hiện nhằm giải quyết bài toán xây dựng cổng thông tin việc làm chuyên biệt cho lĩnh vực CNTT với trải nghiệm người dùng tối ưu theo mô hình ứng dụng đơn trang (Single Page Application - SPA).

Nhiệm vụ nghiên cứu của đề tài được phân định thành 8 nhiệm vụ cụ thể:

  1. Nghiên cứu tổng quan và chi tiết về nền tảng MEAN Stack (MongoDB, ExpressJS, Angular, NodeJS).
  2. Nghiên cứu nguyên lý xây dựng và ứng dụng giao diện lập trình ứng dụng RESTful API.
  3. Sử dụng thư viện Mongoose để mô hình hóa và định nghĩa cấu trúc dữ liệu cho MongoDB.
  4. Sử dụng ExpressJS để thiết lập hệ thống xử lý phía máy chủ (server-side).
  5. Xây dựng các cổng RESTful API phục vụ trao đổi dữ liệu giữa ExpressJS và MongoDB.
  6. Sử dụng Angular để phát triển giao diện phía máy khách (front-end) theo kiến trúc Single Page Application.
  7. Tích hợp 4 thành phần chính của MEAN Stack kết hợp với dịch vụ của bên thứ ba để hoàn thiện website tìm việc IT.
  8. Tiến hành cài đặt và kiểm thử chức năng toàn bộ ứng dụng.
  • Đối tượng nghiên cứu: Nền tảng MEAN Stack và các công nghệ thành phần (MongoDB, ExpressJS, Angular, NodeJS); ngôn ngữ lập trình TypeScript; mô hình Single Page Application; cơ chế bảo mật web cơ bản; các dịch vụ bên thứ ba bao gồm dịch vụ lưu trữ đám mây AWS S3, công cụ tìm kiếm phân tán Elasticsearch chạy trên Docker và hệ quản trị cơ sở dữ liệu đám mây MongoDB Atlas.
  • Phạm vi nghiên cứu: Nghiên cứu lý thuyết qua tài liệu kỹ thuật chuyên ngành; xây dựng hệ thống phần mềm thử nghiệm phục vụ đối tượng ứng viên ngành CNTT và nhà tuyển dụng doanh nghiệp; thời gian thực hiện đề tài từ ngày 18/03/2019 đến ngày 30/06/2019 tại Khoa Công nghệ Thông tin, Trường Đại học Sư phạm Kỹ thuật TP. Hồ Chí Minh.

Cơ sở lý thuyết và phương pháp

Đề tài vận dụng khung lý thuyết về kiến trúc phần mềm Full-stack JavaScript và các giải pháp đám mây hiện đại:

  • MEAN Stack và các thành phần cốt lõi:

    • NodeJS: Môi trường thực thi JavaScript phía máy chủ xây dựng trên Google V8 JavaScript engine, sử dụng mô hình hướng sự kiện (Event-driven) và cơ chế nhập/xuất không chặn (Non-blocking I/O) trên một luồng đơn (Single Thread) kết hợp Event Loop để tối ưu hiệu năng và tiết kiệm tài nguyên phần cứng so với mô hình đa luồng truyền thống. Quản lý thư viện phụ thuộc thông qua NPM (Node Package Manager).
    • ExpressJS: Web framework tối giản chạy trên nền NodeJS, đóng vai trò quản lý routing, xử lý middleware, tiếp nhận HTTP requests và phản hồi dữ liệu.
    • MongoDB và Mongoose: Cơ sở dữ liệu NoSQL dạng tài liệu (Document Database), lưu trữ dữ liệu dưới định dạng tương tự JSON (BSON), hỗ trợ mở rộng theo chiều ngang (Horizontal Scalable) và loại bỏ các liên kết bảng phức tạp (JOINs). Thư viện Mongoose đóng vai trò là lớp mô hình hóa đối tượng dữ liệu (Object Data Modeling - ODM) kết nối giữa NodeJS/Express và cơ sở dữ liệu MongoDB.
    • Angular và TypeScript: Web framework phía máy khách được bảo trợ bởi Google, triển khai cơ chế Client-Side Rendering, chia nhỏ giao diện thành các Component và tách biệt tác vụ ngầm vào các Service theo mô hình Model-View-ViewModel (MVVM). Ứng dụng viết hoàn toàn bằng TypeScript — ngôn ngữ mã nguồn mở phát triển bởi Microsoft, bổ sung hệ thống kiểu tĩnh (static typing) và các lớp hướng đối tượng cho JavaScript.
  • Kiến trúc RESTful API:

    • Thiết kế tuân thủ 5 ràng buộc chính: Kiến trúc Client-Server, Phi trạng thái (Stateless), Khả năng lưu bộ đệm (Cacheability), Hệ thống phân lớp (Layered System), và Chuẩn hóa giao diện (Uniform Interface) dựa trên định danh tài nguyên URI kết hợp các phương thức HTTP chuẩn (GET, POST, PUT, DELETE).
  • Hạ tầng bổ trợ:

    • Elasticsearch: Bộ máy tìm kiếm phân tán dựa trên nền tảng Apache Lucene, triển khai trong môi trường Docker Container thông qua cấu hình docker-compose, phục vụ tìm kiếm toàn văn bản (Full-text Search) song song với cơ chế $text index của MongoDB.
    • AWS S3 (Amazon Simple Storage Service): Dịch vụ lưu trữ đối tượng trên đám mây dùng để lưu trữ các tệp tĩnh và hình ảnh đại diện của người dùng thông qua hệ thống API chuyên dụng.
  • Phương pháp nghiên cứu thực tế:

    • Phương pháp phân tích - tổng hợp tài liệu chuyên ngành trực tuyến và các tiêu chuẩn kỹ thuật phần mềm.
    • Phương pháp khảo sát, đánh giá hiện trạng các hệ thống thực tế đang hoạt động (Timviecnhanh, ITviec, VietnamWorks, TopCV).
    • Phương pháp mô hình hóa hệ thống bằng biểu đồ ca sử dụng (Use Case Diagram), biểu đồ luồng dữ liệu (Data Flow Diagram - DFD), biểu đồ tuần tự (Sequence Diagram) và bảng thuật toán nghiệp vụ.
    • Phương pháp thực nghiệm phần mềm: Cài đặt mã nguồn, tích hợp hệ thống và kiểm thử chức năng trực tiếp trên môi trường phát triển Visual Studio Code.

Thiết kế và triển khai

Hệ thống được thiết kế theo mô hình phân tách hoàn toàn giữa giao diện người dùng và máy chủ logic thông qua các điểm cuối REST API.

Thành phần kiến trúc Công nghệ sử dụng Chức năng đảm nhiệm
Front-end Client Angular 7, TypeScript, HTML/CSS Điều hướng Single Page Application, bắt sự kiện, hiển thị dữ liệu real-time, gọi API
Back-end Server NodeJS, ExpressJS Tiếp nhận HTTP Request, xử lý logic nghiệp vụ, phân quyền xác thực, điều hướng REST API
Data Persistence MongoDB, Mongoose ODM Lưu trữ dữ liệu cấu trúc document phi quan hệ, quản lý schema nghiệp vụ
Search Engine Elasticsearch, Docker Compose Đánh chỉ mục bài đăng tuyển dụng/doanh nghiệp, phục vụ truy vấn tìm kiếm tốc độ cao
File Storage AWS S3 API Lưu trữ hình ảnh đại diện và tài nguyên tĩnh từ xa, trả về URL truy cập công khai

Cơ chế luồng dữ liệu tìm kiếm và lưu trữ: Khi có yêu cầu tạo hoặc chỉnh sửa dữ liệu (POST/PUT), máy chủ Express đồng thời lưu trữ dữ liệu vào MongoDB thông qua Mongoose và đẩy dữ liệu có cấu trúc vào Elasticsearch Server. Khi người dùng gửi yêu cầu tìm kiếm (GET), hệ thống truy vấn trực tiếp vào Elasticsearch để tối ưu hóa thời gian phản hồi.

Hệ thống cơ sở dữ liệu MongoDB được thiết kế thành 8 Collection chính:

  • Candidate: Thông tin cá nhân, liên lạc và hồ sơ của ứng viên.
  • Resume: Thông tin chi tiết về học vấn, kỹ năng, kinh nghiệm của ứng viên.
  • Recruiter: Hồ sơ doanh nghiệp, thông tin liên lạc, mô tả công ty và danh sách bài tuyển dụng.
  • Authentication: Dữ liệu tài khoản đăng nhập và phân quyền người dùng (Role).
  • Article: Nội dung bài đăng tuyển dụng, yêu cầu công việc, mức lương, địa điểm.
  • Review: Đánh giá của người dùng về doanh nghiệp (điểm số sao, ưu điểm, nhược điểm, phúc lợi).
  • Tag: Danh mục các thẻ kỹ năng lập trình và chuyên môn IT.
  • ReportTag: Dữ liệu thống kê về tần suất xuất hiện và xu hướng kỹ năng/việc làm.

Nội dung chính theo từng chương

Chương 1: Cơ sở lý thuyết

Chương 1 tập trung phân tích tổng quan về Technical Stack, lý do lựa chọn công nghệ và tầm quan trọng của việc xác định đúng stack đối với hiệu năng phần mềm. Nội dung trình bày chi tiết về cấu trúc của MEAN Stack: phân tích cơ chế Non-blocking I/O, Event Loop và Engine V8 của NodeJS; khả năng định tuyến URL và hỗ trợ middleware của ExpressJS; mô hình lưu trữ dạng Document linh hoạt và lược đồ Mongoose của MongoDB; đặc điểm Client-Side Rendering, quản lý Component và ngôn ngữ TypeScript của Angular. Ngoài ra, chương này làm rõ 5 nguyên tắc kiến trúc của RESTful API cùng vai trò của Elasticsearch trên Docker và dịch vụ lưu trữ AWS S3 trong việc nâng cao tốc độ truy xuất của hệ thống.

Chương 2: Phân tích và mô hình hóa yêu cầu

Chương 2 trình bày kết quả khảo sát hiện trạng 4 nền tảng tuyển dụng trực tuyến phổ biến:

Nền tảng Ưu điểm ghi nhận Nhược điểm/Hạn chế
Timviecnhanh Lượng việc làm lớn, đa dạng ngành nghề Giao diện nhiều chữ, UX chưa tối ưu, không có chức năng tạo CV
ITviec Tập trung chuyên ngành IT, giao diện đơn giản Vị trí tập trung chủ yếu ở Hà Nội và TP.HCM, thiếu tạo CV
VietnamWorks Độ phổ biến cao, phân cấp công việc đa dạng Giao diện phức tạp, dữ liệu quá rộng không chuyên biệt IT
TopCV Công cụ tạo CV mạnh, nhiều mẫu tùy biến Tính năng tìm việc chưa tốt, bố trí chức năng phức tạp

Từ kết quả khảo sát, nhóm tác giả xác định các nhóm yêu cầu: lưu trữ, tác vụ, giao diện, tìm kiếm, quản lý và chất lượng hệ thống (bảo mật XSS, SQL injection, clickjacking; cố định trường email để kiểm soát phân quyền). Chương này xây dựng lược đồ Use Case tổng quát với 4 tác nhân (Khách, Ứng viên, Nhà tuyển dụng, Admin) và 20 ca sử dụng chức năng, kèm theo bảng đặc tả chi tiết cho từng luồng nghiệp vụ.

Chương 3: Thiết kế ứng dụng

Chương 3 chi tiết hóa giải pháp kỹ thuật thông qua:

  • Thiết kế luồng dữ liệu: Xây dựng sơ đồ DFD và 11 bảng thuật toán xử lý nghiệp vụ (Đăng ký, Đăng nhập, Tìm kiếm, Cập nhật hồ sơ/CV, Ứng tuyển, Viết đánh giá doanh nghiệp, Quản lý bài đăng tuyển dụng, Quản lý người dùng, Thống kê hệ thống).
  • Thiết kế dữ liệu: Xây dựng lược đồ quan hệ Database Schema và bảng thuộc tính chi tiết cho 8 collection trong MongoDB.
  • Thiết kế tương tác: Xây dựng 13 lược đồ tuần tự (Sequence Diagram) thể hiện sự tương tác qua lại giữa Client, Server và Database cho từng chức năng.
  • Thiết kế giao diện: Xây dựng mô hình chi tiết của hơn 20 màn hình giao diện (Đăng ký, Đăng nhập, Trang chủ, Tìm kiếm công ty, Chi tiết tuyển dụng, Quản lý bài viết, Tạo CV, Đánh giá công ty, Quản trị Admin, Thống kê xu hướng) đi kèm sơ đồ biến cố và danh mục đối tượng điều khiển trên từng giao diện.

Chương 4: Cài đặt và kiểm thử ứng dụng

Chương 4 mô tả quá trình thiết lập môi trường phát triển trên Visual Studio Code, cấu hình Integrated Command Line Interface (CLI) để chạy đồng thời Angular Client trên cổng mặc định 4200 và Express Server. Hệ thống được tiến hành kiểm thử chức năng (Bảng 72) trên các kịch bản thực tế: đăng ký tài khoản theo từng vai trò, đăng nhập phân quyền, tìm kiếm công việc qua bộ lọc, nộp đơn ứng tuyển, cập nhật thông tin CV trực tuyến, đăng bài tuyển dụng, xem danh sách ứng viên nộp hồ sơ, viết đánh giá công ty và các tác vụ quản trị, thống kê của Admin.

Kết quả và đóng góp

  • Kết quả thực nghiệm:

    • Xây dựng hoàn chỉnh website tìm kiếm việc làm IT hoạt động theo cơ chế Single Page Application (SPA), loại bỏ hoàn toàn hiện tượng tải lại trang khi thực hiện các tác vụ điều hướng và gửi/nhận yêu cầu.
    • Xây dựng hệ thống RESTful API hoàn chỉnh trên ExpressJS, kết nối ổn định với cơ sở dữ liệu MongoDB thông qua thư viện Mongoose.
    • Tích hợp thành công công cụ tìm kiếm phân tán Elasticsearch chạy trên nền tảng Docker thông qua tệp cấu hình docker-compose, nâng cao hiệu năng tìm kiếm bài viết và công ty.
    • Tích hợp thành công API của dịch vụ lưu trữ đám mây AWS S3, cho phép người dùng tải lên và truy xuất hình ảnh đại diện qua đường dẫn liên kết công khai.
    • Hoàn thiện hệ thống quản trị hỗ trợ chức năng khóa/mở tài khoản người dùng và biểu đồ trực quan hóa dữ liệu thống kê về xu hướng kỹ năng IT và nhu cầu tuyển dụng.
  • Đóng góp của đồ án:

    • Chứng minh tính khả thi và hiệu quả của việc ứng dụng trọn vẹn mô hình Full-stack JavaScript (MEAN Stack) trong việc phát triển một hệ thống web thương mại hoàn chỉnh với một ngôn ngữ đồng nhất từ máy khách, máy chủ đến cơ sở dữ liệu.
    • Đề xuất mô hình kết hợp giữa website tuyển dụng chuyên ngành CNTT với tính năng viết đánh giá (review) môi trường doanh nghiệp và công cụ tạo hồ sơ ứng viên (CV) trực tiếp trên cùng một nền tảng.

Hạn chế và hướng nghiên cứu tiếp

  • Hạn chế của đề tài:

    • Dữ liệu bài đăng tuyển dụng, hồ sơ ứng viên và đánh giá doanh nghiệp trong hệ thống hiện dừng lại ở quy mô dữ liệu mẫu phục vụ thử nghiệm học thuật, chưa được kiểm thử tải trên môi trường người dùng thực tế số lượng lớn.
    • Trường thông tin tài khoản email đang được cấu hình cố định không cho phép chỉnh sửa sau khi đăng ký nhằm đảm bảo an toàn phân quyền, làm giảm tính linh hoạt của người dùng.
    • Việc cấu hình và triển khai Elasticsearch trên Docker cục bộ đòi hỏi cấu hình phần cứng của máy trạm phát triển phải đáp ứng đủ tài nguyên.
  • Hướng nghiên cứu tiếp theo:

    • Nghiên cứu và tích hợp các thuật toán máy học (Machine Learning) để phát triển hệ thống gợi ý việc làm tự động dựa trên mức độ tương thích giữa kỹ năng trong CV của ứng viên và yêu cầu bài tuyển dụng.
    • Nâng cấp hệ thống xác thực người dùng bằng cơ chế xác thực đa yếu tố và cho phép người dùng thay đổi địa chỉ email một cách an toàn.
    • Đóng gói toàn bộ hệ thống (Front-end, Back-end, Database) để triển khai tự động lên các nền tảng điện toán đám mây quy mô lớn.

Giá trị tham khảo

  • Đối tượng thụ hưởng:
    • Sinh viên chuyên ngành Công nghệ phần mềm, Hệ thống thông tin hoặc Khoa học máy tính cần tài liệu tham khảo thực tế về quy trình xây dựng ứng dụng Single Page Application với MEAN Stack.
    • Các lập trình viên hoặc nhóm phát triển đang nghiên cứu giải pháp tích hợp song song cơ sở dữ liệu NoSQL (MongoDB) với công cụ tìm kiếm chuyên dụng (Elasticsearch) và dịch vụ lưu trữ tệp tin đám mây (AWS S3).
  • Phần nội dung có giá trị tham khảo cao:
    • Quy trình mô hình hóa yêu cầu phần mềm ở Chương 2 và Chương 3, đặc biệt là hệ thống sơ đồ luồng dữ liệu (DFD), bảng thuật toán xử lý nghiệp vụ và các lược đồ tuần tự (Sequence Diagram).
    • Cấu trúc tổ chức thư mục của ExpressJS, cách thiết lập định tuyến RESTful API và phương pháp định nghĩa Schema dữ liệu Mongoose cho cơ sở dữ liệu hướng tài liệu.

Câu hỏi thường gặp

1. Khóa luận sử dụng những công nghệ nào để tạo thành nền tảng phát triển ứng dụng? Khóa luận sử dụng nền tảng MEAN Stack bao gồm 4 công nghệ cốt lõi: MongoDB (Cơ sở dữ liệu NoSQL), ExpressJS (Web framework máy chủ), Angular (Web framework máy khách phiên bản Angular 7 dùng TypeScript) và NodeJS (Môi trường thực thi JavaScript phía máy chủ). Ngoài ra, hệ thống tích hợp công cụ tìm kiếm Elasticsearch (chạy trên Docker) và dịch vụ lưu trữ AWS S3 của Amazon.

2. Tại sao hệ thống lại sử dụng Elasticsearch song song với cơ sở dữ liệu MongoDB? Mặc dù MongoDB có hỗ trợ cơ chế đánh chỉ mục văn bản ($text index) và Search Full Text, nhóm tác giả vẫn tích hợp thêm Elasticsearch chạy trên Docker để phục vụ chức năng tìm kiếm bài đăng và công ty. Việc này nhằm tối ưu hóa tốc độ truy vấn, tận dụng khả năng tìm kiếm phân tán mạnh mẽ của Apache Lucene và đảm bảo khả năng mở rộng hệ thống trong tương lai.

3. Cơ sở dữ liệu của website gồm những bảng (collection) nào? Hệ thống cơ sở dữ liệu MongoDB được thiết kế gồm 8 collection: Candidate (thông tin ứng viên), Resume (hồ sơ/CV), Recruiter (thông tin nhà tuyển dụng), Authentication (tài khoản và phân quyền), Article (bài viết tuyển dụng), Review (đánh giá công ty), Tag (thẻ kỹ năng) và ReportTag (dữ liệu báo cáo thống kê xu hướng).

4. Hệ thống phân quyền cho những nhóm đối tượng người dùng nào? Hệ thống phân định 4 nhóm tác nhân:

  • Khách: Đăng ký tài khoản, tìm kiếm công việc, tìm kiếm công ty.
  • Ứng viên: Đăng nhập, quản lý thông tin cá nhân và CV, nộp đơn ứng tuyển (Apply), viết đánh giá công ty.
  • Nhà tuyển dụng: Đăng nhập, cập nhật thông tin doanh nghiệp, đăng/sửa/xóa/xem lại bài tuyển dụng, xem hồ sơ ứng viên nộp đơn, xem đánh giá về công ty.
  • Admin: Quản lý danh sách ứng viên và nhà tuyển dụng (khóa/mở tài khoản), xem thống kê biểu đồ về xu hướng kỹ năng lập trình và nhu cầu việc làm.

5. Cơ chế xử lý tệp tin hình ảnh trong đồ án được triển khai như thế nào? Thay vì lưu trữ trực tiếp các tệp hình ảnh tĩnh (như ảnh đại diện người dùng, logo công ty) trên máy chủ cục bộ, hệ thống sử dụng API của dịch vụ đám mây AWS S3 để đẩy tệp lên đám mây của Amazon và nhận lại một đường dẫn URL công khai để lưu vào cơ sở dữ liệu.

Kết luận

Khóa luận tốt nghiệp của sinh viên Đỗ Quốc Việt và Nguyễn Thế Vinh đã nghiên cứu và ứng dụng thành công nền tảng MEAN Stack để xây dựng website tìm việc làm chuyên biệt cho ngành Công nghệ Thông tin theo chuẩn ứng dụng Single Page Application. Đề tài hoàn thành đầy đủ các giai đoạn từ khảo sát hiện trạng, phân tích yêu cầu, thiết kế kiến trúc luồng dữ liệu, lược đồ CSDL NoSQL cho đến cài đặt và kiểm thử chức năng. Công trình thể hiện năng lực kết hợp hiệu quả giữa công nghệ Full-stack JavaScript với các giải pháp bổ trợ hiện đại như Elasticsearch trên Docker và dịch vụ lưu trữ AWS S3, mang lại giá trị tham khảo thiết thực cho các đề tài phát triển phần mềm ứng dụng.