강의

멘토링

로드맵

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

/

백엔드

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

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

(4.7) 수강평 17개

수강생 114명

  • 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,398

수강생

171

수강평

73

답변

4.5

강의 평점

13

강의

자기 소개

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

 

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

 

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

 

지식공유자 경력

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

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

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

 

인터뷰 이력

커리큘럼

전체

34개 ∙ (6시간 41분)

해당 강의에서 제공:

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

수강평

전체

17개

4.7

17개의 수강평

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

    수강평 5

    평균 평점 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
      지식공유자

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

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

₩66,820

25%

₩89,100

Hong님의 다른 강의

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

비슷한 강의

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