Home > 열린마당 > 공개SW 소식

공개SW 소식

8월 30일

ⓒ 블로터닷넷, 이지영 기자 / izziene@bloter.net

 

한국카카오은행(이하 카카오뱅크)의 성장세가 무섭다. 설립 2년 만에 계좌를 개설한 고객 수가 1천만명을 넘어섰다. 모임 통장 회원이나 신원등급 조회 회원을 합치면 1200만명 정도가 이용한다. 전체 사용자 비율 중 2-30대가 40% 이상을 차지한다. 모바일에 최적화된 금융 서비스로 젊은 사용자층에 성공적으로 자리 잡았다.

 

“은행에서 자산을 평가하는 기준은 수신과 여신입니다. 카카오뱅크는 예금과 적금액 17조5천억원, 여신에 해당하는 대출 기준은 11조3천억원으로 계속 급격히 상승중 중입니다.”

 

지난 8월29일부터 30일까지 서울 코엑스에서 열리는 카카오 개발자 행사 ‘이프 카카오(if Kakao) 개발자 컨퍼런스 2019’에서 정규돈 카카오뱅크 CTO는 카카오뱅크가 은행으로서의 기본 역할도 충실히 하면서 성장하고 있음을 보여줬다.

 

이런 성장세 뒤에는 카카오뱅크의 시스템 혁신이 자리 잡고 있다. 카카오뱅크는 x86과 오픈소스를 도입해 인프라를 구축했다. 운영체제(OS)도 전통적인 금융권이 택한 유닉스가 아닌 리눅스를 도입했으며, 사용 비율은 95%에 이른다. 그 외에도 다양한 내부 개발 프로젝트를 통해서 성능 개선을 꾀하고 있다.

 

쉽고 빠르고 정확한 금융 데이터 분산 처리, 프로젝트 ‘울드라맨’


카카오뱅크 데이터베이스는 오픈소스인 MySQL을 중심으로 설계되어 있다. 29일 ‘오픈소스 데이터베이스, 흐르는 은행 데이터에 빨대를 꽂아보다’라는 주제로 발표를 맡은 성동찬 카카오뱅크 인프라파트 매니저 설명에 따르면, 급격한 고객 증가와 폭발적인 트래픽 성장에도 불구하고, 이렇다 할 장애 없이 지난 2년을 보냈다.

 

“다양한 서비스를 고객에게 확장하고 싶은 요구와 기획이 나오기 시작했습니다. 중앙 데이터를 모아서 보석 같은 서비스로 만들어보자는 기획도 생겨났지요. 이런 기획에 잘 대응할 수 있도록 서비스를 운영할 방법이 없는지 고민하기 시작했습니다.”

 

통장 이력을 바탕으로 개인화된 콘텐츠를 기획하고, 여러 데이터를 바탕으로 고객 맞춤형 서비스를 기획하려면 이를 개발할 수 있는 DB가 튼튼해야 한다. 카카오뱅크는 단순히 사용자가 많이 찾는 은행이 아니라, 금융의 탈을 쓴 소셜 서비스라고 불릴 정도로 쌓는 데이터양이 상상을 초월한다. 이런 상황에서 데이터를 중앙 서버에서만 처리하는 식으로 인프라를 운영하면, 자연스레 인프라 위험 부담이 높아질 수밖에 없다.

 

“보석 같은 서비스를 위해서는 데이터 분산 처리가 시급하지요. 데이터를 분산 재배치한다는 건 중앙 데이터를 이관하는 것을 의미합니다. 이 방법으로 첫째는 쿼리로 조회해서 그 조회 결과를 주기적으로 퍼가는 SQL 데이터 퍼가는 방식이 있고, 둘째는 CDC(체인지 데이터 캡처)로 데이터 변경분만 퍼가는 방식이 있습니다.”

 

두 방식 모두 장단점이 존재한다. SQL로 퍼갈 경우 쿼리로 자유롭게 제어해서 데이터를 가져갈 수 있기에 구조가 간결해지고, 개발 레벨에서 쉽게 접근할 수 있다. 단, 지연된 커밋에 따라 누락된 데이터가 발생할 수 있다. 신뢰를 바탕으로 하는 금융 서비스에 도입하기엔 단점이 크다.

 

CDC로 변경분만 퍼가는 방식은 상대적으로 부하가 적고, 누락 없이 실시간 전송이 보장된다. 그러나 단순히 CDC만으로는 원하는 형태로 다양한 데이터를 가공할 수 없다는 한계가 존재한다.

 

성동찬 매니저가 MySQL의 트랜잭션 로그인 바이너리 로그를 활용해 은행 서비스 데이터를 다른 샤딩 DB에 효율적으로 분산 저장하는 방안을 고민하게 된 배경이다.

 

프로젝트 ‘울드라맨’은 마치 흐르는 데이터에 빨대를 꽂아 원하는 형태로 신속하고 정확하게 데이터를 재구성하는 역할을 수행한다. CDC 데이터를 MySQL로 옮기고, MySQL 데이터 유입이 되면 여기서 발생하는 변경 이력 바이너리 로그를 감지해 울드라맨이 분산 재배치한다. 소스에서 발생한 바이너리 로그를 1차적으로 파싱해서 태스크워커로 옮기고 추가로 연산할 수 있는 매소드를 생성해 처리한다.

 

