Tải bản đầy đủ (.docx) (33 trang)

báo cáo thực tập lập trình backend với nestjs

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (218.04 KB, 33 trang )

<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">

<b>TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNGTIN KHOA CÔNG NGHỆ PHẦN MỀM </b>

BÁO CÁO THỰC TẬP

<b>Lập trình Backend với NestJS </b>

Cơng ty thực tập: Vitalify Asia

Người phụ trách: Dương Văn Khương Thực tập sinh: Nguyễn Thái Tuấn

Tp. Hồ Chí Minh, tháng 12 năm 2023

1

<b>LỜI MỞ ĐẦU </b>

</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2">

Ngày nay, các ngành và lĩnh vực về công nghệ phần mềm đang phát triển với tốc độ chóngmặt. Các cơng nghệ về web, mobile hay game là những hướng đi cực kì thu hút các bạn trẻ đam mê lĩnh vực công nghệ phần mềm cũng như nhận được sự quan tâm cao từ phía các nhà tuyển dụng. Các lĩnh vực này được ví như một tảng băng trơi, phần nổi là phần nhìn thấy được gọi là Front-end và phần chìm, phần khơng nhìn thấy được chính là Back-end. Vai trị lập trình viên Back-end hiện nay là vơ cùng cần thiết và ln có mặt trong hầu hết các dự án công nghệ phần mềm.

Xu hướng phát triển mạnh mẽ của các quốc gia trên thế giới cũng thúc đẩy vai trò Back end tại Việt Nam tới mức cao nhất. Đa số các công ty phát triển các phần mềm đều đi kèmvới việc tuyển dụng nhân lực Back-end. Nhu cầu tăng cao đối với Back-end tại Việt Nam là minh chứng cho việc xây dựng một Back-end vững mạnh, an ninh bảo mật là vô cùng cần thiết. Back-end phát triển vững mạnh là một yếu tố cơ bản cho một nền công nghiệp phần mềm phát triển trường tồn.

Từ lâu, trong quá trình học tập tại trường, em đã định hướng bản thân trở thành một lậptrình viên Back-end chun nghiệp. Điều đó thúc đẩy em tìm tịi và học hỏi về các cơngnghệ Back-end hiện nay, các ngôn ngữ hỗ trợ và chủ động đảm nhiệm vai trò phát triểnback-end trong các đồ án tại trường.

Sau hơn ba năm học tập trên trường, em cảm thấy bản thân đã sẵn sàng để dấn thân vàomôi trường chuyên nghiệp, em tin rằng điều này sẽ giúp em học hỏi, tiếp thu nhiều kiếnthức hơn trong ngành này. Do đó em đã đăng kí mơn thực tập và bắt đầu tìm kiếm cơngviệc. Em đã chọn được công ty để bắt đầu phát triển bản thân là Vitalify Á Châu, đây làmôi trường out-sourcing, một môi trường có khả năng thúc đẩy bản thân em thay đổi liêntục. Qua quá trình thực tập tại đây, em mong rằng bản thân sẽ tích thêm nhiều kinhnghiệm, củng cố kiến thức cá nhân cũng như học hỏi thêm nhiều công nghệ mới.

2

<b>LỜI CẢM ƠN </b>

Trước hết, em xin gửi lời cảm ơn đến Trường Đại học Công nghệ thông tin – ĐHQG

</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3">

TP.HCM và các thầy cô là giảng viên của khoa Công nghệ phần mềm đã tạo điều kiện để em hồn thành khóa thực tập ngắn hạn tại doanh nghiệp và quan trọng hơn hết là nền tảng kiến thức cơ bản về công nghệ phần mềm.

Em xin gửi lời cảm ơn chân thành và sâu sắc đến Công ty TNHH Vitalify Á Châu Việt Nam đã tạo điều kiện cho em có cơ hội thực tập tại công ty.

Chỉ trong một thời gian ngắn, nhưng nhờ sự chỉ dẫn nhiệt tình của anh chị, em đã tiếp thuđược những kỹ năng, kiến thức quan trọng để có thể xây dựng và góp phần hoàn thiệnđược được một hệ thống back-end. Chân thành cảm ơn các anh chị đã bỏ ra nhiều thờigian, cơng sức để hướng dẫn chúng em hồn thành đợt thực tập này.

