강의

멘토링

로드맵

Inflearn brand logo image
Programming

/

Back-end

Triển khai chức năng cốt lõi máy chủ ngân hàng với kiến trúc đa module [ Kotlin & Spring ]

Khóa học này bao gồm cách cấu hình một dự án đa module từ đầu, sử dụng Kotlin và Spring Boot. Khóa học được tiến hành theo hướng thực hành, từ các khái niệm cơ bản về module hóa, cài đặt Gradle, quản lý phụ thuộc giữa các module, cho đến phát triển ứng dụng thực tế. Từ người mới bắt đầu đến nhà phát triển trung cấp, hãy tham khảo khóa học này khi muốn tìm hiểu kiến thức cơ bản và ứng dụng thực tế của multi-module.

(4.6) 18 đánh giá

126 học viên

  • Hong
실습 중심
아키텍처
백엔드
백엔드개발자
데이터베이스
Java
Spring
Kotlin
MySQL
Spring Boot

Đánh giá từ những học viên đầu tiên

Dịch cái này sang tiếng Việt

  • Kiến trúc CQRS tách biệt Lệnh (Command) và Truy vấn (Query)

  • Xử lý bất đồng bộ dựa trên sự kiện với Spring

  • Xử lý đồng bộ hóa dữ liệu giữa Write/Read Model

  • Prometheus + Grafana: Giám sát số liệu hệ thống

  • Thiết kế dự án Multi Module cho các dự án quy mô lớn

  • Chiến lược phân tách trách nhiệm và quản lý phụ thuộc sử dụng Multi Module

Thông qua khóa học này, các bạn sẽ...

Bạn sẽ trực tiếp thiết kế và xây dựng hệ thống backend thông minh có khả năng giải quyết rõ ràng các yêu cầu kinh doanh phức tạp và tự phục hồi ngay cả trong tình huống xảy ra sự cố.


🏛. Vượt ra ngoài việc đơn thuần tạo CRUD API, bạn sẽ nắm vững các nguyên lý cốt lõi của kiến trúc dễ bảo trì theo thời gian và có thể mở rộng theo sự phát triển của doanh nghiệp. Đầu tiên, thông qua Thiết kế hướng miền (DDD), bạn sẽ mô hình hóa rõ ràng miền tài chính phức tạp bằng code 📝, và áp dụng mô hình CQRS (Tách biệt trách nhiệm lệnh và truy vấn) để tách biệt việc thay đổi và truy vấn dữ liệu. Qua đó, bạn sẽ học cách đạt được cả hai mục tiêu: tính ổn định của các thao tác ghi và tối ưu hóa hiệu suất truy vấn.


Toàn bộ hệ thống sẽ có khả năng phục hồi mạnh mẽ, không bị sụp đổ vì một lỗi duy nhất. 📨Kiến trúc hướng sự kiện (EDA) được áp dụng để giảm độ kết nối giữa các module và học cách giao tiếp theo phương thức bất đồng bộ, đồng thời sử dụng 🔑Khóa phân tán (Distributed Lock) để đảm bảo hoàn hảo tính nhất quán của dữ liệu ngay cả trong môi trường nhiều server.

Ở đây, bạn sẽ học được bí quyết xây dựng tường lửa ngăn chặn sự cố của một dịch vụ cụ thể lan truyền ra toàn bộ hệ thống bằng cách thêm vào mẫu 🛡Circuit Breaker.


Cuối cùng, chúng ta sẽ đảm bảo 'khả năng quan sát (Observability)' để vận hành hệ thống dựa trên dữ liệu chứ không phải 'cảm tính'. Bằng cách tích hợp PrometheusGrafana, chúng ta sẽ thu thập các chỉ số cốt lõi của ứng dụng theo thời gian thực 📊, và học cách trực quan hóa chúng để phát hiện sớm các vấn đề tiềm ẩn và xác định chính xác các điểm nghẽn về hiệu suất 🩺.


Không chỉ dừng lại ở lý thuyết, hãy biến những công nghệ có thể áp dụng ngay vào dịch vụ thực tế thành của riêng bạn. Đây sẽ là thời gian cùng nhau suy nghĩ và phát triển.

