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

Mạng xã hội ra đời từ năm 1995 với sự xuất hiện của trang web Classmate nhằm mục đích kết nối bạn học. Trải qua gần ba thập kỷ phát triển khoa học và công nghệ, các ứng dụng chia sẻ thông tin và mạng xã hội trên nền tảng thiết bị điện tử đã gia tăng mạnh mẽ cả về số lượng lẫn tầm ảnh hưởng xã hội. Dữ liệu thống kê về hành vi người dùng tại thị trường Việt Nam cho thấy mỗi tháng có khoảng 30 triệu người sử dụng Facebook, trong đó 27 triệu người truy cập thông qua thiết bị di động. Xét trên phạm vi hàng ngày, lượng người truy cập đạt 20 triệu người nói chung và 17 triệu người qua thiết bị di động, với thời gian sử dụng trung bình đạt 2,5 giờ mỗi ngày. Đồng thời, khảo sát xã hội học trong lĩnh vực Internet ghi nhận hơn 95% người dùng truy cập Internet với mục đích đọc thông tin, chủ yếu thông qua các website tổng hợp và nền tảng mạng xã hội.

Xuất phát từ thực tiễn trên cùng mong muốn chuyển dịch từ vai trò người sử dụng sang người phát triển hệ thống để giải quyết bài toán tương tác trực tuyến, nhóm tác giả đã thực hiện đề tài "Xây dựng mạng xã hội sử dụng MERN Stack" tại Khoa Công nghệ Thông tin, Trường Đại học Sư phạm Kỹ thuật TP. Hồ Chí Minh.

Mục tiêu tổng quát của đề tài là xây dựng một trang mạng xã hội hoàn chỉnh, tạo lập môi trường chia sẻ thông tin và giao lưu kết nối cộng đồng không bị giới hạn bởi yếu tố địa lý và thời gian. Nhiệm vụ nghiên cứu được phân định thành hai nhóm chính:

  1. Nhiệm vụ lý thuyết: Nghiên cứu và làm chủ các công nghệ nền tảng bao gồm mô hình MERN Stack (MongoDB, ExpressJS, ReactJS, NodeJS), chuẩn kiến trúc RESTful API và cơ chế xác thực JSON Web Token (JWT).
  2. Nhiệm vụ thực hành:
    • Sử dụng RESTful API, NodeJS và ExpressJS để lập trình hệ thống API cho các module chức năng.
    • Thiết kế và triển khai cơ sở dữ liệu MongoDB phục vụ lưu trữ thông tin người dùng và dữ liệu tương tác.
    • Ứng dụng JSON Web Token để quản lý xác thực và phân quyền truy cập cho toàn bộ hệ thống API.
    • Sử dụng thư viện/framework ReactJS để thiết kế và xử lý giao diện tương tác người dùng phía front-end.

Đối tượng nghiên cứu của khóa luận là nhu cầu chia sẻ, tiếp nhận thông tin của người dùng và các công nghệ phát triển ứng dụng web full-stack. Phạm vi nghiên cứu tập trung vào việc xử lý các nghiệp vụ cốt lõi của một hệ thống mạng xã hội (tạo, duyệt, chỉnh sửa, xóa, tương tác bài viết, kết bạn, nhắn tin, quản trị người dùng) cùng hệ thống API tương ứng. Thời gian thực hiện đề tài kéo dài từ ngày 14/02/2021 đến ngày 10/07/2022 theo kế hoạch 15 tuần.


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

Khóa luận xây dựng hệ thống dựa trên mô hình kiến trúc 3 tầng (3-tier architecture): Tầng hiển thị (Front-end: ReactJS), Tầng ứng dụng (Back-end: NodeJS, ExpressJS) và Tầng cơ sở dữ liệu (Database: MongoDB). Hai tầng front-end và back-end giao tiếp thông qua giao thức HTTP theo chuẩn kiến trúc RESTful API.

