피드로 돌아가기
From Monolith to Microservices: Why I Redesigned Finovara's Architecture - Finovara
Dev.toDev.to
Backend

Monolith 분리를 통한 관심사 분리 및 Event-Driven 아키텍처 전환

From Monolith to Microservices: Why I Redesigned Finovara's Architecture - Finovara

Marcin Parśniak2026년 6월 6일6intermediate

Context

인증, 트랜잭션, 활동 로그 등 모든 도메인이 단일 Spring Boot 앱에 통합된 Monolith 구조로 인한 높은 결합도 발생. 기능 추가 시 무관한 도메인의 사이드 이펙트 위험이 증가하며 코드 유지보수 효율성이 저하된 상황.

Technical Solution

  • Spring Cloud Gateway 도입을 통한 단일 진입점 구축 및 CORS 설정 중앙화를 통한 개별 서비스 부담 제거
  • contracts-backend 모듈 분리를 통해 Kafka Event Record 및 DTO를 공유하는 Shared Kernel 구조 설계
  • Activity Log 도메인을 분리하고 Kafka 기반의 비동기 메시징을 도입하여 Core 비즈니스 로직과 로그 저장 로직 간의 Failure Domain 격리
  • 7개의 전용 Kafka Topic을 정의하여 활동 유형별로 이벤트를 발행 및 소비하는 Event-Driven 구조 구현
  • 비밀번호 검증과 같은 즉각적인 응답이 필요한 케이스에 한해 Feign Client를 활용한 동기식 통신 제한적 적용
  • 내부 서비스 간 HTTPS 통신 적용 및 개발 환경 편의를 위한 Insecure Trust Manager 설정 운영

- 비동기 처리가 가능한 이벤트 기반 로직은 Kafka를 통한 Event-Driven 구조로 설계하여 서비스 간 결합도 최소화 - 여러 서비스가 공유하는 DTO 및 Event 정의는 별도의 Shared Module로 관리하여 타입 일관성 유지 - API Gateway에서 CORS 및 라우팅을 중앙 제어하여 개별 마이크로서비스의 설정 복잡도 감소 - 동기(Feign)와 비동기(Kafka) 통신 기준을 '응답 필요 여부'로 명확히 정의하여 아키텍처 일관성 확보

원문 읽기