Tại sao phải học Kotlin..?

Spring Bootcó thể tương thích 100%, và ngôn ngữ Kotlin do Jetbrain phát triển được tối ưu hóa cho lập trình đồng thời, điều mà Spring không phù hợp.

📚Ngữ pháp ngắn gọn và trực quan


Kotlin cung cấp cú pháp ngắn gọn và trực quan nên các nhà phát triển có thể thực hiện nhiều công việc hơn với ít code hơn. Điều này có hiệu quả cải thiện khả năng đọc hiểu và giúp bảo trì dễ dàng hơn.

📚 Năng suất cao và tính an toàn


Kotlin hỗ trợ tính an toàn null một cách mặc định, giúp giảm thiểu ngoại lệ con trỏ null (NullPointerException). Ngoài ra, nó hỗ trợ lập trình hàm, cho phép viết code theo cách chức năng và khai báo hơn. Những tính năng này giúp tăng năng suất phát triển và giảm khả năng xảy ra lỗi.

📚 Tính tương thích cao


Kotlin tương thích 100% với Java nên có thể dễ dàng tích hợp vào các dự án Java hiện có. Điều này có nghĩa là các nhà phát triển Java không gặp rào cản lớn khi học Kotlin và có thể sử dụng các tính năng mới của Kotlin trong khi vẫn duy trì mã hiện có.

Sau khi hoàn thành khóa học, bạn có thể tạo ra những sản phẩm như thế này

Kiến trúc mô-đun và Thiết kế hướng miền (DDD)

Học về phương pháp thiết kế module cơ bản của MSA(Kiến trúc Microservice) và thiết kế hướng domain. Học cách cấu thành các yêu cầu kinh doanh phức tạp thành code rõ ràng và dễ bảo trì. Học cách các module (api, core, domain, event) phân chia vai trò và thiết kế ứng dụng tập trung vào domain model.

Mẫu CQRS (Command Query Responsibility Segregation - Phân tách trách nhiệm lệnh và truy vấn)

Học về mẫu CQRS giúp tăng hiệu suất và khả năng mở rộng của hệ thống bằng cách tách biệt logic thay đổi dữ liệu (Command) và truy vấn (Query). Hiểu cách tối ưu hóa riêng biệt mô hình chỉ ghi và mô hình chỉ đọc, triển khai bằng code thực tế, đồng thời học cách giảm thiểu vấn đề đồng thời và chọn cơ sở dữ liệu phù hợp cho từng mô hình.

Kiến trúc hướng sự kiện (EDA)

Học cách tạo từng phần của hệ thống thành các dịch vụ độc lập và cho phép chúng giao tiếp với nhau thông qua Event. Tìm hiểu nguyên lý giảm độ kết nối giữa các module và cải thiện khả năng phản hồi cũng như tính linh hoạt của toàn bộ hệ thống thông qua xử lý bất đồng bộ.

Đảm bảo tính ổn định của hệ thống phân tán (Circuit Breaker)

Học về mẫu thiết kế Circuit Breaker giúp ngăn chặn sự cố từ hệ thống bên ngoài lan truyền đến toàn bộ hệ thống. Tìm hiểu cách bảo vệ hệ thống khỏi các lỗi tạm thời và vận hành dịch vụ một cách ổn định ngay cả khi xảy ra sự cố. Thông qua đó, bạn sẽ hiểu được cách nâng cao khả năng phục hồi của hệ thống.

Kiểm soát đồng thời và khóa phân tán (Distributed Lock)

Học nguyên lý của distributed lock để giải quyết vấn đề phát sinh khi nhiều server cùng truy cập vào cùng một dữ liệu đồng thời. Học và triển khai phương pháp đảm bảo tính nhất quán của dữ liệu bằng cách sử dụng external storage như Redis. Thông qua điều này, phát triển khả năng xử lý dữ liệu một cách an toàn trong môi trường đồng thời.

Giám sát hệ thống và khả năng quan sát (Observability)