+-------------------------------------------------------------+
|               TẦNG HIỂN THỊ (FRONT-END)                     |
|        ReactJS (Virtual DOM, One-Way Data Binding)          |
+------------------------------+------------------------------+
                               | RESTful API / JSON (HTTP Methods)
                               | Xác thực qua JSON Web Token (JWT)
+------------------------------v------------------------------+
|               TẦNG ỨNG DỤNG (BACK-END)                      |
|  NodeJS (V8 Engine, libuv, Event Loop, Non-Blocking I/O)    |
|  ExpressJS (Routing, Middleware, API Endpoints)             |
+------------------------------+------------------------------+
                               | Cổng kết nối 27017
                               | Truy vấn / JSON Documents
+------------------------------v------------------------------+
|               TẦNG CƠ SỞ DỮ LIỆU (DATABASE)                 |
|  MongoDB (NoSQL, Collections, Documents, Replica Set,       |
|           Sharding, GridFS, Capped Collections)             |
+-------------------------------------------------------------+

Khung lý thuyết và công nghệ chuyên sâu được tác giả phân tích bao gồm:

  • NodeJS: Nền tảng phát triển ứng dụng web back-end xây dựng trên V8 JavaScript Engine của Google, tầng trừu tượng libuv và thư viện lõi. NodeJS hoạt động theo mô hình hướng sự kiện bất đồng bộ (asynchronous event-driven), đơn luồng (single-threaded) kết hợp cơ chế Event Loop và Non-blocking I/O, cho phép tiếp nhận hàng chục ngàn kết nối đồng thời và chỉ phân bổ luồng xử lý riêng cho các tác vụ I/O gây nghẽn (blocking I/O như truy vấn database, hệ thống tệp).
  • ExpressJS: Framework tối giản chạy trên nền NodeJS, hỗ trợ thiết lập hệ thống định tuyến (routing) theo các phương thức HTTP (GET, POST, PUT, PATCH, DELETE), quản lý chuỗi xử lý trung gian (middleware) để can thiệp và kiểm soát luồng request/response.
  • MongoDB: Hệ quản trị cơ sở dữ liệu NoSQL hướng tài liệu (document-oriented), hoạt động ngầm qua cổng mặc định 27017. Dữ liệu được tổ chức dưới dạng Database, Collection và Document (định dạng tương tự JSON). Mỗi bản ghi tự động gắn khóa chính _id có đánh chỉ mục (index). Dữ liệu được ghi đệm trên RAM và đồng bộ xuống ổ cứng sau mỗi chu kỳ 60 giây. Hệ thống hỗ trợ truy vấn ad-hoc, nhân bản dữ liệu (Replica Set gồm bản sao chính và thứ cấp), cân bằng tải ngang bằng Sharding (thông qua Shard key), lưu trữ tệp phân tán GridFS, xử lý tập hợp (Aggregation Pipeline, MapReduce), Collection giới hạn kích thước (Capped Collection) và hỗ trợ giao dịch ACID đa tài liệu từ phiên bản 4.0 (tháng 6/2018).
  • RESTful API: Tiêu chuẩn thiết kế giao diện lập trình ứng dụng dựa trên các phương thức chuẩn của giao thức HTTP tương ứng với các tác vụ CRUD (Create - POST, Read - GET, Update - PUT, Delete - DELETE).
  • ReactJS: Thư viện giao diện người dùng phát triển bởi Facebook, sử dụng cơ chế Virtual DOM (DOM ảo) để so sánh và chỉ cập nhật những phần tử thay đổi trên DOM thật, kết hợp luồng dữ liệu một chiều (one-way data binding) truyền qua props.
  • JSON Web Token (JWT - RFC 7519): Chuẩn mở truyền tin an toàn dưới dạng đối tượng JSON mã hóa Base64URL, gồm 3 phần phân tách bằng dấu chấm: Header (loại token và thuật toán ký HMAC/RSA), Payload (chứa các claims: reserved, public, private claims) và Signature (chữ ký số xác thực tính toàn vẹn). JWT đóng vai trò khóa xác thực trên HTTP Header hoặc URL, giúp hệ thống không phụ thuộc vào session/cookie và tránh các xung đột chia sẻ tài nguyên chéo nguồn (CORS).

