AlphaCamp_DevC4 50% 完課心得
By Po-Ming Chen in Career
October 17, 2024
AC_C4 表定要 8 週,想說過一半的時候,完成 Mini Capstone Project 順手寫一下回顧,應該會比一口氣完成全部的 AC_C4_M1~M7 才做學習回顧的效果來得好。順便讓腦袋沉澱一下~
這幾週大概是接觸了
-
Sequelize ORM 讓 Node.js 應用程式可以跟資料庫溝通
-
認識 session 機制並建立 flash message 優化使用者體驗,也為後續的註冊登入驗證機制累積一些實作基礎
-
實作註冊&登入機制(帳密&臉書登入)
-
AWS 部署
透過 C4 M1~M3,以及 Mini Capstone Project(老爸的私房錢),算是規律地透過實作,用 MVC 架構拆解越來越複雜的專案,反覆地去練習:
-
As 產品經理,如何界定產品的 User Story ?(當然 User Story,有一些教案已經先界定好了)
-
As 工程師,如何搭建這個網頁應用的基礎架構(Scaffold)?
-
As 開發者,如何依照 Product Spec 做好產品功能?
後來我覺得,在實作過程也一邊建立自己的 CheatSheet 是比較方便的,畢竟進到 C4 之後,盡量多以一個初階後端工程師的角度,來思考眼前想要解決的問題會是比較好的。
不過在拆解 Mini Capstone Project,發現要做註冊、登入功能、MVC 三大區塊,一時有點難捏不到應該先從哪邊開始做起會比較順,後來是先做註冊、登入功能,然後才進到核心的支出清單路由規劃。不確定實務開發中,有沒有一個衡量基準,基於專案複雜度,應該要先做什麼再做什麼的 best practice!?我還真有點好奇
也必須說,進到 C4 之後,留意到幾乎每一個小教案結束後,都會有『思考問題』,甚至有一些微小的實作要自己完成,這多出來的練習或思考紀錄,當下可能會覺得有點急躁,畢竟想要繼續推進度,但是其實有效率地學習,應該是不要放過這類型的小 Quiz 或者『嘗試用自己的話,再說一次』。
加上是邊工作邊學習,大概都要 1+ 週才能夠完成一個 M,所以坦白說比預先設想要完成 Mini Capstone Project 的時間,大概是慢了兩個禮拜 XD ,不過還是滿開心順利把它完成了~
就一樣用 ORID 架構回顧一下這幾週學了什麼吧!
Reflective
Reflective1_Sequelize
Sequelize 是一個基於 Node.js 的 ORM(Object-Relational Mapping) 套件,用來與關聯式資料庫進行互動。它簡化了應用程式中與資料庫的操作,讓你可以使用 JavaScript 物件來操作資料庫中的資料,而不需要寫太多 SQL。
整個 Sequelize ORM 大概可以分為三個元素 Model Instance & Migration & Seeder。
指令雖然都沒有很難,但是遇到需求變更時候,規劃有效率的 Migration Strategy 應該是需要實作才能逐步累積經驗的。資料才不會丟失、系統不會中斷。
像是資料庫內如果有 User Table、SpendingRecord Table,想要新增商品類別欄位(建立 Category Table,且為 SpendingRecord 的 Foreign Key),縱使往後該欄位應該不可以有空值,但是新建欄位時,可能要先允許 null 值,將既有資料先 insert 其商品類別後,然後再調整為 not null,這樣後續使用者寫入新的支出紀錄,才都會有記錄其商品類別,這樣才會是符合業務邏輯的。
規劃有效率的 Migration Strategy 來應對需求,應該也是成為優秀後端工程師的必經之路 XD
Reflective2_Session & Flash message
在許多應用服務,常常會看到一些一次性提示訊息來提升使用者體驗,像是『註冊成功』、『登入成功』等等,教案中帶的是透過 connect-flash 和 express-session 建立的 Flash Message 機制。
將 req.flash('success', '註冊成功!') 等訊息隨著路由重新導到特定 view template 的同時,在前端畫面也顯示出來。
這裡曾經踩到一個坑,如果在 messageHandler.js,errorHandler.js,有透過 console.log 做測試,觀察 flash message 有沒有配合 request 與路由設定成功傳進來,最後記得要註解掉,不然在 console.log 當下顯示出來後,flash message 就會被清掉了,自然沒有傳到前端 view template…
Reflective3_建立註冊和登入功能
先撇開第三方的驗證登入機制,從前我一直覺得,網站註冊和登入功能,雖然好像很基本,但也很炫(很玄?),一直好奇他是怎麼實作出來的。應用程式或網站是怎麼知道現在是我呢?而且確實都只讓我看到,那些屬於我的資訊或者紀錄(像是購物車等)。
首先關於註冊功能,註冊的本質就是在資料庫內新增了這個使用者。
登入,就是拿使用者輸入的帳密,去跟資料庫內的資訊做比對,如果確定符合,就會讓他進入到指定、受保護的路由模組。同時受保護的路由模組內的資訊,像是餐廳清單、支出清單,使用者終究只能 CRUD 屬於自己的東西,所以在跟資料庫溝通的時候,就必須進一部界定,只需要撈取屬於該使用者的資料,所以也需要配合登入機制下,在 session 存取(序列化)必要的使用者資訊,並且在使用者 request 送到伺服器的時候,也要解析(反序列化)必要的使用者資訊,像是 userId = req.user.id 的作法,以供送到後續路由模組內使用。
最後,也必須要考量資安,像是要將密碼加鹽並雜湊(salt & hash)才正式儲存到資料庫,以避免資安攻擊或內部有心人士侵害到使用者個資。實務上若有在做個資保護的明暗碼轉換表,很可能也是用加鹽並雜湊(salt & hash)來實現。
另外一個可以提升密碼資料安全的,是將 http 傳輸,轉為 https 傳輸,實務上可能會用到 node.js 內建的 https 套件,或許不久的將來就會遇到了~
Reflective4_AWS 部署
可以接觸到 AWS 也是滿好奇的,因為從前在 均一 實習的時候,有接觸到一點 GCP BigQuery 和 MS Azure,同時我也覺得雲端服務是做資料分析、資料工程、軟體開發,想要走得長久的話,一個需要接觸的技能、趨勢。
不過部署看似滿簡單的,教案影片也不長,但是做下去才發現有滿滿的坑QQ,加上 AWS 的服務包山包海,光一開始接觸 S3, ElasticBeanstalk, RDS,在不同頁面之間切換,很快就茫了……
然後 eb deploy 報錯後,目前好像都要進到 AWS 上的 CLI 才能比較方便瀏覽 eb-engine.log 進行除錯,剛開始對介面切換不熟悉,就算要跟別人討論,我連系統化表達自己遇到的錯誤和提出可能的癥結點,也覺得很卡 ><
托前輩 文章分享 的福, 後來才發現是自己在設定 RDS 的環境變數不太對,導致沒辦法順利與發佈到 RDS 的資料庫進行溝通,最後總算發佈成功了,鬆了一大口氣
- mysql://{{rds-user-name}}:{{rds-password}}@{{rds-endpoint}}/{{db-name}}
- mysql://admin:mypassword123@mydatabase.xxxxxx.com/expense_tracker(我是範例)
Interpretive
坦白說進入到 C4 後,難度又跳躍了許多,總覺得盡量要讓自己常常像一個後端工程師去思考,包含熟悉那些小細節,加上每個小教案都有配搭的『思考問題』,自然不免要多花時間,感覺需要以 2 週為單位,比較可以兼顧生活、休息放鬆,稍微放慢一點腳步,應該可以學的比較快、比較好。也才不會壓力太大或囫圇吞棗。
Decisional
配合教案,部署 AWS 的經驗,讓我有點想額外抽空參加 AWSome Day 的教育訓練服務,趁機會系統性了解一下整個 AWS 服務藍圖,以及在成爲後端工程師之路上,有哪些持續自我加值的可能性。
就先寫到這吧!接下來就要進到教案的最後一個部分了,然後再銜接大約三週的 Capstone Project,希望可以繼續一步一腳印地往前~
Hang on and Stay optimisitc =)