---
# System prepended metadata

title: Day 4 - 改一個 Logo 而已：靜態資源與動態資料
tags: [2026 後端工程師體驗營]

---

# Day 4 - 改一個 Logo 而已：靜態資源與動態資料

## 劇情背景

一早，海克絲著急地走了過來。

「糟糕！我跟合夥人昨天看網站的時候發現，Logo 忘了改掉！」

「忘了改？怎麼說？」

「你看，現在網站上的 Logo 是『LiveFit+』，但我們目前應該要用『LiveFit』才對。」海克絲解釋道，「那個『+』是要留給之後用的。我們才剛起步，現在應該先叫 LiveFit 就好。等之後平台做起來了、會員變多了、功能更完整了，再升級成 LiveFit+。」

「原來如此！所以要把『+』先拿掉？」

「沒錯！設計師已經做好正確的 Logo 了。」海克絲看著你，「話說，如果我現在要你改這個 Logo，你知道要去哪裡找檔案嗎？」

你看著專案資料夾裡密密麻麻的檔案，突然有點心虛。

「這就是我今天要教你的——搞懂什麼是『靜態資源』、什麼是『動態資料』，你才不會改錯地方。」
![praise](https://hackmd.io/_uploads/Hyv_KX8rZl.png)

---

## 學習目標

- 了解靜態資源（Static Assets）與動態資料（Dynamic Data）的差異
- 知道靜態資源存放的位置（public/ 資料夾）
- 理解動態資料的處理方式（資料庫 + API）
- 學會修改前端的靜態資源
- 成功替換 LiveFit 的 Logo

---

## 核心概念

### 一、靜態資源 vs 動態資料

海克絲用健身房來比喻：

| 類型 | 說明 | 特性 | 範例 |
|------|------|------|------|
| **靜態資源** | 很少變動的檔案 | 直接放在專案資料夾 | Logo、背景圖、favicon、字型 |
| **動態資料** | 經常變動的資料 | 存在資料庫，透過 API 取得 | 教練列表、課程、會員資料 |

（p.s. 明天的每日任務就會講解到 API 囉）


**為什麼要區分？**

海克絲說了一個前任工程師的故事：

> 「之前有個工程師，他把所有教練的資料都寫死在前端程式碼裡。結果每次有教練離職或新進，他就要改程式碼、重新部署⋯⋯搞到後來他崩潰了。」

**教訓：會經常變動的資料，不應該寫死在程式碼裡！**

### 二、判斷方法

改東西之前，先問自己一個問題：

> **「這個東西會經常變動嗎？」**

| 會經常變動 | 不會經常變動 |
|------------|--------------|
| → 存資料庫 | → 放檔案 |
| 教練、課程、會員 | Logo、背景圖、favicon |

### 三、靜態資源放哪裡？

在 Vue.js 專案中，靜態資源通常放在：

```
frontend/
├── public/           # 靜態資源（不會被編譯）
│   ├── logo-text.png    # Logo 圖片
│   ├── favicon.ico      # 網站小圖示
│   └── ...
├── src/
│   ├── assets/       # 靜態資源（會被編譯處理）
│   └── ...
└── ...
```

**public/ vs src/assets/ 的差異：**
- `public/`：檔案不會被 Vite 處理，直接複製到輸出目錄
- `src/assets/`：檔案會被 Vite 處理（壓縮、加 hash 等）

### 四、動態資料怎麼處理？

動態資料的處理流程：

```
使用者操作 → [前端] → [API] → [後端] → [資料庫]
                ↑                         ↓
                └─────── 回傳資料 ─────────┘
```

例如教練新增課程：
1. 教練在後台填寫課程資料
2. 前端發送 API 請求到後端
3. 後端驗證資料後存入資料庫
4. 前台網站顯示最新課程（不需要改程式碼！）



## 測驗題目預覽

### 靜態 vs 動態觀念篇 (5 題)

1. 如果把所有教練資料「寫死」在前端程式碼裡，會發生什麼問題？
2. 為什麼教練資料不適合當作「靜態資源」？
3. 以下哪個屬於「靜態資源」？
4. 以下哪個屬於「動態資料」？
5. 靜態資源通常放在專案的哪個資料夾？

### LiveFit 實作篇 (4 題)

6. 在 LiveFit 專案中，Logo 圖片放在哪裡？
7. 如果要修改網站使用的 Logo，除了換圖片檔案，還需要改什麼？
8. 用 LiveFit 來比喻，「Logo」和「教練列表」分別對應什麼？
9. 動態資料的正確處理方式是？

## 遊戲連結

請進入遊戲完成本日關卡：

👉 **[點此進入遊戲](https://hexschool.github.io/backend-camp-game/)**




## 回報格式(確認打卡細節)

1. 完成遊戲中的測驗並截圖完成畫面
2. 到體驗營 Discord 的[每日活動頻道](https://discord.com/channels/801807326054055996/1446368763581562880)，找到當天任務的討論串
3. 在討論串留言貼上截圖，打卡儀表板會自動記錄你的成績
4. 分享一下此關卡有哪些知識點讓你印象深刻，甚至有透過 AI 服務延伸學習


![截圖 2026-01-02 下午5.16.29](https://hackmd.io/_uploads/BJig6WSEZg.png)
---



---


## 海克絲的叮嚀

> 「很多新手工程師一拿到需求就急著寫 Code，結果改了半天發現改錯地方。其實很簡單，改東西之前先問自己：『這個東西會經常變動嗎？』會的話去資料庫改，不會的話去檔案改。搞清楚這點，找東西就快多了！」





## 每日任務額外名詞解說

1. **Vue** 是前端網頁的程式碼框架。
2. **Vite** 是負責編譯與打包程式碼的工具。
3. **編譯** 是指將工程師撰寫的程式碼 (例如 HTML) 轉換成機器可執行的二進位碼。
4. **渲染** 是指將網頁程式碼 (例如 HTML) 轉換成瀏覽器上使用者看見的畫面。
5. **快取** 是指將資料暫存在瀏覽器中，讓下次讀取時不必重新下載的機制。因此當資料庫或程式碼已經更新，快取中的資料可能還是舊的。