금융 시스템 아키텍처/데이터 파이프라인 정리
1) 금융 시스템이 복잡하게 설계될 수밖에 없는 이유
1.1 금융 = 규제 산업 → 데이터/업무가 “법”에 종속
- 금융 업무는 업무별 기준·준칙이 존재하고, 법률적 제약을 준수해야 하는 영역
- 업무 데이터를 단일 DB/단일 모델로 과도하게 “유기적으로” 엮어버리면 발생하는 문제
- 규제/내규 변경 발생 시 즉시 반영 난이도 상승
- 영향 범위(impact) 폭증 → 장애 리스크 확대
- 운영/감사 대응 난이도 증가
- 결과적으로 선택되는 설계 방향
- 업무 간 느슨한 결합(loose coupling)
- 경우에 따라 보수적 단일 DB 중심 아키텍처
- “보수적이지만 안정적인 선택”이 비용 대비 최적이 되는 구조
2) 테이블 설계 원리: 분리할 건 분리, 합칠 건 합치기
핵심 원리: 공통분모는 통합, 성격이 다른 건 분리
2.1 분리 예시: 대출 vs 카드 ‘심사’는 통합하면 손해
- 대출 심사와 카드 심사는 평가 항목이 구조적으로 다름
- 심사내역을 하나로 통합 시
- 칼럼/규칙의 폭발적 증가
- 예외 처리와 정책 변경 비용 증가
- 운영/감사 관점의 설명 복잡도 증가
- 결론: 심사 도메인은 분리 설계가 합리적
2.2 통합 예시: 연체 이후 프로세스는 공통분모가 큼
- 연체 이후는 대출/카드 공통 항목이 큼
- 연체금액, 연체일, 상환이력, 회수이력 등
- 이후 절차는 고객 단위 데이터 성격이 강함
- 경매/소송, 회생/파산, 신용회복 등
- 결론: 연체 이후 구간은 통합 설계가 유리해지는 맥락
2.3 “잘 관리되는 테이블”의 방향성 = 공통분모 중심 설계
- 고객정보는 고객 단위로 통합 관리되는 편이 개인정보 관리/정합성 측면에서 효율적
- 단, “무조건 통합”이 아니라
- 데이터량
- 트랜잭션 유형
- 변경 빈도
- 규제 영향 범위
를 함께 고려하는 설계가 필요
3) 전통적 금융 아키텍처의 큰 덩어리
3.1 Core + 채널/단말 + DW + 상품 팩토리
- 채널/단말: 영업망, 인터넷뱅킹, 모바일, ATM, 콜센터 등
- CORE(코어뱅킹): 예금/대출/외환/신탁 등 본업 처리
- DW(Data Warehouse): 분석/리포팅 목적의 통합 저장소
- 상품 Factory: 상품/금리/수수료 등 규칙·정책의 표준화/중앙관리
- 코드/메타 시스템: 공통코드 및 업무별 코드(여신/수신/카드/회계 등) 표준 체계
요약: 업무 안정성을 우선하는 코어 중심 구조 위에 채널이 붙고, DW가 별도로 존재하며, 상품/코드는 팩토리/메타로 표준화되는 형태
4) DW로 데이터를 가져오는 방법: CDC와 SCD
4.1 원천→DW 적재 파이프라인(전형)
- 원천 DB(대표적으로 Oracle)에서 CDC를 위한 로그 설정 활성화
- 초기 구간: Full Load(통째 적재)
- 이후 구간: CDC로 변경분 증분 반영(GoldenGate/LogMiner 등)
- DW 내부 레이어 분리
- Stage: 원천 데이터를 “그대로” 담는 구간
- Integration: 의미/정합성/표준을 맞추는 구간
- Mart: 분석/서비스 목적에 맞게 최적화한 구간
4.2 Oracle CDC를 위한 전제: ARCHIVELOG + Supplemental Logging
(1) Redo Log의 의미
- Oracle은 INSERT/UPDATE/DELETE 같은 변경 작업을 Redo Log에 기록
- 장애 복구 시 Redo Log를 재적용(redo)하여 상태 복원
(2) NOARCHIVELOG vs ARCHIVELOG
| 구분 | NOARCHIVELOG | ARCHIVELOG |
|---|---|---|
| Redo Log | 재사용(덮어쓰기) | 보관(Archive) |
| 과거 변경 추적 | 불가 | 가능 |
| 시점 복구(Point-in-time recovery) | 불가 | 가능 |
| CDC 가능성 | 불가 | 가능 |
| 금융권 운영 적합성 | 부적합 | 사실상 필수 |
- NOARCHIVELOG
- Redo Log가 가득 차면 덮어씀
- 과거 변경 이력 소실
- 개발/테스트 성격
- ARCHIVELOG
- Redo Log가 차면 Archive Log로 복사 후 보관
- 변경 이력을 시간 순으로 유지
- “DB 변경 블랙박스 기록” 성격
(3) Supplemental Logging의 의미(핵심만)
- 로그 기반 CDC가 “변경분을 정확히 재현”하려면
- UPDATE/DELETE에서 어떤 행이 바뀌었는지 식별 가능한 키 정보가 로그에 필요
- Supplemental Logging은 CDC가 필요한 키/식별 정보를 로그에 추가로 남기는 설정 범주
4.3 CDC(Change Data Capture) 방식 4종 비교
1) 로그 기반(Log-based CDC): GoldenGate, Debezium, LogMiner
- DB redo/transaction log를 읽어서 변경 이벤트 추출
- 장점: 원본 부하 낮음, 트랜잭션 경계 유지, 신뢰성 높음
- 단점: 초기 설정 필요, 로그 포맷/권한 의존
2) 트리거 기반(Trigger-based CDC)
- 테이블 트리거로 변경을 별도 테이블/큐에 기록
- 장점: 구현 단순(소규모), 세밀한 제어
- 단점: 원본 DB 부하 증가, 지연/관리 복잡
3) 타임스탬프/쿼리 기반(Polling)
- last_update_ts 같은 컬럼을 주기 조회
- 장점: 로그 접근 불필요, 구현 단순
- 단점: 동시성/정확성 이슈, 지연 발생
4) 덤프/배치(Full Extract + diff)
- 주기적으로 전체 덤프 후 diff 또는 truncate+reload
- 장점: 단순, 일관성 확보 상대적으로 쉬움
- 단점: 비용/시간 큼, 실시간 불가
4.4 SCD(Slowly Changing Dimension)란
- DW 차원 테이블(고객/상품 등)의 변경 이력을 어떻게 보존할지에 대한 설계 패턴
관계 정리:
- CDC: “무엇이 언제 바뀌었나?”를 잡아내는 수집 문제
- SCD: 잡아낸 변경을 DW 테이블에 어떻게 기록/표현할지의 저장 문제
| 구분 | CDC | SCD |
|---|---|---|
| 풀네임 | Change Data Capture | Slowly Changing Dimension |
| 관점 | 파이프라인/수집 | 모델링/저장 |
| 질문 | 무엇이 언제 바뀌었나 | 변경을 어떻게 남길까 |
| 결과물 | INSERT/UPDATE/DELETE 이벤트 | 이력형 차원 테이블 |
| 목적 | 누락 방지, 증분 적재 | 시점 분석, 이력 보존 |
5) “근본 개선 포인트” = 모델링보다 먼저 해야 할 일
- 모델 성능 개선 전에 데이터 생산 구조/규제 절차/원천 접근성부터 정리 필요
- 도메인 전문가(업무/규제)와의 협업이 필수인 이유
- 데이터 산출 과정 자체가 규제·내규·업무 절차의 결과물인 경우가 많음
- 원천 데이터 확보의 중요성
- 정제된 결과물만 있으면 정합성/누락/정의 변경을 검증하기 어려움
- 원천 기반으로 가능한 작업
- 정합성 체크
- 규제 변경 영향 범위 점검
- 변경을 “하나의 창구”에서 관리 가능한 구조로 개선
6) 금융 트랜잭션 흐름의 정석: 채널 → 연계 → 코어 → 대외기관
6.1 레이어 관점
- 채널: 인터넷/모바일/ATM/콜센터 등 다채널
- MCI: Multi Channel Integration(채널 통합 계층)
- Core Banking: 본업 트랜잭션 처리
- FEP: Front End Processor(대외기관 연동 전면 처리 계층)
- EAI: Enterprise Application Integration(단위 업무 시스템 연계)
핵심 메시지: 코어는 최대한 안정적으로 두고, 바깥(채널/대외연동/단위업무)은 연계 계층으로 흡수하는 구조
7) Legacy → New System: 왜 ‘데이터/모델 인프라’를 분리하는가
7.1 레거시의 한계
- 레거시는 “업무 처리”가 최우선인 세계
- 무거운 연산/실험/실패/재시도에 취약
- 모델 학습/피처 생성 같은 작업이 레거시 위에서 직접 수행되면
- 성능 예측 불가능
- 장애 위험 증가
- 운영 안정성 훼손
7.2 뉴 시스템의 방향
- Data Transform + 모델 트레이닝이 가능한 전용 환경을 분리 구축
- Kubernetes 기반 오케스트레이션으로 작업/자원/실패를 통제
구조 예시:
기존 시스템(EDW/Core) ──(Batch/지연)──▶ ML 전용 환경
├─ Feature Engineering
├─ Training/Experiment
└─ Batch/Job 실행(Kubernetes 관리)
8) Legacy ↔ New System 연결: “데이터는 배치, 모델은 실시간”이 기본이 되는 이유
8.1 데이터 사이클은 배치 중심
- 레거시 DB를 실시간으로 모델이 직접 때리면 발생하는 문제
- 트래픽 급증
- 쿼리 폭증/락 경합
- 예측 불가 부하
- 모델 배포 실수 → 은행 전체 장애로 전파
- 그래서 선택되는 방식
- Delayed Batch(T+1, T+1h, T+5m 등)
- Scheduling Batch(비피크 시간대 스케줄)
핵심 전제: 데이터 최신성 < 시스템 안정성
8.2 모델 사이클은 실시간 중심
- 모델이 사용되는 순간은 “지금 판단”이 필요한 순간
- 결제 승인
- 로그인
- 이상거래 탐지
- 추천 노출
- 배치 추론이면 타이밍 상실 → 실시간 API/이벤트 기반 추론 필요
8.3 진짜 이유: 책임 분리
| 영역 | 책임 |
|---|---|
| Data(Legacy) | 무결성, 안정성 |
| Model(New) | 반응성, 정확성 |
- 한 쪽 실패가 다른 쪽으로 전파되지 않게 하는 설계가 핵심
8.4 반드시 필요한 인터페이스 설계
- Dependency Injection: 모델이 레거시 DB를 직접 참조하지 않게 함(API/파일/이벤트)
- Input Data Generation: 피처 스키마/타입/결측 규칙을 계약처럼 고정
- Output 전송: 스코어/플래그/코드 형태로 업무 시스템이 해석 가능하게 전달
- 특히 AML 등에서는 최종 결정은 사람/업무 시스템, 모델은 판단 보조
9) 제약 인프라에서 모델 운영 시 체크리스트(운영 포인트)
9.1 운영 관점 유의사항(공통 주제)
- “성능”이 아니라 자원과 시간의 예측 가능성을 숫자로 관리하는 영역
- 메모리/지연/트래픽/GPU 부족이 장애로 직결
1) Model Size 관리
- 운영에서의 “모델 사이즈” 의미
- 파일 크기(가중치 저장 크기)
- 로딩 후 메모리 상주 크기(RAM/VRAM)
- 추론 시 추가 메모리(activation/cache/batch 등)
- 관리 지표 예
- peak VRAM usage
- p50/p95 latency
- throughput(req/s)
- 대표 대응
- Quantization(FP16/INT8)
- Distillation
- Pruning
- Batch size 조정
2) Task별 모델 프로세스 관리 → Inference Time 추정
- Task별로 입력/모델/후처리가 달라 지연이 달라짐
- 한 Task 폭주가 다른 Task를 죽이지 않게
- 프로세스/Pod 단위 격리
- 스케일링 독립
- SLA 관점에서 추론 시간(p95/p99) 기반 용량 산정 필요
3) Legacy Data Size 확인 + 네트워크 트래픽 추정
- Legacy → New 전송 순간의 변수들이 비용/장애 위험이 됨
- 파일 크기, 컬럼 수, 전송 주기, 압축 여부
- 운영 관점 계산 프레임(개념)
- GB/day, run/day, GB/run, 대역폭(MB/s), 전송 시간 ≈ 크기/대역폭
- 원활한 인터페이스를 위한 실무 선택
- 스키마 계약(컬럼/타입 고정)
- 압축(parquet + snappy)
- 증분 전달(전체 대신 변경분)
- 큐/버퍼(Kafka/S3 staging)
4) GPU 부족 대응
- 기존 weights load 재학습
- 처음부터 학습 대신 체크포인트 로드 후 짧은 fine-tune
- 비용/시간 절감
- epoch restore 등 재개 가능 구현
- epoch마다 checkpoint 저장
- optimizer/scheduler state 저장
- random seed/state 저장(재현성)
- 중단/eviction/spot 종료에도 이어서 학습 가능
10) 모델 압축(실용화를 위한 대표 전략)
- Pruning(가중치/헤드/레이어 제거)
- Weight Factorization(저랭크 근사)
- Knowledge Distillation(teacher→student)
- Weight Sharing(ALBERT류)
- Quantization(저비트 표현)
- Pre-train vs Downstream: task-specific/agnostic 모두 존재
11) 추천 시스템 파트: 전략 → 문제(콜드 스타트) → 아키텍처 개선
11.1 추천 전략/데이터 타입
- Content-based / Collaborative Filtering
- Explicit feedback(평점 등) vs Implicit feedback(클릭/구매/탐색 등)
11.2 협업 필터링의 한계: 콜드 스타트
- 행동 데이터가 쌓이지 않으면 계산 불가
- 신규 아이템/신규 유저에서 추천 품질 급락
- Content-based 등으로 보완 필요
11.3 추천 아키텍처에서 자주 발생하는 문제
- 상품 정보가 “데이터 생성 시점”에만 가용한 구조
- 결과
- 점진적 개선 어려움
- 모델 재활용 어려움
- 정책 변경(필터/부스팅)이 느림
11.4 개선 원칙 3가지
- 추천 모델과 서비스를 분리
- 상품/유저 정보를 서빙 타임에 접근 가능하게 구성
- 필터/부스팅 변경이 쉽고 빠르게 가능해야 함
랭킹 단계 결합 피처 예
- 검색 관련도
- 추천 모델 스코어
- 연관성 피처(이미지/카테고리 등)
- 상품 자체 피처(가격/리뷰/카테고리 등)
한 장 요약
- 금융 아키텍처는 “기술”보다 규제/안정성/운영이 우선이라 계층 분리와 느슨한 결합이 강함
- 테이블 설계는 성격 다른 업무는 분리, 공통분모 큰 구간은 통합이 원칙
- 레거시(코어/EDW)와 모델 인프라(뉴 시스템)는 목적이 달라 분리되고, 연결은 보통 데이터=배치 / 모델=실시간
- DW 적재는 CDC(수집)와 SCD(이력 저장)의 조합이 핵심
- 모델 운영은 성능보다 자원·지연·트래픽·복구 가능성을 관리하는 문제
- 추천 시스템은 모델 성능뿐 아니라 서빙 시점 데이터 접근성, 모델/서비스 분리, 정책 변경 용이성이 아키텍처 핵심
'BDAI FinDA 금융 데이터 분석 심화 과정' 카테고리의 다른 글
| 부동산이 아니라, 현금흐름 (1) | 2026.01.24 |
|---|---|
| 금융 데이터에는 정답이 없다 (0) | 2026.01.24 |
| 통계와 머신러닝을 구분해서 이해해야 하는 이유 (0) | 2026.01.23 |
| 불완전한 데이터로 세상을 추론하는 법 (0) | 2026.01.23 |
| 금융 데이터는 무엇을 측정해야 하는가 (0) | 2026.01.19 |