AI Briefing

금융서비스 MSA 전환기 - DB 분리(1편)

·2023.07.17 10:55

대출비교 DB와 여신관리 서비스를 분리해 부하와 결합도를 낮췄다.

금융명의보호 서비스 출시를 계기로, 기존 대출비교 DB와 함께 쓰던 여신관리 서비스를 분리해 MSA로 전환했다. 핵심 목표는 메인 서비스 부하를 줄이고, 타 서비스 의존성이 큰 강결합 구조를 끊어 장애와 유지보수 리스크를 낮추는 것이었다.

전환 과정은 DDD 관점에서 출발했다. 도메인 이벤트를 과거형으로 정의하고, 업무 흐름을 기준으로 Bounded Context를 나눈 뒤, Aggregate Root를 선정해 여신정보가 아닌 기능은 적절한 팀과 서비스로 이관했다. 이 과정에서 상품 정보와 두낫콜 정보 같은 타 도메인 로직도 분리 대상이 됐다.

구조 개선도 함께 진행됐다.

  • 전사 공통 모듈(logging, user 검증 등) 제거
  • 빌드 툴을 Maven에서 Gradle로 변경
  • Multi Datasource 기반의 CQRS 적용
  • Repository, Service, Controller를 Command/Query로 분리
  • 외래키와 미사용 테이블 제거
  • utf8 → utf8mb4, Collation 변경
  • Push 알림 발송 로직을 Databricks로 이관

DB 설계에서는 외래키를 최대한 제거했다. DBA의 권고처럼 외래키는 성능 저하와 DDL/DML 관리 포인트 증가를 만들 수 있어, 이번 전환에서는 의존성을 줄이고 QPS·Latency 부담을 낮추는 방향으로 갔다.

애플리케이션 레벨에서는 읽기/쓰기 DB를 분리하는 설정으로 JPA Repository 접근 구조를 만들었다. @EnableJpaRepositories와 명시적인 EntityManager, TransactionManager 구성이 핵심이었고, 2개 이상의 DB를 다루는 환경에 맞게 configuration class를 별도로 구성했다.

전환 후에는 QA와 테스트 부담도 컸다. 금융 데이터 특성상 실제 연동이 어려운 구간은 Mockup Server로 대체해 테스트 시간을 줄였고, 기존 서버에서 신규 서버로의 트래픽은 Ingress prefix redirect로 전환했다.

결과적으로 대출비교 DB는 CPU Workload 약 10% 감소, 평일 QPS 20% 감소 효과를 얻었다. 여신관리 DB가 독립하고, 수신·자산·배치관리 DB도 각자 분리된 구조로 재편되며 MSA 전환의 1단계가 마무리됐다.

이 요약은 원문 이해를 돕기 위한 큐레이션입니다. 저작권은 원저작자에게 있으며, 정확한 내용과 맥락은 원문을 확인하세요.

요약 오류, 출처 표기 문제, 삭제 요청은 문의 · 건의로 알려주세요.