Phương pháp nghiên cứu thực tế được triển khai bao gồm:

  1. Phương pháp khảo sát hiện trạng và phân tích so sánh: Khảo sát layout giao diện (Header, Body: trái, giữa, phải) và tính năng vận hành của 3 nền tảng mạng xã hội thực tế: Facebook (facebook.com), LinkedIn (linkedin.com) và Gapo (gapo.vn).
  2. Phương pháp mô hình hóa yêu cầu phần mềm: Phân tích yêu cầu chức năng, yêu cầu phi chức năng và thiết lập hệ thống biểu đồ Use Case cho hai tác nhân chính (Người dùng và Quản trị viên).
  3. Phương pháp thiết kế hướng đối tượng: Xây dựng 15 biểu đồ tuần tự (Sequence Diagram) chi tiết cho các luồng nghiệp vụ, xây dựng biểu đồ lớp (Class Diagram) và thiết kế hệ thống màn hình giao diện người dùng.
  4. Phương pháp kiểm thử phần mềm: Thiết lập ma trận kế hoạch kiểm thử đa diện (chức năng, thiết bị, luồng dữ liệu, UI/UX) và quy trình theo dõi, phân loại lỗi phần mềm.

Nguồn dữ liệu của khóa luận bao gồm tài liệu kỹ thuật chuyên ngành, tài liệu chuẩn RFC 7519, số liệu thống kê người dùng Internet tại Việt Nam và dữ liệu khảo sát thực nghiệm trên các hệ thống mạng xã hội hiện hành.


Thiết kế và triển khai

Hệ thống được thiết kế theo cấu trúc phần mềm hướng dịch vụ với các thành phần xử lý rõ ràng giữa giao diện người dùng, bộ điều khiển API và cơ sở dữ liệu:

Phân tích Use Case và luồng nghiệp vụ

Hệ thống xác định hai nhóm tác nhân tương tác chính:

  • Tác nhân Người dùng (User): Thực hiện các nhóm chức năng gồm quản lý phiên (Đăng nhập, Đăng ký, Khôi phục mật khẩu, Đổi mật khẩu); quản lý bài viết cá nhân (Tạo, Chỉnh sửa, Xóa bài viết); tương tác nội dung (Bình luận, Chỉnh sửa/Xóa bình luận, Thích bài viết, Báo cáo bài viết); quản lý quan hệ bạn bè (Gửi lời mời kết bạn, Chấp nhận kết bạn, Hủy kết bạn); quản lý hồ sơ cá nhân (Chỉnh sửa thông tin, Thay đổi ảnh đại diện và ảnh bìa, Cập nhật sở thích); quản lý nhóm (Tạo nhóm, Tham gia nhóm).
  • Tác nhân Quản trị viên (Admin): Quản lý danh sách tài khoản người dùng (khóa/mở khóa, phân quyền); quản lý toàn bộ bài viết trên hệ thống (kiểm duyệt, xóa bài viết vi phạm); theo dõi biểu đồ thống kê tương tác và các bài viết bị báo cáo nội dung.

Thiết kế giao diện và tương tác API

Khóa luận đã hoàn thành thiết kế chi tiết cho 23 giao diện chức năng của hệ thống:

STT Tên màn hình giao diện Mô tả chức năng chính
1 Giao diện đăng nhập / đăng ký / quên mật khẩu Xác thực tài khoản, tạo mới người dùng, gửi token khôi phục
2 Giao diện trang chủ (Newsfeed) Hiển thị bảng tin, thanh tạo bài viết nhanh, danh sách tương tác
3 Giao diện bài viết và tương tác Hiển thị nội dung đa phương tiện, đếm lượt thích, khung bình luận
4 Giao diện quản lý quan hệ bạn bè Danh sách lời mời kết bạn, gợi ý kết bạn, danh sách bạn bè
5 Giao diện thông báo Danh sách thông báo tương tác, thông báo kết bạn theo thời gian thực
6 Giao diện quản lý hồ sơ cá nhân Chỉnh sửa thông tin, cập nhật ảnh đại diện/ảnh bìa, quản lý sở thích
7 Giao diện hội nhóm Tạo nhóm mới, quản lý thành viên, danh sách bài đăng trong nhóm
8 Giao diện quản trị hệ thống (Admin) Dashboard biểu đồ thống kê, bảng quản lý người dùng, bảng quản lý bài viết