Đặc biệt gửi lời cảm ơn sâu sắc đến anh hướng dẫn Dương Văn Khương, cùng anh HoàngMinh Châu, chị Đinh Nguyễn Yến Nhi đã training em các kỹ năng và công nghệ nhưNestJS, MongoDB, Typescript, Git, Unit test, E2E test, AWS và mơ hình làm việc Agilescrum. Cùng thêm các kiến thức khác về DevOps để làm nên một hệ thống Back

end hiệu quả, bảo mật. Trong giai đoạn này mọi thứ thật sự mới mẻ với em, nhờ có sựgiúp đỡ tận tình đặc biệt các anh em mới có thể hồn thành được. Em cũng xin gửi lờicảm ơn đến anh Manager của dự án là anh Nguyễn Anh Duy đã tạo điều kiện để em tiếpcận dự án thực tế và kết nối mọi người lại với nhau. Nhân cơ hội em cũng xin cảm ơn đếncác anh chị trong dự án Niko đã đồng hành và giúp đỡ em trong những ngày đầu tiếp cậndự án thực tế.

Một lần nữa em xin cảm ơn các thầy cô đang công tác tại khoa Cơng nghệ Phần mềm đãtận tình giúp đỡ, đặc biệt là cô Trần Thị Hồng Yến đã hỗ trợ em rất nhiều trong quá trìnhthực tập tại doanh nghiệp!

Em xin cảm gửi lời cảm ơn trân quý đến doanh nghiệp!

</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4">

<b>BẢNG ... 6 DANH MỤCHÌNH ẢNH... 7 DANH</b>

</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5">

<b>MỤC TỪ VIẾT TẮT... 8</b>

<b>Chương 1: GIỚI THIỆU CÔNG TY THỰC TẬP... 9 </b>

1.2.1Niko niko (Hệ thống HRM)...10 1.2.2 Nativecamp ...13 1.2.3 Các sản phẩmứng dụng game (Unity) ...14

<b>Chương 2: NỘI DUNG THỰC TẬP... 16 </b>

2.3.1Công nghệ ...20 2.3.2 Mơ tả dựán ...20 2.3.3 Kếtquả...23

2.4.1 Mơtả q trình thực hiện...28 2.4.2 Kếtquả...31 2.4.3 Thuậnlợi...31 2.4.4 Khókhăn...31

<b>Chương 3: TỔNGKẾT... 32 </b>

<b>TÀILIỆU THAM KHẢO ... 34</b>

5

<b>DANH MỤC CÁC BẢNG </b>

Bảng 1. 1 Tổng quan thông tin về công ty ...9

Bảng 1. 2 Lịch làm việc...15

Bảng 2. 2 Bảng nghiên cứu kỹ thuật ...17

Bảng 2. 3 Bảng công việc thực hiện dự án cá nhân ...20

Bảng 2. 4 Bảng mô tả thông tin dự án thực tế đã tham gia ...24

Bảng 2. 5 Mơ tả q trình thực hiện dự án thực tế ...28

</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">

Bảng 3. 1 Đánh giá chuẩn đạt được...33

6

<b>DANH MỤC HÌNH ẢNH </b>

Hình 1. 1 Logo cơng ty thực tập...9

Hình 1. 2 Giới thiệu sản phẩm Niko gồm Web, App ...10

Hình 1. 3 Tính năng thống kê số hóa cảm xúc nhân viên ...11

Hình 1. 4 Các bước check-in bằng app ...11

Hình 1. 5 Nhập/xuất dữ liệu qua CSV...12

Hình 1. 6 Logo Native Camp ...13

Hình 1. 7 Các dịng sản phẩm game được viết bằng Unity trên AppStore ...14

Hình 2. 1 Check-in bằng App...25

Hình 2. 2 Check-in bằng web ...25

</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">

Hình 2. 3 Theo dõi thơng tin làm việc...26

