강의

멘토링

커뮤니티

BEST
Programming

/

Back-end

マルチモジュールアーキテクチャで実装する銀行サーバー核心機能 [ Kotlin & Spring ]

この講義はKotlinとSpring Bootを活用し、マルチモジュールプロジェクトをゼロから構築する方法を扱います。 モジュール化の基本概念からGradle設定、モジュール間の依存性管理、実際のアプリケーション開発まで実習を中心に進めます。 初心者から中級開発者まで、マルチモジュールの基礎と実務への適用を学びたい時に、本講義を参考にしてください。

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

学習した受講者のレビュー

受講後に得られること

  • コマンド(Command)とクエリ(Query)を分離するCQRSアーキテクチャ

  • Springを活用したイベント駆動非同期処理

  • Write/Read Model 間のデータ同期処理

  • Prometheus + Grafana を活用したシステムメトリックモニタリング

  • 大規模プロジェクトのためのMulti Moduleプロジェクト設計

  • マルチモジュールを活用した責任分離および依存性管理戦略

この講義を通じて皆さんは...

複雑なビジネス要件を明快に解決し、障害状況でも自ら回復するインテリジェントなバックエンドシステムを直接設計・構築することになります。


🏛単純にCRUD APIを作ることを超えて、時間が経っても保守しやすく、ビジネスの成長に応じて拡張可能なアーキテクチャの核心原理を体得します。まず、ドメイン駆動設計(DDD)を通じて複雑な金融ドメインをコードで明確にモデリングし📝CQRS(コマンドクエリ責任分離)パターンを適用してデータの変更と照会を分離します。これにより、書き込み作業の安定性と照会性能の最適化という二兎を追う方法を学びます。


システム全体が一つの障害で崩れない強力な弾力性を備えるようになります。📨イベント駆動アーキテクチャ(EDA)を導入して各モジュール間の結合度を下げ、非同期方式で通信する方法を学び、🔑分散ロック(Distributed Lock)を活用して複数のサーバー環境でもデータの整合性を完璧に保証します。

ここに🛡サーキットブレーカーパターンを加えて、特定のサービスの障害がシステム全体に伝播することを防ぐファイアウォールを構築するノウハウを身につけることになります。


最後に、「勘」ではなくデータに基づいてシステムを運営する「観測可能性(Observability)」を確保します。PrometheusGrafanaを連携してアプリケーションの核心メトリクスをリアルタイムで収集し📊、これを可視化して潜在的な問題を事前に検知し、性能ボトルネック地点を正確に見つけ出す技術を学習します🩺


理論だけで終わらず、実際のサービスにすぐ適用可能な技術を皆さんのものにしてみてください。一緒に悩み、成長する時間になるでしょう。

Kotlinなぜ学ぶべきなのか..?

Spring Bootと100%互換性があると言われており、JetBrainが開発したKotlinという言語は、Springには適していない並行プログラミングに最適化されています。

📚簡潔で直感的な文法


Kotlinは簡潔で直感的な文法を提供する形態であるため、開発者がより少ないコードでより多くの作業を実行することができます。これは可読性向上の効果があり、保守をより容易にします。

📚高い生産性と安全性


Kotlinは基本的にnull安全性をサポートしており、NullPointerExceptionを減らすことができます。また、関数型プログラミングをサポートしているため、より機能的で宣言的な方法でコードを書くことができます。これらの機能は開発生産性を向上させ、バグ発生の可能性を減らしてくれます。

📚高い互換性


Kotlinは100%Javaと互換性があるため、既存のJavaプロジェクトに簡単に統合できます。これは、Java開発者がKotlinを学ぶ際に大きな障壁がなく、既存のコードを維持しながらも新しいKotlin機能を使用できることを意味します。

講義を受講すると、このような成果物を作ることができます

モジュラーアーキテクチャとドメイン駆動設計(DDD)

MSA(マイクロサービスアーキテクチャ)の基盤となるモジュール設計方法とドメイン駆動設計について学習します。複雑なビジネス要件を明確で保守しやすいコードで構成する方法を学びます。各モジュール(api、core、domain、event)がどのように役割を分担し、ドメインモデルを中心としてアプリケーションを設計するかを学習します。

CQRS(コマンドクエリ責任分離)パターン

データの変更(Command)と照会(Query)ロジックを分離してシステムの性能と拡張性を高めるCQRSパターンを学習します。書き込み専用モデルと読み込み専用モデルをそれぞれ最適化する方法を理解し、実際のコードで実装しながら、同時性の問題を減らし、各モデルに適したデータベースを選択する方法も一緒に学習します。

イベント駆動アーキテクチャ (EDA)