Luồng dữ liệu vào - ra giữa client và server được kiểm soát chặt chẽ thông qua Interceptor. Mỗi request từ client bắt buộc đính kèm JWT trên header; server xác thực tính hợp lệ của token trước khi chuyển giao tiếp cho controller xử lý truy vấn dữ liệu từ MongoDB.

Quy trình kiểm thử hệ thống

Nhóm tác giả thiết lập kế hoạch kiểm thử chi tiết nhằm đánh giá độ tin cậy của phần mềm:

  • Kiểm thử chức năng (Functional Testing): Đánh giá tính chính xác của toàn bộ 15 ca sử dụng chính (đăng nhập, tạo bài viết, bình luận, kết bạn, quản lý phân quyền...).
  • Kiểm thử thiết bị (Device Testing): Kiểm tra khả năng tương thích và đáp ứng giao diện trên nhiều kích thước màn hình (máy tính để bàn, máy tính xách tay, máy tính bảng, điện thoại di động).
  • Kiểm tra luồng dữ liệu (Data Flow Testing): Kiểm soát chu trình xử lý dữ liệu giữa ReactJS, ExpressJS Middleware, JWT Interceptor và MongoDB.
  • Kiểm thử UI/UX: Đánh giá trải nghiệm thao tác, tính trực quan và tốc độ phản hồi của giao diện.
  • Quy trình quản lý lỗi: Phân loại lỗi theo mức độ nghiêm trọng và áp dụng quy trình xử lý lỗi chuẩn từ phát hiện, gán quyền xử lý, sửa lỗi đến kiểm thử lại (re-test).

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

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

Chương 1 tập trung tổng quan nền tảng lý thuyết và công nghệ xây dựng hệ thống. Tác giả trình bày chi tiết kiến trúc 3 tầng tổng thể; cấu tạo lõi của NodeJS với V8 JavaScript engine và libuv; cơ chế vận hành của Single-Threaded Event Loop giúp hệ thống giải phóng tài nguyên xử lý bằng non-blocking I/O thay vì tạo luồng mới tốn bộ nhớ RAM; kiến trúc phân tầng middleware và routing trong ExpressJS.

Chương này cũng phân tích sâu cấu trúc cơ sở dữ liệu NoSQL MongoDB, làm rõ các khái niệm Database, Collection, Document, chỉ ra sự linh hoạt của schema động so với cơ sở dữ liệu quan hệ (RDBMS). Các tính năng nâng cao của MongoDB như Replica Set, Sharding phân mảnh dữ liệu, lưu trữ GridFS, Aggregation Pipeline và hỗ trợ giao dịch ACID đa tài liệu từ bản 4.0 cũng được hệ thống hóa.

Bên cạnh đó, chương 1 phân tích nguyên lý hoạt động của RESTful API với các phương thức GET, POST, PUT, DELETE; cấu trúc thư viện ReactJS với Virtual DOM và cơ chế luồng dữ liệu một chiều; cùng cấu trúc 3 phần và quy trình mã hóa chữ ký của tiêu chuẩn JSON Web Token (RFC 7519).

+-----------------------------------------------------------------------------------+
|                     CẤU TRÚC JSON WEB TOKEN (RFC 7519)                            |
+-----------------------------------------------------------------------------------+
|  1. HEADER (Base64URL)      | { "alg": "HS256", "typ": "JWT" }                    |
|  2. PAYLOAD (Base64URL)     | { "sub": "18110277", "role": "user", "iat": ... }   |
|  3. SIGNATURE (Base64URL)   | HMACSHA256(base64Url(header) + "." +                |
|                             |            base64Url(payload), secretKey)           |
+-----------------------------------------------------------------------------------+