<b># Từ viết tắt Từ đầy đủ Ý nghĩa</b>

được merge vào code đã cótrước đó

Programing Interface <sup>Một nơi để các ứng dụng giao tiếp</sup>với nhau

toán đám mây

</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">

4 ECR Elastic Container Registry Dịch vụ lưu trữ Docker đượccung cấp bởi AWS

được cung cấp bởi AWS

ứng dụng được cung cấp bởi AWS

8

<b>Chương 1: GIỚI THIỆU CÔNG TY THỰC TẬP Giới thiệu cơng ty </b>

<i><small>Hình 1. 1 Logo cơng ty thực tập </small></i>

Bảng 1. 1 Tổng quan thông tin về công ty

<b>Tên công ty </b> Vitalify Á Châu (Vitalify Asia)

<b>Thành lập </b> 2008

<b>Địa chỉ </b> 224A - 224B Điện Biên Phủ, phường Võ Thị Sáu, quận 3, thành phố Hồ Chí Minh.

<b>Quy mơ nhân sự </b> Trên 200

<b>Trang web </b> a/

<b>Điện thoại </b> +84 (028) 3932 6293

Vitalify Á Châu được thành lập vào năm 2008, là một công ty outsourcing Nhật Bản tạiViệt Nam tập trung vào mảng phát triển phần mềm trên ứng dụng di động với sứ mạng“Đưa những giá trị hạnh phúc thông qua internet” (Delivering Happiness through theInternet).

Vitalify Á Châu có mục tiêu trở thành một cơng ty chun nghiệp có thể đảm nhận các dựán mang tầm vóc quốc tế. Chính sách phát triển của cơng ty đó là: mỗi nhân sự từ kỹ sư,

</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">

quản lý,… có trách nhiệm mở rộng vai trị và phạm vi cơng việc, tinh thần trách nhiệm của chính bản thân để mang lại giá trị cho người dùng với cấu trúc tổ chức phân thành các nhóm nhỏ ưu tú.

9 Sau hơn 10 năm thành lập, Vitalify Á Châu bước vào một giai đoạn thử thách mới nhằmnâng cao hơn nữa giá trị kỹ thuật của công ty tại Việt Nam. Mục tiêu sẽ phát triển 10 dịchvụ thu hút 100.000 user vào năm 2025.

<b>Sản phẩm cơng ty </b>

<b>1.2.1 Niko niko (Hệ thống HRM) </b>

<i><small>Hình 1. 2 Giới thiệu sản phẩm Niko gồm Web, App </small></i>

NikoNiko là hệ thống chấm cơng cho mơ hình doanh nghiệp kết hợp tại chỗ và làm từ xa. Niko cung cấp cách chấm công đơn giản không phụ thuộc địa điểm và thời gian.

Niko bao gồm các tính năng chính: • Checkin / Out (Web & Mobile) • Chấm cơng tăng ca

• Ghi nhận và số hóa cảm xúc nhân viên • Thơng báo đẩy

</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">

• Quản lí user role, layer, report line, … • Dashboard

• Cài đặt ngày nghỉ phép

10

<i><small>Hình 1. 3 Tính năng thống kê số hóa cảm xúc nhân viên </small></i>

<i><small>Hình 1. 4 Các bước check-in bằng app </small></i>

Niko tập trung số hóa cảm xúc nhân viên theo từng bộ phân, vị trí, dự án, thâm niên, …

</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">

11

<i><small>Hình 1. 5 Nhập/xuất dữ liệu qua CSV </small></i>

Dễ dàng nhập liệu và xuất liệu thông qua CSV.

Hệ thống là mơ hình dịch vụ SaaS được phân phối bán giữa các doanh nghiệp với doanhnghiệp với nhau và tính phí dịch vụ dựa trên các tính năng và số lượng thành viên trongmột cơng ty.

Hiện nay, hệ thống Niko đã có khách hàng, cả khách hàng bên ngoài và khách hàng nội bộ. Có khả năng chịu tải 10.000 người dùng.

12

</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12">

13

