강의

멘토링

로드맵

Inflearn brand logo image
개발 · 프로그래밍

/

백엔드

멀티 모듈 아키텍처로 구현하는 은행 서버 핵심 기능 [ Kotlin & Spring ]

이 강의는 Kotlin과 Spring Boot를 활용해 멀티 모듈 프로젝트를 처음부터 구성하는 방법을 다룹니다. 모듈화의 기본 개념부터 Gradle 설정, 모듈 간 의존성 관리, 실제 애플리케이션 개발까지 실습 중심으로 진행합니다. 초보자부터 중급 개발자까지 멀티 모듈의 기초와 실무 적용을 배우고 싶을 때 해당 강의를 참고해 주세요.

(4.7) 수강평 17개

수강생 115명

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

먼저 경험한 수강생들의 후기

이런 걸 배울 수 있어요

  • 명령(Command)와 조회(Query)를 분리하는 CQRS 아키텍처

  • Spring을 활용한 이벤트 기반 비동기 처리

  • Write/Read Model 간 데이터 동기화 처리

  • Prometheus + Grafana를 활용한 시스템 메트릭 모니터링

  • 대규모 프로젝트를 위한 Multi Module 프로젝트 설계

  • Multi Module을 활용한 책임 분리 및 의존성 관리 전략

이 강의를 통해 여러분은...

복잡한 비즈니스 요구사항을 명쾌하게 해결하고, 장애 상황에서도 스스로 회복하는 지능적인 백엔드 시스템을 직접 설계하고 구축하게 됩니다.


🏛. 단순히 CRUD API를 만드는 것을 넘어, 시간이 지나도 유지보수하기 쉽고 비즈니스 성장에 따라 확장 가능한 아키텍처의 핵심 원리를 체득합니다. 먼저, 도메인 주도 설계(DDD)를 통해 복잡한 금융 도메인을 코드로 명확하게 모델링하고 📝, CQRS (명령 조회 책임 분리) 패턴을 적용하여 데이터의 변경과 조회를 분리합니다. 이를 통해 쓰기 작업의 안정성과 조회 성능 최적화라는 두 마리 토끼를 모두 잡는 방법을 배웁니다.


시스템 전체가 하나의 실패에 무너지지 않는 강력한 탄력성을 갖추게 됩니다. 📨이벤트 기반 아키텍처(EDA)를 도입하여 각 모듈 간의 결합도를 낮추고 비동기 방식으로 통신하는 방법을 배우며, 🔑분산 락(Distributed Lock)을 활용해 여러 서버 환경에서도 데이터의 정합성을 완벽하게 보장합니다.

여기에 🛡서킷 브레이커 패턴을 더해, 특정 서비스의 장애가 시스템 전체로 전파되는 것을 막는 방화벽을 구축하는 노하우를 익히게 될 것입니다.


마지막으로, '감'이 아닌 데이터에 근거하여 시스템을 운영하는 '관측 가능성(Observability)'을 확보합니다. PrometheusGrafana를 연동하여 애플리케이션의 핵심 메트릭을 실시간으로 수집하고 📊, 이를 시각화하여 잠재적인 문제를 사전에 탐지하고 성능 병목 지점을 정확히 찾아내는 기술을 학습합니다 🩺.


이론으로만 끝나지 않고, 실제 서비스에 바로 적용 가능한 기술을 여러분의 것으로 만들어 보세요. 함께 고민하고, 성장하는 시간이 될 것입니다.

Kotlin 왜 배워야 하지..?

Spring Boot와 100% 혼용이 된다고 말하며, Jetbrain에서 만든 Kotlin이라는 언어는 Spring에서 적합하지 않은 동시성 프로그래밍에 최적화되어 있습니다.

📚간결하고 직관적인 문법


Kotlin은 간결하고 직관적인 문법을 제공하는 형태이기 떄문에 개발자가 더 적은 코드로 더 많은 작업을 수행 할 수 있습니다. 이는 가독성 향상의 효과가 있으며 요지보수가 더 용이하게 합니다.

📚 높은 생산성과 안전성


Kotlin은 널 안정성을 기본적으로 지원하여 널 포인터 예외(NullPointerException)를 줄일 수 있습니다. 또한, 함수형 프로그래밍을 지원하여 보다 기능적이고 선언적인 방식으로 코드를 작성할 수 있습니다. 이러한 기능들은 개발 생산성을 높이고, 버그 발생 가능성을 줄여줍니다.

📚 높은 호환성


Kotlin은 100% 자바와 호환되므로 기존 자바 프로젝트에 쉽게 통합할 수 있습니다. 이는 자바 개발자들이 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 Architecture

명령과 조회의 책임을 분리하기 위해 CQRS 패턴이 적용됩니다.

Command와 Query를 분리된 모듈로 구성하여 각각의 최적화된 데이터 모델과 저장소를 사용합니다. 이를 통해 읽기와 쓰기 작업의 독립적인 스케일링과 성능 최적화가 가능해집니다.

Event Driven Architecture

서비스 간의 느슨한 결합을 위해 이벤트 기반 아키텍처가 구현됩니다. 이벤트 발행-구독 패턴을 활용하며, 트랜잭션 간에 무의미한 결합 관계를 느슨하게 구현하게 됩니다.

Multi Module Architecture

관심사의 분리와 모듈화를 위해 멀티 모듈 아키텍처가 적용됩니다.

Gradle을 사용하여 bank-api, bank-core, bank-domain 등으로 모듈을 분리하고, 각 모듈의 책임과 의존성을 명확히 정의합니다. 이를 통해 코드의 재사용성과 유지보수성을 향상시킵니다.

Transaction Trailing Pattern

트랜잭션의 일관성과 추적성을 위해 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,421

수강생

171

수강평

73

답변

4.5

강의 평점

13

강의

자기 소개

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

 

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

 

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

 

지식공유자 경력

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

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

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

 

인터뷰 이력

커리큘럼

전체

34개 ∙ (6시간 41분)

해당 강의에서 제공:

수업자료
강의 게시일: 
마지막 업데이트일: 

수강평

전체

17개

4.7

17개의 수강평

  • ddddve님의 프로필 이미지
    ddddve

    수강평 5

    평균 평점 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

    수강평 9

    평균 평점 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

    수강평 4

    평균 평점 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.

배움이 더 쉬워지는 9월의 할인 중 (2일 남음)

₩53

23%

₩89,100

Hong님의 다른 강의

지식공유자님의 다른 강의를 만나보세요!

비슷한 강의

같은 분야의 다른 강의를 만나보세요!