Chương 2: Khảo sát hiện trạng mô hình hóa yêu cầu

Chương 2 trình bày kết quả khảo sát thực tế trên 3 nền tảng mạng xã hội tiêu biểu:

  • Facebook.com: Khảo sát các tính năng nổi bật (kết nối bạn bè, chia sẻ story, tạo Fanpage bán hàng, gắn thẻ nhận diện khuôn mặt, tạo thăm dò ý kiến) và phân tích bố cục giao diện trang chủ gồm thanh điều hướng trên cùng (Header) và 3 cột nội dung (Body: cột trái điều hướng/nhóm, cột trung tâm hiển thị story/bảng tin, cột phải hiển thị quảng cáo/danh sách bạn bè trực tuyến).
  • LinkedIn.com: Khảo sát các tính năng hướng nghiệp (kết nối tuyển dụng, giới thiệu kinh nghiệm làm việc, đồng bộ tài nguyên với PowerPoint/Amazon/Twitter) và cấu trúc giao diện tập trung vào hồ sơ cá nhân và mạng lưới doanh nghiệp.
  • Gapo.vn: Khảo sát các tính năng bản địa hóa (trang trí bài viết cá nhân, kết bạn theo vị trí địa lý, định danh tài khoản chính chủ) và cách tổ chức các bộ lọc chủ đề bài viết ở cột bên trái bảng tin.

Dựa trên kết quả khảo sát, chương 2 xác định danh mục yêu cầu chức năng (lưu trữ dữ liệu người dùng, tương tác, phân quyền; tra cứu thông tin; thống kê tương tác và báo cáo vi phạm) và yêu cầu phi chức năng (tốc độ tìm kiếm, tính chính xác, tối ưu hóa không gian lưu trữ, giảm độ trễ truyền tải, nâng cao trải nghiệm người dùng). Nội dung chương kết thúc bằng hệ thống lược đồ Use Case tổng quát và 8 lược đồ Use Case phân rã chi tiết cho từng tác vụ của Người dùng và Quản trị viên.

Chương 3: Thiết kế phần mềm

Chương 3 chi tiết hóa giải pháp kỹ thuật thông qua việc xây dựng 15 lược đồ tuần tự (Sequence Diagram) biểu diễn dòng dữ liệu và thông điệp qua lại giữa các đối tượng trong hệ thống cho các ca sử dụng: Đăng nhập, Đăng ký, Quên mật khẩu, Tạo bài viết, Chỉnh sửa bài viết, Xóa bài viết, Tạo bình luận, Chỉnh sửa bình luận, Xóa bình luận, Thích bài viết, Chỉnh sửa trang cá nhân, Đổi mật khẩu, Hủy kết bạn, Chấp nhận kết bạn, Gửi lời mời kết bạn.

Chương này cũng thiết lập lược đồ lớp (Class Diagram) tổng thể biểu diễn mối quan hệ giữa các thực thể phần mềm và hoàn thiện đặc tả thiết kế cho 23 màn hình giao diện người dùng và quản trị, kèm theo bảng mô tả chi tiết các thành phần giao diện từ Bảng 24 đến Bảng 46.

Chương 4: Kiểm thử ứng dụng

Chương 4 thiết lập khung kiểm thử phần mềm toàn diện nhằm đánh giá chất lượng sản phẩm trước khi đưa vào vận hành. Nhóm tác giả xác định rõ mục đích, lịch trình, phạm vi kiểm thử (phân định các chức năng được kiểm thử và chức năng không kiểm thử) cùng bảng phân bổ tài nguyên phần mềm và môi trường kiểm thử.