<b>1.2.3 Các sản phẩm ứng dụng game (Unity) </b>

</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">

<i><small>Hình 1. 7 Các dịng sản phẩm game được viết bằng Unity trên AppStore </small></i>

Vitalify Asia phát triển nhiều tựa game giải trí trên thiết bị di động với lối chơi đơn giản.Một số trong đó có sử dụng cơng nghệ AR tăng cường thực tế ảo như game Zombie DoorsAR,...

14

<b>Lịch làm việc thực tập tại công ty </b>

Bảng 1. 2 Lịch làm việc

</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14">

<b>Khoảng thời gian thực tập</b>

Bắt đầu bắt đầu từ ngày 03/07/2023 đến hết ngày 31/10/2023 (17tuần). Thời gian thực tập là từ thứ 2 hai đến thứ 6 hàng tuần.

<b>Thời gian làm việc trong ngày</b>

Công việc hàng ngày bắt đầu từ lúc 8h35 phút sáng và kết thúc vào 17h35 phút chiều.

<b>Thời gian nghỉ trưa</b>

Thời gian nghỉ trưa là 65 phút, từ 11h55 đến 13h.

<b>Báo cáo công việc hàng ngày</b>

Sau mỗi ngày làm, vào 5h15 phút em sẽ báo cáo tiến độ cơng việc chi chị quản lí. Nội dung báo cáo bao gồm: công việc hôm nay đã làm kèm số thời gian thực hiện, có gặp vấn đề khơng thể giải quyết trong q trình thực hiện, kế hoạch thực hiện công việc cho ngày kế tiếp, dự kiến làm thêm thời gian để hồn thành cơng việc.

<b>Daily meeting </b> Vào mỗi sáng vào lúc 9h hàng ngày sẽ tổ chức Daily meetingtrong 30 phút. Chị quản lý sẽ đánh giá tiến độ công việc của từngthành viên và giao cơng việc mới nếu hồn thành ở ngày trướcđó, các thành viên trong team nếu có khó khăn thì sẽ nói trực tiếpđể đưa ra hướng giải quyết.

<b>Sprint planning </b> Vào 14h chiều thứ 2 hàng tuần sẽ tổ chức một buổi planning chotuần tiếp theo. Nội dung buổi planning này sẽ diễn ra trongkhoảng từ 30-60 phút, sẽ tổng kết lại những công việc cịn tồnđọng lại và một số cơng việc được cấp trên giao phó xuống. Chị quản lí sẽ giao công việc cho những thành viên và mỗi thành viên sẽ tìm giải pháp cho task, ước tính thời gian thực hiện côngviệc.

<b>Weekly review </b> Vào 15h chiều thứ 6 hàng tuần sẽ tổng kết những gì đã làm được và những gì chưa làm được, mọi người chia sẽ những khó khăn đã gặp phải. Chị quản lí tổng kết và báo cáo tiến độ đến cấp trên.

<b>Mơi trường giao tiếp</b>

Hồn tồn bằng tiếng Việt

15

<b>Chương 2: NỘI DUNG THỰC TẬP </b>

<b>Tìm hiểu cơng ty và các kỹ năng cơ bản trong công ty </b>

</div><span class="text_page_counter">Trang 15</span><div class="page_container" data-page="15">

Thời gian: 1 ngày

Nội dung: Giới thiệu về cơng ty, cơ cấu tổ chức phịng ban của cơng ty, cách chấm cơng, tính lương, quyền lợi và văn hố làm việc của cơng ty.

• Thực tập sinh được tập trung tại sảnh chính của cơng ty và lắng nghe từng thành viêntrong ban quản lý công ty lần lượt chia sẻ, giới thiệu về cơng ty, q trình thànhlập, phát triển, tầm nhìn chiến lược của cơng ty, quy trình làm việc từ cao xuốngthấp, cách thức tổ chức của công ty.

• Giới thiệu vị trí các phịng ban cơng ty, quy định gửi xe, các tiện ích, giới thiệu người hướng dẫn trong suốt q trình thực tập.