システムの各部分を独立したサービスとして構築し、イベント(Event)を通じて相互に通信させる方法を学びます。モジュール間の結合度を下げ、非同期処理により全体システムの応答性と弾力性を向上させる原理を学習します。

分散システムの安定性確保(サーキットブレーカー)

外部システムの障害が全体システムに伝播することを防ぐサーキットブレーカーパターンを学びます。一時的なエラーからシステムを保護し、障害発生時にも安定的にサービスを運営する方法を学習します。これを通じてシステムの回復弾力性を高める方法を理解するようになります。

並行性制御と分散ロック (Distributed Lock)

複数のサーバーが同時に同じデータにアクセスする際に発生する問題を解決する分散ロックの原理を学びます。Redisのような外部ストレージを活用してデータの整合性を保証する方法を学習し実装します。これにより、並行環境で安全にデータを処理する能力を身につけます。

システム監視と観測性 (Observability)

アプリケーションの状態をリアルタイムで把握し、問題を迅速に診断する方法を学びます。Prometheusを使用してメトリクスを収集し、Grafanaを通じて可視化する全体的なモニタリングパイプラインを構築し学習します。システムの透明性を高めて運用効率を最大化する方法を学ぶことができます。

アーキテクチャの味見

Module間の依存性

Event Sourcing

Monitoring Metrics

講義内容の試食

📚 'Grafanaを活用したモニタリングダッシュボード' 授業中


📚 'Multi ModuleのためのGradle' 授業中


📚 '@Transactional 限界克服のための関数型プログラミング' 授業中


講義で扱う技術スタック

MySQL

関連関係のあるデータを扱うために、リレーショナルデータベースであるMySQLが使用されます。

JPAを構成し、Entityを作成してデータ間の関連関係を明示するコード方式を通じて、サービス開発において柔軟な構造を持つことができるようになります。

  • 実際のMySQL Databaseには接続しません。SQLクエリのみを作成し、H2を活用してテストを進めることを目標とします。

Circuit Breaker

Resilience4jを使用して関数型方式で実装され、サービス別に独立したCircuitBreakerインスタンスを生成して障害状況に対する分離と復旧を効果的に管理します。これにより、サービスの信頼性を高め、障害の伝播を防止します。

Redis

Redisの分散ロック機能を使用し、複数のインスタンス状況でデータの一貫性を保証します。

CQRSアーキテクチャ

コマンドとクエリの責任を分離するためにCQRSパターンが適用されます。

CommandとQueryを分離されたモジュールで構成し、それぞれに最適化されたデータモデルとストレージを使用します。これにより、読み取りと書き込み作業の独立したスケーリングと性能最適化が可能になります。

Event Driven Architecture

サービス間の疎結合のためにイベント駆動アーキテクチャが実装されます。イベント発行-購読パターンを活用し、トランザクション間の無意味な結合関係を疎に実装することになります。

マルチモジュールアーキテクチャ

関心事の分離とモジュール化のためにマルチモジュールアーキテクチャが適用されます。

Gradleを使用してbank-api、bank-core、bank-domainなどにモジュールを分離し、各モジュールの責任と依存性を明確に定義します。これにより、コードの再利用性と保守性を向上させます。

トランザクション追跡パターン

トランザクションの一貫性と追跡性のためにTransaction Trailingパターンが実装されます。

AOPを活用してトランザクションの開始と終了を追跡し、各トランザクションの状態と結果をロギングします。これによりトランザクションのモニタリングとデバッグが容易になります。

Open API (Swagger)

API文書化とテストのためにOpenAPI(Swagger)が適用されます。

SpringDoc OpenAPIを使用してAPIのエンドポイント、リクエスト/レスポンススキーマ、認証方式を自動的に文書化します。これによりAPIの可読性とテスト容易性を向上させ、クライアント開発者との協業を円滑にします。

大切にしている4つの価値観

1. 講義は人間的でなければならない。

専門性が劣って見えるかもしれませんが、見せやすい講義は講義ではないと思います。デバッグを進める時間もまた講義の一部です。

2. 実務に特化すべきである

開発は口で言うものではありません。実際に実装してみて、動作する過程を一緒に体験していただけます。

  • 企画者の皆さん...助けてください..

3. 受講生の皆さんの役に立つ必要がある。

私が実務で適用して効果を得た概念を盛り込もうとしました。この過程を通じて実務を間接的に体験していただくか、実務者であれば実務環境でより優れたパフォーマンスを発揮していただけます。

4. 講義が終わりではない。