“몬스터급 트래픽 처리를 고민하다가 분산 확장을 위해 시작한 프로젝트입니다. 데이터를 쉽고 정확하고 빠르게 처리하기 위한 용도지요. 자유롭게 커스터마이징 할 수 있도록 쉽게 만들었습니다. 향후 소스 DB가 MySQL이라면, 타깃이 무엇이 됐든 가리지 않고 자유롭게 형태를 전환할 수 있게끔 프로젝트를 개선하고 싶습니다.”

 

 

안전한 금융 거래를 위해 ‘FDS’ 직접 개발

 

카카오뱅크는 안전한 금융 거래에도 공을 많이 들이고 있다. 전상현 카카오뱅크 빅데이터 파트 매니저는 30일 ‘금융사기 잡는 카카오뱅크의 데이터 사이언스’ 발표에서 “안전한 금융 거래를 위해 이상거래를 탐지하는 전자금융 FDS를 특이하게 자체 개발했다”라고 말했다.

 

금융 사기는 매년 빠르게 진화하고 있다. 스미싱, 보이스피싱, 파밍, 대포통장이 따로 움직이지 않고 하나로 결합해 사기가 발생한다. 예전처럼 문자 하나 보내놓고 돈을 보내 달라고 하는 방식은 이제 거의 없다. 사용자가 결제하지 않은 해외 결제가 발생했다고 가짜로 문자를 보낸 뒤, 금융감독원을 사칭해 원격제어 앱을 설치를 유도하고 돈을 빼내는 수법 등 점점 사기가 고도화되고 있다.

 

카카오뱅크는 인터넷은행인만큼 사기를 더 빨리 정확하게, 신종 사기에 대응하기 위해 별도의 모형을 개발해 운영하고 있다. 카카오뱅크의 FDS 시스템은 24시간 동작해 이상 금융거래를 모니터링한다. 이상 거래가 감지되면, 자동으로 거래를 중지하는 등 실시간으로 탐지 활동을 벌인다.

 

이상 거래를 탐지하기 위해 카카오뱅크는 지도학습 기계학습 모형을 활용했다. 다양한 사기 거래 데이터를 통해 ‘정상 데이터와 달리 사기 데이터는 이런 특성이 있어’라는 걸 학습시킨 후 이상 거래를 탐지하는 방식이다.

 

“사기 데이터를 학습시키려면, 정상 거래와 비교해 사기 데이터가 적은 불균형 문제가 발생합니다. 전체 거래에서 사기 문제는 0.1% 이하여서 제대로 학습 모델을 설계하려면 여러 작업이 필요합니다. 저흰 데이터 불균형 문제를 해소하기 위해 정상과 사기 거래 비율의 차이, 고객 정보, 금융 활동, 앱 활동 데이터에서 정상 데이터는 언더 샘플링, 사기 데이터는 오버 샘플링을 통해 학습했습니다.”

 

전상현 매니저 설명에 따르면, 샘플링과 로스 비율을 조절해서 데이터 불균형을 해소했다. 카카오뱅크는 데이터 언더 샘플링과 오버 샘플링을 통해 정상과 사기 비율을 개선했다. 사기 데이터를 더 많이 수집하기 위해 통계적 기법을 VAE(Variational Autoencoder)를 통해 사기 데이터를 더 많이 생성해서 정상과 사기 비율을 맞췄다. 이후 분류 모형을 학습시키고 예측했다.

 

그 외에도 시계열 이벤트 데이터 처리를 통해 고객 앱 활동, 금융 활동을 패스트 텍스트 알고리즘을 써서 벡터화 했다. 계좌이체와 간편이체를 구분하고, 마이너스 대출과 신용대출을 구분해 벡터화 하고 이를 바탕으로 사기 탐지 모형을 만들었다.

 

최근에는 TDA(토폴로지 데이터 분석 방법)를 통해 이상탐지를 학습하고 있다. 이상탐지 데이터를 기계학습하고 그 과정을 시각화해 새로운 사기 수법을 찾아내는 데 적용했다.

 

“캐글의 신용카드 사기 데이터를 활용해 TDA를 해본 결과 드러난 모형에서 색이 밝으면 해당 클러스터 부분에 사기가 발생하고 있다는 걸 알 수 있더군요. 뉴럴 네트워크를 통해 분석하면 사기 여부만 알 수 있다면, TDA를 통해서는 몇 종류의 사기 종류가 있는지를 파악할 수 있습니다.”

 

※ 본 내용은 (주)블로터 앤 미디어(http://www.bloter.net)의 저작권 동의에 의해 공유되고 있습니다.
Copyright ⓒ 블로터 앤 미디어. 무단전재 및 재배포 금지

[원문출처 : http://www.bloter.net/archives/351562]

맨 위로
맨 위로