• Sinh viên được giới thiệu về các lab mà công ty hiện có, cách thức làm việc của từnglab và vai trị, technical chính mà các lab đảm nhận. Sinh viên được giải thích kĩhơn về cách thức phân đội nhóm dự án, cách thức tiếp nhận dự án của đội nhóm,cách tiếp nhận và giải quyết các task nhiệm vụ và báo cáo hàng ngày.

• Trong thời gian này, sinh viên được công ty đánh giá sơ lược về khả năng để chuyển về các lab phù hợp với năng lực. Sinh viên được cấp quyền truy cập các tài nguyênnội bộ, chỉ dẫn của công ty, email domain riêng để tương tác với hệ thống của khách hàng.

Kết quả: Có hiểu biết về cơ cấu hoạt động của công ty, quy trình phát triển phần mềmScrum, Agile cách tham gia các cuộc họp nội bộ và với khách hàng, cách tiếp nhận nhiệmvụ và báo cáo hàng ngày.

16

<b>Nghiên cứu kỹ thuật </b>

</div><span class="text_page_counter">Trang 16</span><div class="page_container" data-page="16">

Bảng 2. 1 Bảng nghiên cứu kỹ thuật

<b>Tuần Ngày thực hiện</b>

<b>Nội dung thực hiện Kết quả</b>

23 đến 09/07/2023

- Tìm hiểu về cơng ty, cơ cấu tổ chức, phịng ban

- Cài đặt môi trường làm việc gồm: Git,NodeJS, AWS DynamoDB, Postman, VPN,Docker, Redis, Gmail, Chatwork.

- Đọc source code dự án Sky và chạy dưới môi trường local

- Tham gia buổi welcome lunch giới thiệu bản thân với các anh mentor.

- Tìm hiểu và thực hiện cách viết báo cáo vào mỗi ngày.

- Báo cáo tiến độ hàng ngày.

Hồn thành tốtcơng việc đượcgiao.

3 đến 16/07/2023

- Tìm hiểu framework Back-end NestJS - Tìm hiểu về Unit test, E2E test, độ

coverage trong testing.

- Tìm hiểu các folder thư mục dự án, ý nghĩa, quy định đặt tên biến, hàm, … - Tìm hiểu về DynamoDB, Redis.

Hồn thành tốtcông việc đượcgiao.

23 đến 23/07/2023

- Tham gia Daily meeting cùng các anh chị,học hỏi về mơ hình agile scrum.

- Thực hiện dự án cá nhân, viết Restful API cho các API xác thực người dùng.

- Viết E2E cho các API đã viết

Hồn thành tốtcơng việc đượcgiao.

23 đến 30/07/2023

- Viết tài liệu đặc tả cho những API đã viết - Tìm hiểu và thực hành các cơng nghệ trên điện toán đám mây (AWS) như ECR, Code build, ELB, ECS, DynamoDB, Code pipeline.

Hồn thành tốtcơng việc đượcgiao.

</div><span class="text_page_counter">Trang 17</span><div class="page_container" data-page="17">

17 - Cài đặt CI/CD cho các API xác thực

người dùng

23 đến 05/08/2023

- Tham gia dự án Niko (hệ thống HRM) - Cài đặt môi trường dự án bao gồm: NodeJS, MongoDB, Python, Redmine, Github dự án.

- Đọc các quy tắt khi làm việc với git như:Tạo nhánh, tạo PR, các lỗi thường xảy rakhi code, review chéo, …

- Đọc hiểu source code dự án mới - Tìm hiểu graphQL

Hồn thành tốtcông việc đượcgiao.

3 đến 12/08/2023

- Tìm hiểu luồng code của dự án

- Tìm hiểu các thành phần có trong dự án: Controller, Provider, Module, Middleware,Pipe, Interceptor.

- Tìm hiểu AWS Cloudwatch:

+ Được cấp account AWS để tìm hiểu+ Các phần có trong Cloudwatch

- Tìm hiểu nội dung Logger bao gồm các thành phần: ProcessId, thời gian log được in, Ram sử dụng, loại log, thời gian xử lí 1request, thơng tin trên log, stacktrace, …

