115 BIRC 前端工程師考試
這裡主要會講些技術層面的東西,如果想了解考核題目的設計&思考過程(更是我在 AI 時代下重新定義工程師價值的心路歷程)可以點擊下方:
後端架構
為什麼我棄用 Spring Boot 改選 Next.js API Routes?
既然要考前端的 API 串接與狀態處理,我當然必須提供一套穩定的後端服務。
我之前用 Spring Boot 來寫給學弟妹串接的後端,但說真的,Spring Boot 雖然嚴謹,但對於輕量專案或初學者來說真的太過繁重。只是要寫一個簡單的 GET 查詢,就要開好幾個檔案、分 Controller / Service / Repository / DTO / Entity 等無數階層。這種多模組與Over-engineering,在目前這個規模下顯得有些多此一舉。
為了讓開發更敏捷、架構更親民,這次我改用 Next.js API Routes 來建立後端 API。
Next.js API Routes
雖然 Next.js 沒有強制規定目錄規範,不過我結合了過去的前後端實務經驗,精煉出一套「關注點分離 Separation of Concerns, SoC,卻又不過度複雜」的輕量架構:
├── app/
│ └── api/ # 【Controller 層】API Routes (路由與前端對接)
├── services/ # 【Service / DB 操作層】負責 SQL 參數化查詢與業務邏輯
├── lib/ # 【Infrastructure / 工具層】核心基礎設施
│ ├── mysql.ts # 資料庫連線(解析連線 URL / Pool)
│ ├── schemas.ts # 輸入驗證(使用 Zod / 防禦性欄位檢查)
│ ├── env.ts # 環境變數檢測(環境變數防禦機制)
│ └── types.d.ts # TypeScript 介面與型態定義 (Interface)Code language: PHP (php)
各層級職責說明:
app/api/(Controller 層):- 負責 API 路徑對應與 HTTP Request / Response 處理。
- 與前端直接對接,接收參數後呼叫服務層,再將結果回傳。
services/(Service / DAO 層):- 專門負責主要業務邏輯與資料庫互動。
- 使用參數化查詢(Parameterized Queries)撰寫 SQL 語句,避免 SQL Injection,確保安全。
lib/(Library 基礎設施層):mysql.ts:封裝連線池(Connection Pool)與 URL 解析邏輯。schemas.ts:使用 Zod(或類似套件)做輸入資料的防禦性驗證(如:檢查數字是否非零、非空、非負數)。env.ts:防禦性機制,專案啟動時自動檢查是否缺少必要的.env設定檔,避免運行時意外 Crash。types.d.ts:定義前端串接所需的 Request/Response TypeScriptinterface,提升型別安全。
環境隔離與 Docker 化部署
當後端服務與資料庫寫好後,我立刻意識到一個嚴重的實務問題:如果讓所有考生在同一時間串接「同一個遠端後端」,一定會引爆災難。
- Data Race:考生 A 在修改/刪除這筆資料,考生 B 正好在查詢同一筆資料,導致除錯時產生極大干擾。
- 連線與服務崩潰:所有人同時併發打請求,甚至有考生寫出 Infinite Loop 把後端打垮,全場其他人的考試都會被一起拖下水。
- 無效溝通與除錯:根本無法釐清到底是我(考生本人)的前端 Code 寫錯,還是別人動到了後端資料。
為了確保「每位考生都有完全獨立、互不干擾的測試後端與資料庫」,我採用了 Docker 來實現環境隔離:
我的開發&打包端環境
將 Next.js 後端打包成 300MB 左右的 Image 後,掛載至 GitHub Releases 供下載與拉取。
.
├── sql/
│ └── init.sql # 自動匯入 DB Schema 與初始測試資料
├── Dockerfile # 將 Next.js API 後端打包成約 300MB 的 Image 並推上 Docker Hub
└── docker-compose.yml # 本地開發與測試環境腳本
Code language: PHP (php)
給考生的 Exam-Kit 考試包:
完全不包含後端原始碼,乾淨又方便。
考生只需要前往 GitHub:
- 下載 Releases:取得已打包好的發布檔與環境檔。
- Clone Exam-Kit:取得專案設定。
- 一鍵啟動:照著
README.md輸入指令,就能在自己電腦的 Docker 上一秒啟動專屬的後端 API 與資料庫。
即便不小心把資料庫搞爛,重跑一次指令 3 秒鐘即可復原,讓學生能無後顧之憂地專注在前端 UI/UX 的開發與串接上!
Exam-Kit/
├── docker-compose.yml # 自動拉取 Docker Hub 上的後端 Image + 啟動 MySQL
└── README.md # 懶人指令指南Code language: PHP (php) 