Học cách nắm bắt trạng thái ứng dụng theo thời gian thực và chẩn đoán vấn đề một cách nhanh chóng. Xây dựng và học tập toàn bộ pipeline giám sát bằng cách thu thập metrics với Prometheus và trực quan hóa thông qua Grafana. Bạn sẽ học được cách tăng tính minh bạch của hệ thống để tối đa hóa hiệu quả vận hành.

Khám phá kiến trúc

Sự phụ thuộc giữa các Module

Event Sourcing

Các Chỉ Số Giám Sát

Xem trước nội dung bài giảng

📚 'Dashboard giám sát sử dụng Grafana' Trong khóa học


📚 Trong khóa học 'Gradle cho Multi Module'


📚 'Lập trình hàm để vượt qua giới hạn của @Transactional' Trong buổi học


Công nghệ được đề cập trong khóa học

MySQL

Để xử lý dữ liệu có mối quan hệ liên kết, cơ sở dữ liệu quan hệ MySQL được sử dụng.

Cấu hình JPA, viết Entity và chỉ định mối quan hệ giữa các dữ liệu thông qua phương thức code, bạn sẽ có được cấu trúc linh hoạt cho việc phát triển dịch vụ.

  • Không kết nối với MySQL Database thực tế. Mục tiêu là chỉ viết các câu truy vấn SQL và tiến hành test bằng cách sử dụng H2.

Circuit Breaker

Được triển khai theo cách thức hàm số sử dụng Resilience4j, tạo ra các instance CircuitBreaker độc lập cho từng dịch vụ để quản lý hiệu quả việc cách ly và phục hồi trong các tình huống lỗi. Thông qua điều này, nó nâng cao độ tin cậy của dịch vụ và ngăn chặn sự lan truyền lỗi.

Redis

Sử dụng tính năng khóa phân tán của Redis để đảm bảo tính nhất quán của dữ liệu trong tình huống có nhiều instance.

Kiến trúc CQRS

Mẫu CQRS được áp dụng để tách biệt trách nhiệm của lệnh và truy vấn.

Command và Query được cấu thành thành các module riêng biệt để sử dụng mô hình dữ liệu và kho lưu trữ được tối ưu hóa cho từng loại. Thông qua điều này, việc mở rộng quy mô độc lập và tối ưu hóa hiệu suất cho các tác vụ đọc và ghi trở nên khả thi.

Event Driven Architecture

Kiến trúc dựa trên sự kiện được triển khai để tạo ra sự kết nối lỏng lẻo giữa các dịch vụ. Sử dụng mô hình phát hành-đăng ký sự kiện, các mối quan hệ kết nối vô nghĩa giữa các giao dịch được triển khai một cách lỏng lẻo.

Kiến trúc Multi Module

Kiến trúc đa module được áp dụng để tách biệt các mối quan tâm và thực hiện module hóa.

Sử dụng Gradle để tách các module như bank-api, bank-core, bank-domain, và định nghĩa rõ ràng trách nhiệm cũng như dependency của từng module. Thông qua việc này, chúng ta cải thiện tính tái sử dụng và khả năng bảo trì của code.

Mẫu Theo Dõi Giao Dịch

Để đảm bảo tính nhất quán và khả năng theo dõi của giao dịch, mẫu Transaction Trailing được triển khai.

Sử dụng AOP để theo dõi việc bắt đầu và kết thúc của transaction, đồng thời ghi log trạng thái và kết quả của từng transaction. Điều này giúp việc giám sát và debug transaction trở nên dễ dàng hơn.

Open API (Swagger)

OpenAPI(Swagger) được áp dụng để tài liệu hóa và kiểm thử API.

SpringDoc OpenAPI được sử dụng để tự động tạo tài liệu cho các endpoint của API, schema yêu cầu/phản hồi và phương thức xác thực. Thông qua điều này, nó nâng cao khả năng đọc hiểu và dễ dàng kiểm thử của API, đồng thời tạo điều kiện thuận lợi cho việc hợp tác với các nhà phát triển client.

4 giá trị quan trọng mà chúng tôi trân trọng

1. Bài giảng phải có tính nhân văn.

Dù có thể bị coi là thiếu chuyên môn, tôi nghĩ rằng những bài giảng dễ trình bày không phải là bài giảng thực sự. Thời gian tiến hành debug cũng là một phần của bài giảng.