Hồn thành tốtcông việc đượcgiao.

3 đến 19/08/2023

- Đọc hiểu tài liệu NestJS về Logger và source code.

- Tìm hiểu thư viện SpectaQL tự động tạo document cho GraphQL.

Hoàn thành tốtcông việc đượcgiao.

3 đến 26/08/2023

- Tìm hiểu Docker, đọc hiểu file docker được viết trong dự án.

- Tìm hiểu cách tạo evidence, testcase cho một task.

- Đọc nguyên tắc làm việc khi merge code từ local lên develop và staging.

Hồn thành tốtcơng việc đượcgiao.

</div><span class="text_page_counter">Trang 18</span><div class="page_container" data-page="18">

18- Tìm hiểu sâu về luồng chạy của Logger.

Nâng cấp thư viện Logger để đáp ứng task. Tìm phạm vi ảnh hưởng của Logger trong toàn bộ đoạn code.

- Nâng cấp thư viện npm để đáp ứng task Logger.

3 đến 02/09/2023

- Thực hiện kiểm thử Logger trên Cloudwatch.

- Tìm hiểu các API được cơng khai của Chatwork.

Hồn thành tốtcông việc đượcgiao.

3 đến 09/09/2023

- Tìm hiểu thành phần CronJob, Guard, JwtStrategy, Pipes, Decorators trong dự án. - Tìm hiểu các bảng dữ liệu có trong hệ thống.

- Nghiên cứu bản vẽ thiết kế hệ thống

Hồn thành tốtcơng việc đượcgiao.

23 đến 16/09/2023

- Nghiên cứu những ảnh hưởng khi nâng cấp phiên bản NodeJS đối với Front-end. - Tìm hiểu S3, ECS, ECR trên AWS, đẩy code lên S3 và chạy code trên ECS. Hoàn thành task.

Hoàn thành tốtcông việc đượcgiao.

3 đến 23/09/2023

- Tìm hiểu output của AI chấm điểm cảm xúc.

- Nghiên cứu cấu trúc lưu trữ hiện tại củaouput AI này dưới MongoDB, phạm vi ảnhhưởng API, CronJob.

- Nghiên cứu CronJob tổng hợp điểm cảm xúc hàng ngày.

Hồn thành tốtcơng việc đượcgiao.

3 đến 30/09/2023

- Tìm hiểu cấu hình unit test, e2e test đã được cấu hình trước đó trong dự án.

Hồn thành tốtcông việc đượcgiao.

</div><span class="text_page_counter">Trang 19</span><div class="page_container" data-page="19">

<b>Thực hiện dự án cá nhân 2.3.1 Công nghệ </b>

• Backend: NestJS framework, Typescript, Docker. • Testing: Jest.

• DevOps: AWS, S3, ECR, Code build, ELB, ECS, DynamoDB. • Tool: Postman, Trello.

<b>2.3.2 Mô tả dự án </b>

Dự án cá nhân được em thực hiện trong vòng 3 tuần (10/07/2023 đến 30/07/2023) sau khithực hiện đọc source code dự án thực tế được tuần đầu tiên. Mục tiêu anh hướng dẫn làlàm quen với framework NestJS, RestfulAPI, E2E test, Unit test, viết tài liệu cho API, tạocơ sở dữ liệu với DynamoDB, làm quen với AWS bằng cách cài đặt CI/CD với đoạn codetrên.

Các nội dung của API chỉ xoay quanh xác thực người dùng, thêm xóa sửa bảng User. Nhưng sẽ bao phủ các kỹ năng mà Backend cơ bản cần có.

Ngồi ra các cịn phải tn thủ quy tắt tên biến, tên file, không được commit code vào nhánh master phải tạo PR, ….

Bảng 2. 2 Bảng công việc thực hiện dự án cá nhân

Tuần 1 (10/07 – 15/07)

Khởi tạo source code - Khởi tạo source NestJS với DynamoDB trên account github cá nhân - Tổ chức các thư mục config, database, modules, repositories

thông tin users - Yêu cầu hash key là trường email

10/07

</div>

×