Chương này trình bày bảng phân công kiểm thử chi tiết và thực thi các chiến lược kiểm thử cụ thể:

  • Bảng 50: Kiểm thử chức năng hệ thống.
  • Bảng 51: Kiểm thử độ tương thích thiết bị.
  • Bảng 52: Kiểm tra luồng dữ liệu vào - ra qua các tầng API.
  • Bảng 53: Kiểm thử giao diện và trải nghiệm người dùng (UI/UX).
  • Bảng 54: Thiết lập bảng phân loại mức độ nghiêm trọng của lỗi và mô hình hóa quy trình chuẩn về tiếp nhận, khắc phục và đóng lỗi.

Chương 5: Cài đặt ứng dụng

Chương 5 trình bày quá trình đóng gói, cấu hình môi trường và triển khai thực tế hệ thống website mạng xã hội. Tác giả tổng hợp quy trình tích hợp giữa client ReactJS, hệ thống máy chủ Node.js/ExpressJS và hệ quản trị cơ sở dữ liệu MongoDB, bảo đảm các thành phần liên kết thông suốt thông qua cấu hình môi trường và cơ chế xác thực JWT.


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

Khóa luận đã hoàn thành đầy đủ các mục tiêu nghiên cứu và nhiệm vụ thực hành đã đăng ký trong đề cương chi tiết:

Hạng mục Công nghệ triển khai Kết quả thực hiện cụ thể trong khóa luận
Giao diện người dùng (Front-end) ReactJS, HTML/CSS, JavaScript Xây dựng hoàn chỉnh 23 màn hình giao diện; tối ưu hiển thị trên trình duyệt web máy tính và thiết bị di động; ứng dụng Virtual DOM và One-way data binding để cập nhật nhanh trạng thái tương tác.
Máy chủ ứng dụng (Back-end) NodeJS, ExpressJS Xây dựng hệ thống RESTful API hoàn chỉnh theo kiến trúc Event Loop đơn luồng, xử lý bất đồng bộ non-blocking I/O; triển khai các tầng middleware quản lý router và request.
Cơ sở dữ liệu (Database) MongoDB (NoSQL) Thiết kế hệ thống Collection và Document linh hoạt lưu trữ thông tin tài khoản, bài viết, bình luận, quan hệ bạn bè và nhóm; đánh chỉ mục trường _id tối ưu truy vấn.
Bảo mật và Phân quyền JSON Web Token (RFC 7519) Triển khai cơ chế xác thực phân quyền qua Interceptor và Token; bảo vệ dữ liệu API độc lập, không phụ thuộc vào cookie/session; kiểm soát truy cập cho User và Admin.
Kiểm thử hệ thống Kịch bản kiểm thử đa diện Thực thi hoàn tất 4 nhóm kiểm thử: chức năng, tương thích thiết bị, luồng dữ liệu, UI/UX; thiết lập quy trình phân loại và xử lý lỗi phần mềm.

Về mặt giải pháp kỹ thuật, đề tài đã áp dụng thành công mô hình non-blocking I/O của NodeJS kết hợp cơ sở dữ liệu NoSQL MongoDB nhằm giải quyết bài toán tiếp nhận nhiều kết nối truy vấn đồng thời trong ứng dụng mạng xã hội. Việc áp dụng chuẩn JWT kết hợp Interceptor tạo ra giải pháp xác thực nhẹ, giảm tải cho máy chủ backend và ngăn ngừa hiệu quả các rủi ro liên quan đến CORS.

Đóng góp chính của khóa luận là cung cấp tài liệu hoàn chỉnh về quy trình phân tích, thiết kế, triển khai và kiểm thử một hệ thống mạng xã hội full-stack hoàn toàn bằng JavaScript (MERN Stack), đóng vai trò tài liệu tham khảo thực nghiệm có cấu trúc rõ ràng từ khâu khảo sát hiện trạng đến cài đặt ứng dụng.


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