2. Phải chuyên biệt hóa cho thực tế công việc

Lập trình không phải là nói suông. Bạn có thể cùng thực hiện việc triển khai thực tế và trải nghiệm quá trình hoạt động.

  • Các bạn planner... xin hãy cứu tôi..

3. Phải có ích cho các học viên.

Tôi muốn truyền đạt những khái niệm mà tôi đã áp dụng trong thực tế và thấy hiệu quả. Thông qua khóa học này, bạn có thể trải nghiệm gián tiếp công việc thực tế hoặc nếu đã là người làm thực tế thì có thể thể hiện hiệu suất xuất sắc hơn trong môi trường làm việc.

4. Bài giảng không phải là kết thúc.

Khi tiến hành bài giảng, tôi mong các bạn để lại nhiều câu hỏi và thảo luận. Khóa học này không chỉ được tạo ra từ kiến thức của riêng tôi. Nó cũng tổng hợp ý kiến từ nhiều lập trình viên của các công ty lớn.

  • Tiểu sử ngắn gọn về những người đã giúp đỡ hoàn thành khóa học như sau.


private val supported_one = "Nhà phát triển backend nền tảng KakaoPay"

private val supported_two = "Nhà phát triển máy chủ API Toss Securities"

private val supported_three = "Nhà phát triển máy chủ startup unicorn (yêu cầu giữ bí mật)"

Lưu ý trước khi học

Môi trường thực hành

  • Được quay bằng Macos M3.

  • Docker được sử dụng một cách cơ bản.

  • java --version : 17.0.12 2024-07-16 LTS

  • Tôi sử dụng IDE thuộc dòng JetBrain.

  • Sử dụng Gradle để build.

  • Không đề cập đến cơ sở hạ tầng.

😍 Các chủ đề hay nên xem cùng

Khuyến nghị cho
những người này

Khóa học này dành cho ai?

  • Nhà phát triển mong muốn học kỹ thuật xử lý logic nghiệp vụ phức tạp, vượt ra khỏi CRUD đơn giản.

  • Lập trình viên muốn trau dồi kỹ năng thiết kế

  • Người nhập môn kiến trúc MSA

  • Nhà phát triển muốn tìm hiểu về kiến trúc hướng sự kiện và chiến lược tách dịch vụ.

  • Lập trình viên muốn học dự án thực tế ứng dụng Spring + Kotlin

Xin chào
Đây là

2,725

Học viên

185

Đánh giá

76

Trả lời

4.5

Xếp hạng

14

Các khóa học

자기 소개

집에서 빈둥대다 개발에 흥미를 느껴 개발 공부를 시작하였고 현재는 판교에서 플랫폼 서버 개발을 담당하여 진행하고 있습니다.

 

제가 공부를 했던 방법과 실무에서 접하실 수 있는 여러가지 문제점들과 해결책을 여러분들에게 제공하고 싶어 지식공유자 활동을 이어나가고 있습니다.

 

강의는 오로지 저만의 지식을 통해 만들어지지 않습니다. 모든 강의는 함께하시는 분들이 계십니다.

 

지식공유자 경력

[前] 샌드박스 블록체인 개발자

[前] 넥슨 자회사 백엔드 개발자

[] 판교에서 고여가는 서버 개발자

 

인터뷰 이력

Chương trình giảng dạy

Tất cả

34 bài giảng ∙ (6giờ 41phút)

Tài liệu khóa học:

Tài liệu bài giảng
Ngày đăng: 
Cập nhật lần cuối: 

Đánh giá

Tất cả

18 đánh giá

4.6

