https://www.youtube.com/watch?v=amTJyIE1wO0
기본적 은행 -> 모노리식 (Monolithic)
은행 최초 msa 전환기
코어 뱅킹 시스템을 왜 마이크로 서비스로 전환하게 되었을까?
은행에는 크게
현재 은행 시스템 크게 2개 서버 중심 아키텍쳐
→ 차세대 시스템 아키텍쳐 (2개 서버 쓰는 방식) 2000년부터
그 이유는? 은행 시스템 변천사 보면 됨.
다양한 거래 요청을 한곳에서 처리할 수 있도록
20년 전 → 현재의 모바일 트렌드와는 맞지 않음
왜 수십년 지속되었는지?
토스 뱅크의 경우
모노리식으로 구성된 코어 뱅킹 시스템은 1개 서버, 1개 db 사용하기 때문에
트랜잭션 처리가 용이 (네트워크 구조 단순)
but 트래픽 몰리면 특정 코어뱅킹 서버만 스케일 아웃 못함
→ 안정성 부족
즉, 1개의 코어뱅킹 서버에서 모든 트랜잭션 처리하고 있음 → 1개의 코어뱅킹 서비스에서 장애 발생 → 전 업무 마비되는 구조
모바일 위주로 대량의 트래픽 처리해야하는 구조에는 현재의 거대한 모노리식 아키텍쳐로는 한계가 있음
4세대 (2022~)
아키텍쳐를 채널, 코어뱅킹간 경계를 허문 도메인 중심 msa 아키텍쳐로 설계
지금 이자 받기 서비스 : 한달에 한번 받던 이자를 → 원하는 시점에 언제든
기존에는 모노리식 코어뱅킹 시스템의 일부로 운영중 → 매일 70만명 → 여기에 트래픽 몰려서 전체 서비스 장애로 전파
해당 구조에서는 트래픽 위해 전체 코어뱅킹 서버 증설해야 했음 (비효율적)
트래픽 높은 이자 지급 도메인을 피크타임에 유연하게 스케일 아웃 할 수 있고 + 장애가 다른 서비스 장에로 이어지지 않도록
독럽적 마이크로 서비스로 전환 결정
< 개발방법>
기술스택 : 토스뱅크 채널 서버에서 사용하고 있는 기술 대부분 채택
쿠버네티스 위에 스프링 부트, 코틀린, jpa 기반 +
비동기 메시지 처리, 캐싱 : kafka, redis
1번째 고민 : 현재 모노리식으로 강결합 되어 있는 업무별 비지니스 의존성 어느 정도까지 느슨하게 할 지? →
이자 조회 위해서 필요한 도메인
이걸 다 하나의 마이크로 서버에서 처리하는 것은 msa 장점 활용하지 ㄴ못할 것 판단 → 도메인 단위로 서비스를 나누자
<실제 이자지급 서버 어떻게 개발했는지>
kafka 활용한 비동기 트랜잭션 구현
기존 뱅킹 시스템 → 1번의 이자 지금 위해 20개 테이블에 80번 update, insert 이뤄지는 복잡한 구조 → 정규화, 인덱스 잘 해도 속도 느림.
기존 트랜잭션에서 분리 가능한 테이블은 카프카 아용해 트랜잭션에서 분리!
분리 기준 : db 쓰기 지연이 발생했을때 고객 통장 데이터가 시시간으로 문제 발생하는가?
반드시 트랜잭션 보장되어야 하는 데이터 모델 // 즉시성 요하지 않는 모델 (세금 처리처럼 지금 이자 받기 트랜잭션과 묶이지 않아도 되는 데이터 모델의 dml) →트랜잭션 분리
기존 이자 받기 트랜잭션 : 80회 dml →
이자 받기 트랜잭션 : 50회 dml + 세금 30회 dml
redis 활용한 캐싱 전략
<기존 시스템 안정적으로 마이그레이션 하는 방법>
이자 받기 거래를 코어 뱅킹 서버에서 → 이자 지금 마이크로 서버로 전환하기 위해 순차 배포 과정 필요
api 안정적 전환 위해 이자 조회 거래 적용 → 지금 이자 받기 거래 적용