Khóa luận đã thẳng thắn ghi nhận các điểm hạn chế kỹ thuật và nhược điểm vận hành:

  • Các chức năng nghiệp vụ của mạng xã hội hiện tại mới dừng lại ở mức độ cơ bản (các thao tác CRUD bài viết, tương tác thích, bình luận, kết bạn cơ bản), chưa hỗ trợ sâu các tính năng phức tạp như phát sóng trực tiếp (livestream) hay gọi thoại/video thời gian thực.
  • Cơ sở dữ liệu MongoDB tiềm ẩn hiện tượng thừa dữ liệu (data redundancy) do cấu trúc lưu trữ cặp key-value lặp lại giữa các Document trong cùng Collection; cơ chế đồng bộ dữ liệu định kỳ 60 giây từ RAM xuống ổ cứng tiềm ẩn rủi ro thất thoát dữ liệu nếu xảy ra sự cố mất điện đột ngột trong quá trình vận hành.
  • Chưa có giải pháp tối ưu hóa chuyên sâu cho các tập dữ liệu cực lớn khi lượng người dùng đồng thời tăng đột biến.

Các hướng phát triển tiếp theo được tác giả đề xuất bao gồm:

  1. Nghiên cứu và tích hợp các thuật toán học máy (Machine Learning) để phân tích sở thích, hành vi tương tác của người dùng, từ đó xây dựng hệ thống gợi ý (recommendation system) bài viết và bạn bè phù hợp.
  2. Hoàn thiện và nâng cấp module nhắn tin theo thời gian thực (real-time chat) với hiệu năng cao hơn.
  3. Tối ưu hóa cấu trúc cơ sở dữ liệu và triển khai các giải pháp bộ nhớ đệm nâng cao nhằm tăng cường độ an toàn dữ liệu và khả năng chịu tải của hệ thống.

Giá trị tham khảo

Báo cáo khóa luận là tài liệu học thuật và kỹ thuật hữu ích cho các nhóm đối tượng:

  • Sinh viên ngành Công nghệ Thông tin và Kỹ thuật Phần mềm: Tài liệu cung cấp quy trình mẫu chuẩn mực về việc xây dựng đồ án tốt nghiệp chuyên ngành công nghệ phần mềm, từ khâu khảo sát hiện trạng sản phẩm thực tế (Facebook, LinkedIn, Gapo), mô hình hóa yêu cầu Use Case đến lập trình full-stack.
  • Lập trình viên web định hướng JavaScript/MERN Stack: Phần phân tích cơ sở lý thuyết (Chương 1) và thiết kế phần mềm (Chương 3) là tài liệu tham khảo trực quan về cách thức tổ chức middleware trong ExpressJS, cách thiết lập luồng bảo mật API qua JSON Web Token và kỹ thuật quản lý trạng thái giao diện với ReactJS.
  • Người làm đề tài về kiểm thử phần mềm ứng dụng web: Chương 4 cung cấp hệ thống bảng biểu kiểm thử hoàn chỉnh (kiểm thử chức năng, thiết bị, luồng dữ liệu, UI/UX) cùng quy trình phân loại lỗi rõ ràng, có thể tái sử dụng trực tiếp cho các đề tài phát triển ứng dụng web tương tự.

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

1. Tại sao nhóm tác giả lựa chọn nền tảng NodeJS và kiến trúc Event Loop thay vì mô hình đa luồng truyền thống?
Trong các ứng dụng web truyền thống, mỗi request từ client thường tạo ra một luồng (thread) xử lý riêng và chiếm dụng khoảng 2MB bộ nhớ RAM, dẫn đến giới hạn về khả năng mở rộng (chẳng hạn hệ thống 8GB RAM chỉ hỗ trợ tối đa khoảng 4.000 kết nối đồng thời). NodeJS sử dụng kiến trúc đơn luồng (Single-Threaded) kết hợp cơ chế Event Loop và Non-blocking I/O, tiếp nhận toàn bộ request đưa vào Event Queue và chỉ phân bổ luồng riêng cho các tác vụ blocking I/O phức tạp. Cơ chế này giúp tối ưu hóa bộ nhớ và hỗ trợ mở rộng xử lý hàng chục ngàn kết nối đồng thời.