講義を進めながら質疑応答をたくさん残していただければと思います。この講義は私一人だけの知識によって作られたものではありません。様々な大企業の開発者の方々のご意見も取り入れられています。

  • 講義完成にご協力いただいた方々の簡単な経歴は以下の通りです。


private val supported_one = "カカオペイ プラットフォーム バックエンド開発者"

private val supported_two = "トス証券 APIサーバー開発者"

private val supported_three = "秘密にしてほしいというユニコーンスタートアップ サーバー開発者"

受講前の参考事項

実習環境

  • Macos M3を使用して撮影されました。

  • Dockerを基本的に使用します。

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

  • JetBrain系のIDEを使用します。

  • Gradleを使用してビルドします。

  • インフラについては扱いません。

😍一緒に見ると良いトピック

こんな方に
おすすめです

学習対象は
誰でしょう?

  • 単純なCRUDから脱却し、複雑なビジネスロジック処理技法を学びたい開発者

  • 設計力を伸ばしたい開発者

  • MSAアーキテクチャの入門者

  • イベント駆動アーキテクチャとサービス分離戦略を学びたい開発者

  • Spring + Kotlinを活用した実務プロジェクトを学びたい開発者

こんにちは
です。

4,588

受講生

334

受講レビュー

118

回答

4.7

講座評価

18

講座

자기 소개

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

 

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

 

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

 

지식공유자 경력

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

[前] 메타버스 백엔드 개발자

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

 

인터뷰 이력

カリキュラム

全体

34件 ∙ (6時間 41分)

講座資料(こうぎしりょう):

授業資料
講座掲載日: 
最終更新日: 

受講レビュー

全体

28件

4.7

28件の受講レビュー

  • ddddve님의 프로필 이미지
    ddddve

    受講レビュー 9

    平均評価 5.0

    5

    32% 受講後に作成

    I'm a server developer at Kakao who participated in filming this lecture, having deeply considered its code and architecture!! This time, I've prepared the project with a greater focus on the architecture, and I've also included concurrency handling and application recovery patterns. I hope this lecture helps broaden your horizons and becomes a valuable course that allows you to see the bigger picture!! Please show much interest! 🩷

    • jhong
      知識共有者

      Thank you always for your help!! Let's create the next lecture together and share good knowledge with many. 😊😊

  • de님의 프로필 이미지
    de

    受講レビュー 10

    平均評価 5.0

    5

    62% 受講後に作成

    I consider this a valuable lecture on actual feature implementation and server management, and showing the debugging process realistically, despite the high risks, was incredibly helpful. The content itself is great, and it seems there are many aspects to learn from in various ways. I thoroughly enjoyed the lecture.

    • jhong
      知識共有者

      Thanks for the great review. devHand!! Glad this lecture resonated well with you, devHand!! I'll be back with a more enriching lecture. Thank you!

  • eightee724277님의 프로필 이미지
    eightee724277

    受講レビュー 5

    平均評価 5.0

    5

    97% 受講後に作成

    I think this is such a great project-based course. I was able to learn parts I didn't know before, and looking back, compared to the beginning, the more I see it, the more attractive it becomes and it was a time when I learned a lot. Thank you.

    • jhong
      知識共有者

      Hello, I'm glad you liked #8! I myself wanted to provide lectures in a project-based format, so I'm very grateful that you left such positive feedback about it!

  • hyunwookim11085590님의 프로필 이미지
    hyunwookim11085590

    受講レビュー 4

    平均評価 5.0

    5

    100% 受講後に作成

    I enjoyed watching it. I will be cheering you on and plan to watch other lectures as well. I think it would be good to listen with the mindset of lightly implementing each category once before proceeding. Since all the content can't be covered in just one lecture.

    • jhong
      知識共有者

      Hello, thank you for attending Hyunwoo Kim's lecture! I wanted to share various architectures, their usage, and application methods. This content is generally not an easy development approach and requires many tools to be used together. Although I couldn't cover everything, as you suggested, I wanted to implement it lightly to enhance understanding and explain it. I'll come back with better lectures in the future! Thank you!

  • ureview229499님의 프로필 이미지
    ureview229499

    受講レビュー 7

    平均評価 5.0

    5

    85% 受講後に作成

    This is content I'm encountering for the first time, and it seems like a lecture that could broaden my perspective. It was very helpful from a project management and architecture standpoint. Thank you.

    • jhong
      知識共有者

      Hello, 개발 잘하고 싶다님. Thanks for the review. I wanted to cover managing and developing from varied perspectives, not just typical methods. I'll strive for better lectures ahead! Thank you.

¥11,118

Hongの他の講座

知識共有者の他の講座を見てみましょう!

似ている講座

同じ分野の他の講座を見てみましょう!