피드로 돌아가기
Dev.toBackend
원문 읽기
Monolith에서 Event-Driven Microservices로의 전환을 통한 도메인 격리 및 확장성 확보
From Monolith to Microservices: Why I Redesigned Finovara's Architecture - Finovara
AI 요약
Context
단일 Spring Boot Application 내에 인증, 트랜잭션, 활동 로그 등 모든 비즈니스 로직이 결합된 Monolithic 구조 운영. 서비스 규모 확대에 따라 코드 간 의존성이 심화되어 작은 수정에도 시스템 전체의 안정성이 위협받는 강한 결합도 문제 발생.
Technical Solution
- Spring Cloud Gateway 기반의 API Gateway 도입을 통한 SSL 처리 및 CORS 설정의 중앙 집중화
- contracts-backend 모듈을 Shared Kernel로 설계하여 Kafka Event Record 및 DTO의 전역적 일관성 유지
- Core-backend와 Activity-log-backend 간 Kafka 기반 비동기 메시징 구조 채택으로 장애 전파 차단 및 서비스 격리
- 비즈니스 핵심 로직과 부가 기능(Activity Log)의 쓰기 경로를 분리하여 시스템 복잡도 감소
- 비밀번호 검증과 같이 즉각적인 응답이 필요한 특정 케이스에 한해 Feign Client를 통한 동기 통신 적용
- UserDataDeletable 인터페이스 구현을 통한 분산 환경 내 사용자 데이터 삭제 로직의 일관성 확보
실천 포인트
- 도메인 간 통신 설계 시 응답 필요 여부에 따라 Kafka(비동기)와 Feign(동기)의 사용 기준을 명확히 정의할 것 - MSA 전환 초기 단계에서 공통 타입 및 이벤트 스키마 관리를 위한 Shared Module(contracts) 도입 검토 - API Gateway에서 공통 관심사(CORS, SSL, Routing)를 처리하여 개별 마이크로서비스의 설정 중복 제거