2. Cơ chế xác thực và bảo mật bằng JSON Web Token (JWT) được thiết lập như thế nào trong hệ thống?
Hệ thống sử dụng JWT (chuẩn RFC 7519) gồm 3 phần: Header, Payload và Signature. Khi người dùng đăng nhập thành công, máy chủ cấp một mã JWT riêng. Mọi request tiếp theo từ client đều phải gửi kèm Token này qua một "cánh cửa" kiểm soát (Interceptor). Server tiến hành kiểm tra chữ ký số để xác định danh tính và quyền hạn truy cập của người dùng đối với từng API endpoint mà không cần lưu trữ session trên server, đồng thời loại bỏ các lỗi liên quan đến cơ chế chia sẻ tài nguyên chéo nguồn (CORS).

3. Cơ sở dữ liệu MongoDB trong đồ án có những đặc điểm kỹ thuật và hạn chế gì cần lưu ý?
MongoDB là cơ sở dữ liệu NoSQL lưu trữ dữ liệu dạng JSON/BSON document bên trong các Collection có schema động, không bắt buộc ràng buộc khóa ngoại cứng nhắc, giúp tăng tốc độ đọc/ghi dữ liệu. Bản ghi tự động được đánh chỉ mục qua trường _id và truy vấn được ghi đệm trên RAM. Tuy nhiên, MongoDB có hạn chế là tiêu tốn dung lượng do lưu trữ lặp lại các cặp key-value, và chu kỳ ghi dữ liệu từ RAM xuống ổ cứng mất khoảng 60 giây nên có nguy cơ mất dữ liệu nếu xảy ra sự cố ngắt nguồn điện đột ngột.

4. Khảo sát hiện trạng các mạng xã hội Facebook, LinkedIn và Gapo đã đóng góp gì cho việc xác định yêu cầu hệ thống?
Khảo sát hiện trạng giúp nhóm tác giả đúc kết được cấu trúc giao diện trang chủ tiêu chuẩn (thanh Header điều hướng; Body chia 3 cột gồm danh mục/nhóm bên trái, bảng tin trung tâm và tương tác bạn bè bên phải). Khảo sát cũng định hình các nhóm tính năng cốt lõi cần triển khai: tối giản hóa thao tác tạo và tương tác bài viết (thích, bình luận, báo cáo), xây dựng đầy đủ các chức năng CRUD cho quản trị viên, và định hướng ứng dụng học máy để phân tích sở thích người dùng trong tương lai.

5. Hệ thống kiểm thử của khóa luận được phân chia theo những tiêu chí nào?
Kiểm thử phần mềm trong khóa luận được phân chia thành 4 nhóm chính: kiểm thử chức năng (đánh giá 15 luồng nghiệp vụ cốt lõi), kiểm thử thiết bị (đánh giá tính tương thích trên máy tính và thiết bị di động), kiểm tra luồng dữ liệu (kiểm soát tương tác giữa ReactJS, API Interceptor và MongoDB) và kiểm thử giao diện/trải nghiệm người dùng (UI/UX). Toàn bộ lỗi phát sinh được quản lý theo bảng phân loại mức độ nghiêm trọng và quy trình xử lý lỗi chuẩn.


Kết luận

Khóa luận tốt nghiệp "Xây dựng mạng xã hội sử dụng MERN Stack" của sinh viên Lê Thanh Hải và Phạm Hoàng Long đã hoàn thành việc nghiên cứu, thiết kế và cài đặt thành công một hệ thống mạng xã hội hoàn chỉnh dựa trên nền tảng JavaScript đồng nhất. Đề tài thể hiện cách tiếp cận kỹ thuật bài bản từ khâu khảo sát hiện trạng, mô hình hóa yêu cầu hệ thống, thiết kế kiến trúc 3 tầng bảo mật bằng JWT đến kiểm thử đa diện trên môi trường thực tế. Đây là tài liệu tham khảo có giá trị cao về mặt kỹ thuật cho sinh viên và các nhà phát triển quan tâm đến kiến trúc MERN Stack và quy trình phát triển phần mềm ứng dụng web hiện đại.