18 đánh giá

  • 우왕 개발자다님의 프로필 이미지
    우왕 개발자다

    Đánh giá 6

    Đánh giá trung bình 5.0

    5

    32% đã tham gia

    같이 강의를 촬영하는데 코드와 아키텍처를 고민하고 참여한 카카오에서 개발하고 있는 서버 개발자 입니다!! 이번에는 좀 더 아키텍처 부분에 집중을 하여 프로젝트를 준비해 보았고 동시성 처리에 대한 부분과 애플리케이션 회복 패턴에 대해서도 포함을 시켜보았습니다. 이 강의가 여러분들의 견문을 넓혀주고 큰 그림을 볼 수 있는 좋은 강의가 되었으면 좋겠습니다!! 많은 관심 부탁드립니다! 🩷

    • Hong
      Giảng viên

      항상 도움 주셔서 감사합니다!! 다음 강의도 함께 만들어서 많은 분들에게 좋은 지식 공유드려봐요 ㅎㅎ

  • devHand님의 프로필 이미지
    devHand

    Đánh giá 9

    Đánh giá trung bình 5.0

    5

    62% đã tham gia

    실제 기능 구현과 서버 관리에 대한 영양가 있는 강의라고 생각하고 디버깅하는 모습도 리스크가 많으셨을텐데 현실적으로 보여주시는게 너무 도움이 되었습니다. 내용 자체도 좋은데 여러모로 배워갈 수 있는 부분이 많은거 같네요. 강의 잘 들었습니다.

    • Hong
      Giảng viên

      좋은 평 남겨주셔서 감사합니다. devHand님!! 이 강의가 devHand님에게 좋은 주제로써 접근이 된거같아 기분이 좋네요!! 다음 강의도 더 알찬 강의로 찾아뵙도록 하겠습니다. 감사합니다!

  • 8번이 좋아님의 프로필 이미지
    8번이 좋아

    Đánh giá 4

    Đánh giá trung bình 5.0

    5

    97% đã tham gia

    너무 좋은 프로젝트형 강의라는 생각이 드네요 기존에 몰랐던 부분도 학습 할 수 있었고 되돌아보면 초기에 비해 보면 볼수록 더 매력적이고 많이 배웠던 시간이였습니다. 감사합니다.

    • Hong
      Giảng viên

      안녕하세요 8번이 좋아님! 제 스스로도 프로젝트 방식으로 강의를 제공하고 싶었는데 관련하여 좋은 평을 남겨주셔서 너무 감사드립니다!

  • Hyunwoo Kim님의 프로필 이미지
    Hyunwoo Kim

    Đánh giá 4

    Đánh giá trung bình 5.0

    5

    100% đã tham gia

    재밌게 잘 봤습니다. 앞으로 응원하고 다른 강의들도 볼 예정입니다. 각 카테고리별로 가볍게 한 번 구현해보고 진행한다는 생각으로 들으면 좋을 것 같아요. 이 한 강의에 모든 내용이 다 담길 순 없으니까요.

    • Hong
      Giảng viên

      안녕하세요 Hyunwoo Kim 강의 들어주셔서 감사합니다! 다양한 아키텍처와 사용방법 및 활용법을 알려드리고 싶었습니다. 아무래도 이 내용은 일반적으로 쉽지 않은 개발방식이도 많은 툴들이 함께 사용이 되어야 합니다. 이 부분까지는 제가 다루지 못하였지만 말씀해 주신 것처럼 가볍게 한번 구현해보며 이해도를 높이고 알려드리고 싶었습니다. 앞으로 더 좋은 강의로 찾아뵙도록 할게요! 감사합니다!

  • 개발 잘하고 싶다...님의 프로필 이미지
    개발 잘하고 싶다...

    Đánh giá 7

    Đánh giá trung bình 5.0

    5

    85% đã tham gia

    처음 접해보는 내용이기도 하고, 뭔가 제가 보는 시야가 좀 넓어질 수 있었던 강의인거 같습니다. 프로젝트 관리나 아키텍처 관점에서 많은 도움이 되었습니다. 감사합니다.

    • Hong
      Giảng viên

      안녕하세요 개발 잘하고 싶다님. 이렇게 평 남겨주셔서 감사합니다. 일반적인 개발 방식이 아닌 다양한 관점에서 관리하고 개발을 하는 방식을 다루어 보고 싶었습니다. 앞으로 더 좋은 강의로 찾아뵙도록 할게요! 감사합니다.

Ưu đãi có thời hạn

70.400 ₫

20%

1.883.335 ₫

Khóa học khác của Hong

Hãy khám phá các khóa học khác của giảng viên!

Khóa học tương tự

Khám phá các khóa học khác trong cùng lĩnh vực!