강의

멘토링

로드맵

Inflearn brand logo image
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を活用した実務プロジェクトを学びたい開発者

こんにちは
です。

2,728

受講生

188

受講レビュー

76

回答

4.5

講座評価

14

講座

자기 소개

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

 

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

 

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

 

지식공유자 경력

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

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

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

 

인터뷰 이력

カリキュラム

全体

34件 ∙ (6時間 41分)

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

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

受講レビュー

全体

18件

4.6

18件の受講レビュー

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

    受講レビュー 6

    平均評価 5.0

    5

    32% 受講後に作成

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

    • Hong
      知識共有者

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

  • devHand님의 프로필 이미지
    devHand

    受講レビュー 9

    平均評価 5.0

    5

    62% 受講後に作成

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

    • Hong
      知識共有者

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

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

    受講レビュー 4

    平均評価 5.0

    5

    97% 受講後に作成

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

    • Hong
      知識共有者

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

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

    受講レビュー 4

    平均評価 5.0

    5

    100% 受講後に作成

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

    • Hong
      知識共有者

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

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

    受講レビュー 7

    平均評価 5.0

    5

    85% 受講後に作成

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

    • Hong
      知識共有者

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

期間限定セール

¥70,400

20%

¥10,542

Hongの他の講座

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

似ている講座

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