모 대기업 SI에 금융 도메인으로 면접을 보고 왔다. 면접 과정에서는 크게 못한 부분 없이 잘 했던 것 같지만 직무 면접에서 내게 오는 질문이 적어서 결과를 봐야 알 것 같다. 제발 이번엔 합격하고 싶은데 빨리 개발 일 하고싶다..
오늘의 TIL에는 면접준비를 하면서 흥미롭게 본 금융기관의 전산 시스템과 토스의 시스템을 비교해 정리해보려 한다.
참고사이트 : subokim
이미지 출처 : bikorea.net
계정이란 은행이 소유한 계좌, 통장을 말한다.
계정계는 계정을 관리하는 시스템이다.
세세한 데이터까지 따지면 기본적으로 수백억건의 데이터가 들어가 있다.
계정계 데이터는 돈을 거래한 기록이기 때문에 시스템 장애는 금전적 피해로 직접 연결된다. 따라서 2중, 3중 백업장치가 돌아가며 시스템이 매우 보수적으로 운영된다.
수신, 여신, 카드, 외환 등의 업무로 구성되어있고, 기본적으로 원장
에 트랜잭션이 집중되는 구조이기 때문에 안정적으로 트랜잭션을 처리하기 위한 미들웨어가 발달했다.
IBM Mainframe, Unix, Cobol, C 등 예전 언어가 보수적으로 사용되었다가 최근에는 Java를 많이 사용한다.
고객 정보, 분석정보를 다룬다.
거래 활동 및 성과를 분석하고 측정하기 위한 목적이다.
주요 시스템으로는 수익관리, 성과관리, 위험관리 시스템이 있다.
기본적으로 통합조회, 통계분석 등을 많이 하기 때문에 관계형 데이터베이스의 사용이 필수다. Java 기반으로 구축된 곳이 많지만 최근에는 빅데이터 기술을 많이 사용하는 추세다.
은행은 은행 외부기관과의 연계업무가 많다.
그래서 은행간 송금, 금융 공동망을 통한 업무 등을 처리하기 위해 은행의 대외적인 파트와 업무를 해야하는 경우 대외계를 통한다.
인터넷뱅킹, 텔레뱅킹, ATM 등이 여기에 속한다.
대용량 처리보단 정확성, 안정성에 중점을 준 트랜잭션 허브들이 도입되어 있다.
그외 모니터링, 통합관제 등을 위한 운영계와 은행 업무에 필요한 회계, 인사, 세무를 다루는 백오피스 시스템이 존재한다.
금융권에서 Java를 많이 사용하는 이유? 이식성이 좋아서이다. JVM 가상머신 위에서 돌아가기 때문에 어떤 환경이든 상관없이 돌아갈 수 있게 하는 장점이 크게 작용한다.
참고 사이트 : byline
기존 토스의 시스템은 크게 채널계와 계정계로 나뉜다.
채널계는 고객의 트래픽을 받아 계정계로 넘겨준다.
모든 서비스가 컨테이너화 되어 쿠버네티스로 관리된다.
계정계는 거래에 관련된 주요 서비스를 담당한다.
기존 금융 시스템과 비슷하게 모놀리틱으로 구성되었다.
하지만 다양한 배포전략을 위해 계정계와 채널계의 경계를 허물었다. 일부 서비스 장애시 전체 시스템이 마비될 수 있는 모놀리틱 구조를 MSA(마이크로서비스아키텍처)를 도입해 도메인을 분리했고, 각각의 서비스는 각각 CI/CD 파이프라인을 통해 독립적인 배포와 스케일아웃을 할 수 있도록 구축했다.
기존 금융권에서는 데이터센터급 장애 발생시 활성화되는 재해복구의 개념을 사용한다. 하지만 토스는 액티브-액티브 방식을 사용해 데이터 센터를 이중화해 구성했다. 따라서 한쪽에 장애가 생기더라도 서비스에 영향을 주지않게 되었다.